<?xml version='1.0' encoding='UTF-8'?><rss xmlns:atom='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' version='2.0'><channel><atom:id>tag:blogger.com,1999:blog-10970006</atom:id><lastBuildDate>Tue, 19 Feb 2008 15:09:33 +0000</lastBuildDate><title>o(ther)l/log</title><description/><link>http://people.no-distance.net/ol/olog/</link><managingEditor>O</managingEditor><generator>Blogger</generator><openSearch:totalResults>63</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-10970006.post-5504251852286797572</guid><pubDate>Tue, 19 Feb 2008 07:57:00 +0000</pubDate><atom:updated>2008-02-19T08:57:45.943+01:00</atom:updated><title>The cat...</title><description>... is &lt;a href="http://www.techcrunch.com/2008/02/18/ex-apple-team-prepares-to-launch-stealth-startup/"&gt;out of the bag&lt;/a&gt;</description><link>http://people.no-distance.net/ol/olog/2008/02/cat.html</link><author>O</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-10970006.post-1395890297045196305</guid><pubDate>Tue, 23 Jan 2007 14:45:00 +0000</pubDate><atom:updated>2007-01-23T15:49:42.067+01:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>s3</category><title>S3 Browser 1.0.6</title><description>... with fixes for a few crashers. Available through software update in you're running 1.0.2 or later or   on the &lt;a href="http://people.no-distance.net/ol/software/s3/"&gt;web page&lt;/a&gt;.</description><link>http://people.no-distance.net/ol/olog/2007/01/s3-browser-106.html</link><author>O</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-10970006.post-116845268550513531</guid><pubDate>Wed, 10 Jan 2007 18:04:00 +0000</pubDate><atom:updated>2007-01-10T19:14:42.586+01:00</atom:updated><title>Famous last words</title><description>&lt;blockquote&gt;"We've learned and struggled for a few years here figuring out how to make a decent phone, PC guys are not going to just figure this out. They're not going to just walk in."&lt;/blockquote&gt;
Palm CEO Ed Colligan, last month, about a hypothetical Apple &lt;a href="http://www.apple.com/iphone"&gt;iPhone&lt;/a&gt;</description><link>http://people.no-distance.net/ol/olog/2007/01/famous-last-words.html</link><author>O</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-10970006.post-116758167115964775</guid><pubDate>Sun, 31 Dec 2006 16:11:00 +0000</pubDate><atom:updated>2006-12-31T18:01:55.586+01:00</atom:updated><title>S3 Browser: source repository and auto-updates</title><description>&lt;a href="http://people.no-distance.net/ol/software/s3/"&gt;&lt;img class="imgdroite" src="http://people.no-distance.net/ol/software/s3/s3.png"&gt;&lt;/a&gt;I made a few changes to &lt;a href="http://people.no-distance.net/ol/software/s3/"&gt;S3 Browser&lt;/a&gt; this week. Not exactly new features or impressive bug fixes, but changes in how I'm coding and releasing S3 Browser.
&lt;p&gt;
First I moved my source repository to the objc-s3 project on Google Code Hosting, I was waiting for svnsync support, to be able to import my own subversion repository without losing history.  So &lt;a href="http://code.google.com/p/objc-s3/source"&gt;you can now checkout&lt;/a&gt; source code for S3 browser. This also means that I might not do source release for absolutely every minor version, but I always &lt;a href="http://objc-s3.googlecode.com/svn/tags/"&gt;tag&lt;/a&gt; released versions in svn.
&lt;p&gt;
I was already using the &lt;a href="http://code.google.com/p/objc-s3/issues/list"&gt;issues tracker&lt;/a&gt; in Code Hosting. However I will probably not use the downloads area, the fact that it is &lt;a href="http://code.google.com/hosting/faq.html#nodelete"&gt;not possible&lt;/a&gt; to remove a download is immediate show-stopper for me. If I ship a version with a very serious security problem (not likely considering what the application does with the keychain, but you never know), I want to be able to remove it as soon as possible. Ditto for a version that would have a major bug, deleting local files etc. "Tagging as obsolete" is not enough.
&lt;p&gt;
The only things I'm really missing from Trac are: a good SVN browser, the project Timeline, and automatic links in ticket numbers, revisions and changeset.
&lt;p&gt;
Another important change: I now use the &lt;a href="http://andymatuschak.org/pages/sparkle"&gt;Sparkle&lt;/a&gt; framework to manage application updating. I released a &lt;a href="http://people.no-distance.net/ol/software/s3/"&gt;1.0.2&lt;/a&gt; with minor bugfixes and auto-update support. At launch, it should check the appcast feed and propose a 1.0.3 (one minor change, it's only to check update is working). Expect more frequent releases.</description><link>http://people.no-distance.net/ol/olog/2006/12/s3-browser-source-repository-and-auto.html</link><author>O</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-10970006.post-116637212679850082</guid><pubDate>Sun, 17 Dec 2006 16:14:00 +0000</pubDate><atom:updated>2007-01-01T11:05:35.266+01:00</atom:updated><title>Obj-C Runtime fun Redux</title><description>&lt;a href="http://people.no-distance.net/ol/olog/2005/03/obj-c-runtime-fun.html"&gt;More than a year ago&lt;/a&gt;, I wrote a quick note about how the Objective-C runtime allows you to access class structure, for instance to dump a graphical view of in-memory instance graph, similar to what &lt;a href="http://www.cs.auckland.ac.nz/~j-hamer/LJV/Tutorial.html"&gt;LVJ&lt;/a&gt; was doing.
&lt;p&gt;
I got an email a few days ago asking for the code (never promise anything : you will have to deliver it eventually) so I dug in my disks to find a version of this code on a laptop harddrive that I planned to reformat... 
&lt;P&gt;
Let me stress that this code is ultra-naïve, is a performance hog and is probably almost totally useless for anything serious. It was just a fun hack done in a few minutes, don't expect anything else. Oh, I'm might not work at all with the new Leopard Objective-2.0 runtime.
&lt;P&gt;
That being said, here is a quick walkthrough through the code. There's basically three parts in the hack:
&lt;ul&gt;
&lt;li&gt; Use Objective-C reflection API to introspect class structure 
&lt;li&gt; Navigate in an instance graph, processing class and instance variables name and values on the way, and keeping track visited objects.   
&lt;li&gt; Dump DOT representation for the navigated instances.
&lt;/ul&gt;
&lt;P&gt;
Introspecting class structure might look a bit frightening: you don't have a full, clean, object-based reflection API in Objective-C similar to what you have in Java or C#, you will need to go back to runtime-level. The Apple &lt;a href="http://developer.apple.com/documentation/Cocoa/Reference/ObjCRuntimeRef/"&gt;Objective C Runtime&lt;/a&gt; documentation is a good reference. The interesting stuff is in &lt;tt&gt;#include &amp;lt;objc/objc-class.h&amp;gt;&lt;/tt&gt;.
&lt;pre class="smalloutput"&gt;
struct objc_class {                     
        struct objc_class *isa; 
        struct objc_class *super_class; 
/* ... */
        struct objc_ivar_list *ivars;
};

typedef struct objc_class *Class;

struct objc_ivar {
        char *ivar_name;
        char *ivar_type;
        int ivar_offset;
};
&lt;/pre&gt;
&lt;p&gt;
Cool. Everything we need to know about. Obtaining the &lt;tt&gt;struct objc_class&lt;/tt&gt; from an Objective-C instance is straightforward: &lt;tt&gt;[myObject class]&lt;/tt&gt;. 
&lt;p&gt;
Then we just have to iterate:
&lt;pre class="smalloutput"&gt;
- (NSArray*)getFieldsForClass:(Class)klass 
{
 NSMutableArray* array = [NSMutableArray array];
 int i;
 Ivar ivar;
 struct objc_ivar_list* ivarList = klass-&gt;ivars;
 if (ivarList!= NULL &amp;&amp; (ivarList-&gt;ivar_count&gt;0)) {
  for ( i = 0; i &lt; ivarList-&gt;ivar_count; ++i ) {
   rtIvar = (ivarList-&gt;ivar_list + i);
   // Interesting stuff:
   // ivar-&gt;ivar_type, ivar-&gt;ivar_name, ivar-&gt;ivar_offset
   // Store this info in a OCVField object, add it to array
  }
 }
 if (klass-&gt;super_class!=0)
  [array addObjectsFromArray:[self getFieldsForClass:klass-&gt;super_class]];
 return array;
}
&lt;/pre&gt;

The &lt;tt&gt; ivar_type&lt;/tt&gt; is a string, &lt;a href="http://developer.apple.com/documentation/Cocoa/Conceptual/ObjectiveC/Articles/chapter_5_section_7.html"&gt;a type encoding&lt;/a&gt; representing the ivar type. You might have encountered it with Foundation serialization. With the offset, we know where to peek from the instance pointer to get ivar value.
When you know the ivar name, you can also use the runtime function &lt;tt&gt; class_getInstanceVariable&lt;/tt&gt;.
&lt;p&gt;
Then, browsing an instance graph is not that hard:
&lt;pre class="smalloutput"&gt;
-(void)processFieldsForObject:(id)obj fields:(NSArray*)f toString:(NSMutableString*)s
{
 OCVField* field;
 NSEnumerator* e = [f objectEnumerator];
 while (field = [e nextObject])
 {
  if (![field isPrimitive]) {
   NSString* name = [field getName];
   id ref = [field getValueForObject:obj];
   if (ref==nil) {
    // A link to a new "nil" node in the graphical reprensentation
    // Why the special case ? we don't want a single nil node with 
    // hundred of links pointing to it.
   }
   else 
   {
    // A link from obj to the 'ref' ivar value
    [self appendGraphvizRepresentationFor:ref toString:s];
   }
  }
 }
}

-(void)appendGraphvizRepresentationFor:(id)obj toString:(NSMutableString*)s
{
 if (obj==nil)
  obj = [NSNull null];
 
 if ([visited containsObject:obj])
        return;
    
    [visited addObject:obj];    
    [obj appendDotRepresentationToString:s withContext:self];
    if ([obj processFields])
        [self processFieldsForObject:obj fields:[obj getFields] toString:s];
}
&lt;/pre&gt;

The only missing part is producing GraphViz Dot syntax. Objective-C categories are a nice way to implement that: we add methods to existing class, starting with NSObject to specify the Dot representation for an instance with the given type, and to authorize or not further ivar processing for the instance. 
&lt;p&gt;
For example, for NSArray and NSDictionary, we'll have a custom representation, and for a NSString, we just want to output the "description" (e.g. the value) of the string instance:
&lt;pre class="smalloutput"&gt;
@implementation NSString (DotRepresentation)

-(BOOL)processFields
{
    return NO;
}

-(void)appendDotRepresentationToString:(NSMutableString*)s withContext:(OCVContext*)c
{
 [s appendFormat:@"%@ [label=\"@\\\"%@\\\"\"];\n",[self dotName],[self description]];
}
@end
&lt;/pre&gt;
&lt;p&gt;

Et voilà: the &lt;a href="http://people.no-distance.net/ol/olog/media/06/ocv.dot"&gt;dot file&lt;/a&gt; (for GraphViz, check out the great &lt;a href="http://www.pixelglow.com/graphviz/"&gt;OS X version&lt;/a&gt;), or  &lt;a href="http://people.no-distance.net/ol/olog/media/06/ocv.pdf"&gt;pdf rendering&lt;/a&gt; 
&lt;p&gt;
&lt;p&gt;&lt;img src="http://people.no-distance.net/ol/olog/media/06/ocv.png" /&gt;&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://people.no-distance.net/ol/software/objcviz/"&gt;Source code&lt;/a&gt;, BSD License. Please check the &lt;a href="http://people.no-distance.net/ol/olog/2005/03/obj-c-runtime-fun.html"&gt;first post&lt;/a&gt; for additional notes. &lt;br&gt;Thanks Michael for the motivation !</description><link>http://people.no-distance.net/ol/olog/2006/12/obj-c-runtime-fun-redux.html</link><author>O</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-10970006.post-116094554626929219</guid><pubDate>Sun, 15 Oct 2006 20:47:00 +0000</pubDate><atom:updated>2006-10-15T22:57:53.326+02:00</atom:updated><title>The Debian / Mozilla Firefox controversy</title><description>The caption will only make sense for french readers (basically "Mozilla &amp; Debian mourning over the Body of The Open-Source Cooperation Spirit - An allegory"). The acrimony in the debate is getting quite ridiculous:&lt;p&gt;
&lt;a href="http://people.no-distance.net/ol/olog/media/06/debian-moz.jpg"&gt;&lt;img src=http://people.no-distance.net/ol/olog/media/06/debian-moz-thumb.jpg&gt;&lt;/a&gt;</description><link>http://people.no-distance.net/ol/olog/2006/10/debian-mozilla-firefox-controversy.html</link><author>O</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-10970006.post-116003551038946625</guid><pubDate>Thu, 05 Oct 2006 08:03:00 +0000</pubDate><atom:updated>2006-10-06T11:52:01.410+02:00</atom:updated><title>The funny thing about Google Codesearch...</title><description>They're &lt;a href="http://www.google.com/codesearch"&gt;indexing&lt;/a&gt; code within zip files and tarballs (update: they're also indexing online source control &lt;a href="http://getahead.ltd.uk/blog/joe/2006/10/05/using_google_as_a_cvs_repository_browser.html"&gt;repositories&lt;/a&gt;):
&lt;p&gt;
&lt;a href="http://people.no-distance.net/ol/olog/uploaded_images/codesearch-752544.png"&gt;&lt;img style="margin:0px 10px 10px 0px;cursor:pointer; cursor:hand;" src="http://people.no-distance.net/ol/olog/uploaded_images/codesearch-745463.png" border="0" alt="" /&gt;&lt;/a&gt;</description><link>http://people.no-distance.net/ol/olog/2006/10/funny-thing-about-google-codesearch.html</link><author>O</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-10970006.post-115938786198464710</guid><pubDate>Wed, 27 Sep 2006 20:02:00 +0000</pubDate><atom:updated>2006-09-28T13:00:33.780+02:00</atom:updated><title>Google Code SVN History Import ?</title><description>So &lt;a href="http://groups.google.com/group/google-code-hosting/browse_thread/thread/495de2d4a7260a0/8d44b1e309d4a23f?lnk=gst&amp;q=svnsync&amp;rnum=1#8d44b1e309d4a23f"&gt;apparently&lt;/a&gt;, it is now possible to import an existing repository into Google Code Hosting while preserving history, through &lt;a href="http://svn.collab.net/repos/svn/trunk/notes/svnsync.txt"&gt;svnsync&lt;/a&gt;.  Which is not yet reflected in the &lt;a href="http://code.google.com/hosting/faq.html"&gt;FAQ&lt;/a&gt; (in the case you'd be able to actually -find- a link to the FAQ from the Google Hosting site).</description><link>http://people.no-distance.net/ol/olog/2006/09/google-code-svn-history-import.html</link><author>O</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-10970006.post-115926883798778954</guid><pubDate>Tue, 26 Sep 2006 11:02:00 +0000</pubDate><atom:updated>2006-09-26T13:10:24.720+02:00</atom:updated><title>KVO, KVC</title><description>Isn't that strange that &lt;tt&gt;- (id)valueForKeyPath:(NSString *)keyPath&lt;/tt&gt;does not play well with &lt;tt&gt;- (id)valueForUndefinedKey:(NSString *)key&lt;/tt&gt; in Foundation ? Todo: extract the code, post it here so I can be proved wrong, file a bug.</description><link>http://people.no-distance.net/ol/olog/2006/09/kvo-kvc.html</link><author>O</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-10970006.post-115763336704307285</guid><pubDate>Thu, 07 Sep 2006 12:11:00 +0000</pubDate><atom:updated>2006-09-07T14:58:10.010+02:00</atom:updated><title>BigTable, or Infrastructure Paradise, Part 1</title><description>The &lt;a href="http://labs.google.com/papers/bigtable.html"&gt;BigTable&lt;/a&gt; paper is a very interesting document, that should be read in parallel with &lt;a href="http://www.adambosworth.net/archives/000038.html"&gt;an old post&lt;/a&gt; by Adam Bosworth. &lt;p&gt;
What is fascinating with BigTable is of course what it does: scaling to very large sizes, distributed, time-versionned, latency, replication, but even more fascinating with what it does &lt;b&gt;not&lt;/b&gt;: BigTable is &lt;i&gt;not&lt;/i&gt; a relational DBMS, it is not a strongly typed data model, it is not a write-mostly database, it is not row-oriented, it only supports transaction at row level. 
&lt;p&gt;
Where do I really need SQL ? How much of my database load is represented by something else than record access - or multiple records taking advantage of the natural locality of a given table ? or just fetching a relationship ? would my search patterns  be more efficient by using information retrieval techniques on top of a "dumb" DB holding the truth (i.e. BigTable like) instead of a &lt;a href="http://www.pui.ch/phred/archives/2005/04/tags-database-schemas.html"&gt;relational model&lt;/a&gt; ? Can I loosen an ACID constraint for some of my data ? How can I take advantage of things I -know- about my own data patterns (hot/cold data ? unrelated data ?) How can I remove from my model hidden assumptions that will block my "transparent scaling" efforts (ID sequences, etc) ? &lt;a href="http://radar.oreilly.com/archives/2006/04/web_20_and_databases_part_1_se.html"&gt;After hearing database war stories, how do I scale with databases ?&lt;/a&gt;
&lt;p&gt;
I'm not saying at all that SQL databases are inherently bad - but what is good with things like BigTable is that is force you to reexamine your assumptions about what your storage is, and how your application should interop with it.
&lt;p&gt;
And of course, my ultimate dream infrastructure would be a "Web 2.0 Infrastructure Software Pack", with a low-level, replicating storage (think GFS, or S3, or &lt;a href="http://wiki.apache.org/lucene-hadoop/"&gt;Hadoop DFS&lt;/a&gt;, &lt;a href="http://code.whytheluckystiff.net/parkplace"&gt;ParkPlace&lt;/a&gt;), a queue and transaction service (think SQS, Chubby), a inherently scalable database (BigTable, &lt;a href="http://db.csail.mit.edu/projects/cstore/"&gt;C-Store&lt;/a&gt;, ...) and a shared-nothing framework (Rails, PHP, etc.). And scaling would mean adding a box, start services. And I have this feeling that using "standard" LAMP architectures is not the best way to accomplish this: I want a small-scale Google-like architecture on a few boxes.</description><link>http://people.no-distance.net/ol/olog/2006/09/bigtable-or-infrastructure-paradise.html</link><author>O</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-10970006.post-115737231291174190</guid><pubDate>Mon, 04 Sep 2006 12:14:00 +0000</pubDate><atom:updated>2006-09-06T00:49:59.563+02:00</atom:updated><title>S3 Browser hits 1.0</title><description>&lt;a href="http://people.no-distance.net/ol/software/s3/"&gt;&lt;img class="imgdroite" src="http://people.no-distance.net/ol/software/s3/s3.png"&gt;&lt;/a&gt;This &lt;a href="http://people.no-distance.net/ol/software/s3/"&gt;version&lt;/a&gt; adds support for multiple files upload. When uploading a directory, the contained files will be mapped to a slash-delimited path as key to conserve the hierarchy. Another important change in file upload is support for content-type, using by default the mime-type provided by Mac OS X for a given file (thanks Jason for the motivation). Both key and content-type can be changed from the default values when uploading. Here is a &lt;a href="http://people.no-distance.net/ol/software/s3/s3upload.png"&gt;example&lt;/a&gt;.&lt;p&gt;
The backend code has also been revamped to properly batch multiple parallel requests to the service, streamed transfer can be also inspected like the non-streaming variety. Large buckets are also supported (by sending successive lists queries to build the object list), and there's also a lot of small UI and back-end fixes. And a preference panel. How could an application be finished without a preferences panel ?
&lt;p&gt;
All in all, this version has almost everything I wanted initially for this tool, thus the 1.0 moniker (1.0.1 actually, I fixed a small bug with key encoding). The problem of course is that I have new feature ideas. Complete ACL support is quite high on my list, as well as having something to deal with huge buckets, from the UI point of view: probably a hierarchical view of some sort, and a live search on object list.</description><link>http://people.no-distance.net/ol/olog/2006/09/s3-browser-hits-10.html</link><author>O</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-10970006.post-115698686793906054</guid><pubDate>Wed, 30 Aug 2006 22:33:00 +0000</pubDate><atom:updated>2006-08-31T12:28:20.283+02:00</atom:updated><title>EC2 SOAP + XMLSig + WSSE + X509 = Frustration</title><description>&lt;p&gt;I'm exploring the &lt;a href="http://docs.amazonwebservices.com/AmazonEC2/dg/2006-06-26/using-soap-api.html"&gt;EC2 SOAP API&lt;/a&gt;. Why ? I never really developed a client for a SOAP API, and this was a good occasion, and the interesting constraint is that it's not just a SOAP API, but a SOAP API complying with the WS-Security standard, where the messages are signed - in the EC2 case, it's with X.509 certificate with a public key.&lt;/p&gt;
&lt;p&gt;A bit like what I did for S3 with my small Mac OS S3 Utility, I wanted to code a small OS X 'EC2 Console'. First problem: OS X SOAP support is not really exhaustive (although &lt;a href="http://developer.apple.com/documentation/Networking/Conceptual/UsingWebservices/index.html"&gt;WebServices Core&lt;/a&gt; is a good start), but I need more: &lt;a href="http://www.w3.org/TR/xmldsig-core/"&gt;XML Signature&lt;/a&gt;, &lt;a href="http://www.oasis-open.org/committees/download.php/16790/wss-v1.1-spec-os-SOAPMessageSecurity.pdf"&gt;WSSE&lt;/a&gt; and &lt;a href="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0.pdf"&gt;BinarySecurityToken&lt;/a&gt;. SOAP support, for the subset I need for the EC2 API is not that hard and can be generated by hand easily. Signature is another matter: you have to canonicalize subset of the document, compute a digest on the canonical form, embed this in the signature part of the document (and actually do that twice, one for the actual SOAP body representing the request and another time for the timestamp), and then canonicalize and sign this signature section.&lt;/p&gt;
&lt;p&gt;The first issue was canonicalization, NSXMLNode has a &lt;a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSXMLNode_Class/Reference/Reference.html#//apple_ref/occ/instm/NSXMLNode/canonicalXMLStringPreservingComments:"&gt;method&lt;/a&gt; and OpenSSL provides functions for sha1 digests and base64 encoding. The problem was the NSXMLNode method: it seems to be intended for canonicalization of entire documents, canonicalization of a subset does not correctly reintegrate XML namespaces defined on a parent tag. So the digest was not the same than my reference (a trace from the Amazon EC2 java tool). It took me a few hours to finally catch what was happening but, well. Simple fix: force namespace in the subset before computing de digest. Ugly, but works&lt;/p&gt;
&lt;p&gt;The second issue is still open: my signature code generates something that's different from my 'reference' message (which might be explained by slight whitespace differences in the XML subset), and indeed, EC2 refuses my SOAP request with a authentication error. So either I'm missing something else in the canonicalization or I'm not using correctly OpenSSL to generate my rsa/sha1 signature, or the XML Signature expects something slightly different from what I get with my naive openssl use (load the private key pem file with &lt;tt&gt;PEM_read_bio_RSAPrivateKey&lt;/tt&gt; then use &lt;tt&gt;RSA_private_encrypt(inlen, input, output, key, RSA_PKCS1_PADDING)&lt;/tt&gt;.&lt;/p&gt;
&lt;p&gt;So I'm left with either: trying other openssl functions and options (&lt;tt&gt;RSA_sign&lt;/tt&gt; maybe ? but it seems to be intended for PKCS #1 v2.0, and not PKCS #1 v1.5), learning how to use the xmlsec library and attempt a message generation with it, or look at the xmlsec or Axis sources to try to find if there's any subtlety with the rsa-sha1 signing process. Sigh&lt;/p&gt;</description><link>http://people.no-distance.net/ol/olog/2006/08/ec2-soap-xmlsig-wsse-x509-frustration.html</link><author>O</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-10970006.post-115697261232906467</guid><pubDate>Wed, 30 Aug 2006 21:03:00 +0000</pubDate><atom:updated>2006-08-31T02:00:49.426+02:00</atom:updated><title>Native Unicode support in programming languages</title><description>It's much needed.  Here is my humble proposal (image version &lt;a href="http://people.no-distance.net/ol/olog/media/06/uni-code.png"&gt;here&lt;/a&gt;):

&lt;pre class="output"&gt;
❖include ❝list.h❞
❖include ❰iostream❱

bool List♒printout()  
◤
   Item♂ curr;
   curr = next;

   ☁
   ◤
     ♻(curr) 
       cout ⇇ ❝ node ❞  ⇇ curr➟val ⇇ ❛⏎❜;
   ◣

   ☂ (int err)
   ◤
     ➲ ✖;
   ◣
   ➲ ✔;
◣

int main()
◤
  List♂ l = ♥ List();

  l➟printout()

  ☠ l;

  ➲ 0;
◣
&lt;/pre&gt;

&lt;a href="http://en.wikipedia.org/wiki/Image:APL_keyboard.gif"&gt;APL&lt;/a&gt;, new generation.</description><link>http://people.no-distance.net/ol/olog/2006/08/native-unicode-support-in-programming.html</link><author>O</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-10970006.post-115679170777291023</guid><pubDate>Mon, 28 Aug 2006 18:58:00 +0000</pubDate><atom:updated>2006-08-28T21:05:32.650+02:00</atom:updated><title>Useless screenshot</title><description>&lt;p&gt;Somebody asked for an EC2 "screenshot".&lt;/p&gt;

&lt;pre style="color:green; background-color:black; padding:7px"&gt;sleepless:~ olg$ ssh -i id_rsa-gsg-keypair root@xxx.compute.amazonaws.com


         __|  __|_  )
         _|  (     / 
        ___|\___|___|

 Welcome to an EC2 Public Image
                       :-)
 
[root@domx-xx-xx-xx-xx-xx-xx ~]#    
&lt;/pre&gt;

&lt;p&gt;Awfully interesting, isn't it ?&lt;/p&gt;</description><link>http://people.no-distance.net/ol/olog/2006/08/useless-screenshot.html</link><author>O</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-10970006.post-115667857832699421</guid><pubDate>Sun, 27 Aug 2006 11:29:00 +0000</pubDate><atom:updated>2006-08-27T13:41:54.743+02:00</atom:updated><title>Stats galore</title><description>&lt;p&gt;O'Reilly Labs collected statistics from 672 of their books, and put everything accessible &lt;a href="http://labs.oreilly.com/stats/"&gt;online&lt;/a&gt;. Lot of interesting ways of exploring the data: from book structure to example distribution.
&lt;p&gt;My own experiment: search for the most popular tags in a given year (no direct link because the results are displayed with an ajaxy trick):
&lt;dl&gt;
&lt;dt&gt;1997&lt;/dt&gt;
&lt;dd&gt;files, variables, functions and arrays
&lt;/dd&gt;
&lt;dt&gt;1998&lt;/dt&gt;
&lt;dd&gt;files methods, text,  ...  web site, html also present but farther away
&lt;/dd&gt;
&lt;dt&gt;1999&lt;/dt&gt;
&lt;dd&gt;URLs is the big thing, with databases, files, backups. Linux and security
&lt;/dd&gt;
&lt;dt&gt;2000&lt;/dt&gt;
&lt;dd&gt;URLs, methods files security and objects
&lt;/dd&gt;
&lt;dt&gt;2001&lt;/dt&gt;
&lt;dd&gt;files, classes and methods, objects security servers
&lt;/dd&gt;
&lt;dt&gt;2002&lt;/dt&gt;
&lt;dd&gt;methods, classes functions and commands
&lt;/dd&gt;
&lt;dt&gt;2003&lt;/dt&gt;
&lt;dd&gt;classes methods, objects files and configuration
&lt;/dd&gt;
&lt;dt&gt;2004&lt;/dt&gt;
&lt;dd&gt;functions, methods, Oracle. XML, web sites, SQL Server
&lt;/dd&gt;
&lt;dt&gt;2005&lt;/dt&gt;
&lt;dd&gt;methods, commands, functions, classes, web sites and security
&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;Totally non-scientific, but it is quite funny to see URLs mostly visible in 1999 and 2000. Also interesting that OOP-related tags where a bit hidden in the noise first, but then clearly in front and stable at this position.&lt;/p&gt;</description><link>http://people.no-distance.net/ol/olog/2006/08/stats-galore.html</link><author>O</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-10970006.post-115642919512035039</guid><pubDate>Thu, 24 Aug 2006 14:19:00 +0000</pubDate><atom:updated>2006-08-31T12:23:58.096+02:00</atom:updated><title>Playing with Amazon EC2</title><description>&lt;p&gt;
Another announce in the Amazon "WebServices" portfolio: &lt;a href="asdadsads"&gt;Elastic Compute Cloud&lt;/a&gt; (EC2 for short) is a highly adaptable hosting environment. 
&lt;p&gt;
I signed up for the beta, here is some notes from my (short) experience with EC2.
&lt;p&gt;
Don't let the first paragraph on their web page fool you: when amazon says that it's a "web service that provides resizable compute capacity in the cloud", what they actually mean is that you use or provide a disk image for your server, choose how many instances of this image you want to run, and there's no step three. Don't worry about the web service part, you can run everything through Java command-line tools, and the command-line tools are just for the administration of your instances, and not related to what's running on the instances themselves.
&lt;p&gt;
Pricing is interesting: $0.10 per instance-hour consumed (about $73 a month for an always-on server), and bandwidth cost is similar to the S3 services ($0.20 per GB). Customized images are stored on S3 ($0.15 per GB-Month).
&lt;p&gt;
After setup (certificate generation, instance creation), you get access to a Xen-based, virtualized machine. According to Amazon, "each instance predictably provides the equivalent of a system with a 1.7Ghz Xeon CPU, 1.75GB of RAM, 160GB of local disk, and 250Mb/s of network bandwidth. I did some quick micro-benchmarks. Upload and download bandwidth seems to be in line with what I observed with S3, and the machine itself feel fast, which seems corroborated with various small tests.  
&lt;p&gt;
You then just have to open the ports you need (let's say ssh and http), and log in to your new server. Yes, you're root, and you can install whatever you want (refer to the &lt;a href="http://www.amazon.com/b/ref=sc_fe_c_0_201590011_6/002-2198984-7132003?ie=UTF8&amp;node=3440661&amp;no=201590011&amp;me=A36L942TSJ2AJA"&gt;agreement&lt;/a&gt; for details).
&lt;p&gt;
Caveats: EC2 "adaptable hosting environment" is highly dynamic, you get a lot of freedom and reactivity when deploying your instances, but it comes with constraints that are not usual in "classic" hosting environments. First, your instance is allocated dynamically when you request it, and your image will be assigned an IP. Also, you can't use your own kernel (Xen is probably the blocker here). Then, you should now think about your instance as a new machine: when you're starting a new machine, it's allocated and ready to run, but when you're terminating the instance, you're not just "shutting down" the machine, you're scrapping your machine: all your data store locally on the instance are lost. It is your responsibility to backup to S3 or to another instance.
&lt;p&gt;
Other interesting features: you can define security "groups", which are collections of access rules which control traffic to your instances (i.e. only accept connections from members on the group, only open port 80, only accept ssh access from a specific subnet). Groups can then be applied when launching a new instance. Building a custom image 
&lt;p&gt;
This is a really interesting move from Amazon, and an interesting new piece in the puzzle, with web frameworks and resources going more and more the stateless/replicated road. Having a hosting infrastructure where allocating a new resource can be done in five minutes is big plus ... if the application has been designed in a way that it can take advantage easily of the new resource.
&lt;p&gt;
I'm toying with the idea of developing a small "EC2 Console" application. Too bad the REST API is not yet available.</description><link>http://people.no-distance.net/ol/olog/2006/08/playing-with-amazon-ec2.html</link><author>O</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-10970006.post-115606669240056970</guid><pubDate>Sun, 20 Aug 2006 09:37:00 +0000</pubDate><atom:updated>2006-08-20T11:40:07.466+02:00</atom:updated><title>Quote of the day</title><description>&lt;blockquote&gt;We used to write algorithms. Now we call APIs. [..]
&lt;p&gt;
Times have changed. Welcome to a world where the programmer who knows how to tap into other people's brains and experience using the Internet has a decisive advantage.&lt;/blockquote&gt;

From an old &lt;a href="http://www.joelonsoftware.com/articles/fog0000000250.html"&gt;Joel on Software&lt;/a&gt; chronique.</description><link>http://people.no-distance.net/ol/olog/2006/08/quote-of-day.html</link><author>O</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-10970006.post-115589832863179537</guid><pubDate>Fri, 18 Aug 2006 10:51:00 +0000</pubDate><atom:updated>2006-08-18T13:00:12.956+02:00</atom:updated><title>S3 Browser 0.3</title><description>I &lt;a href="http://people.no-distance.net/ol/software/s3/"&gt;released&lt;/a&gt; today v0.3 of S3 Browser (binary and source). It has some minor usability fixes (added drag-n-drop support in the objects view, double-click actions, and other small fixes). But the most important feature is that file upload and download no longer use local memory, the data is just streamed between S3 and the filesystem.
&lt;p&gt;
Implementing it for file download was a piece of cake, as &lt;a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSURLDownload_Class/Reference/Reference.html"&gt;NSURLDownload&lt;/a&gt; actually does almost everything for free. You just have to give the destination for the downloaded file - et voilà.
&lt;p&gt;
File upload was another story: when using &lt;a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSMutableURLRequest_Class/index.html"&gt;NSMutableURLRequest&lt;/a&gt; to prepare a connection you can use &lt;a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSMutableURLRequest_Class/Reference/Reference.html#//apple_ref/occ/instm/NSMutableURLRequest/setHTTPBodyStream:"&gt;setHTTPBodyStream&lt;/a&gt; instead of &lt;a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSMutableURLRequest_Class/Reference/Reference.html#//apple_ref/occ/instm/NSMutableURLRequest/setHTTPBody:"&gt;setHTTPBody&lt;/a&gt; to send the payload.
&lt;br&gt;
&lt;i&gt;But&lt;/i&gt;... using a stream means that you usually don't know the content length upfront, so Foundation will send the message as &lt;a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.6.1"&gt;chunked&lt;/a&gt;, without a &lt;a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.13"&gt;Content-Length&lt;/a&gt; header (they are mutually exclusive).
&lt;p&gt;
And S3 &lt;a href="http://developer.amazonwebservices.com/connect/thread.jspa?messageID=36133"&gt;does not support&lt;/a&gt; file upload using chunked-encoding (something I can understand). The conclusion is that you can't use a stream-based API at NSURLRequest-level to send your data if you don't want chunked transfers. That makes sense: you would need a new API, something like &lt;tt&gt;setHTTPBodyStream:forLength&lt;/tt&gt; to precise what you're going to send. 
&lt;p&gt;
So I ended implementing my own naive HTTP PUT client on top of NSInputStream/NSOutputStream and &lt;a href="http://developer.apple.com/documentation/CoreFoundation/Reference/CFMessageRef/Reference/reference.html"&gt;CFHTTPMessage&lt;/a&gt;, which works fine but does not get all the 'free' functionality  available in the Foundation URL Loading system. For instance, if a web proxy is configured in system preferences, I fallback to my previous in-memory / NSURLRequest implementation.
&lt;p&gt;
The plan for the next version ? improving bucket content management, first to be able to deal with very large buckets, and also to see what can be implemented to take advantage of the new "hierarchical listing of keys" feature.</description><link>http://people.no-distance.net/ol/olog/2006/08/s3-browser-03.html</link><author>O</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-10970006.post-115498822888946945</guid><pubDate>Mon, 07 Aug 2006 22:01:00 +0000</pubDate><atom:updated>2006-08-08T00:05:29.390+02:00</atom:updated><title>Ruby on Rails and Leopard (Server)</title><description>Just saw that on OS X Leopard Server &lt;a href="http://www.apple.com/server/macosx/leopard/more.html"&gt;Sneak Peek&lt;/a&gt;:

&lt;blockquote&gt;Internet and Web
&lt;p&gt;
Leopard Server also features administration for either Apache 2.2 or 1.3, MySQL 5 with Apache/MySQL/PHP integration, JBoss 4, and Tomcat 5 for hosting EJB 3.0 and J2EE 1.4-compliant enterprise applications, &lt;b&gt;and Ruby on Rails with Mongrel for simplified development and deployment of web-based applications.&lt;/b&gt;&lt;/blockquote&gt;
&lt;p&gt;
Insanely cool.</description><link>http://people.no-distance.net/ol/olog/2006/08/ruby-on-rails-and-leopard-server.html</link><author>O</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-10970006.post-115428241672544703</guid><pubDate>Sun, 30 Jul 2006 17:35:00 +0000</pubDate><atom:updated>2006-07-30T20:15:02.263+02:00</atom:updated><title>Migrating S3-Objc to Google Code Hosting (sort of)</title><description>I created a &lt;a href="http://code.google.com/p/objc-s3/"&gt;project&lt;/a&gt; on Google Code Hosting to eventually migrate all of my &lt;a href="http://people.no-distance.net/ol/software/s3/"&gt;OS X / S3&lt;/a&gt; code there. Well, that was the excuse. What I really wanted was to test their code hosting service.
&lt;p&gt;
The administration interface is straightforward, and gives an good impression of avoiding limitations (unlimited links/groups/blogs) while remaining clean and consistent. The issue tracker is ok. I'm not 100% fan of the let's-edit-predefined-values-in-a-textfield-with-a-basic-syntax. It's working for simple fields (open/close issues status values) but is a bit awkward in the predefined issue labels section than can be restricted in arity based on the label prefix (confusing ? told you so).
&lt;p&gt;
Using the issue tracker itself is ok, with some strange GUI decisions (it's not 100% obvious that  just to change status or labels you must use the "add comment" section). The "typed", comma-separated labels (for instance &lt;i&gt;Type-Enhancement&lt;/i&gt;, &lt;i&gt;Priority-Medium&lt;/i&gt;, &lt;i&gt;Priority-High&lt;/i&gt;) are not optimal for readability. 
&lt;p&gt;
Even if it's a tiny project with a very small number of revision, I think it's not acceptable to loose revision history. So the source code is not yet imported, and will be only when Google implements svn dump import. It's also extremely negative that "&lt;i&gt;At this time, there aren't any import or export features. But look for them as the service matures.&lt;/i&gt;". This is locking, period.
&lt;p&gt;
I sincerely hope this is just a start, because it feels really primitive. I understand the big plus is the huge scalability that Google is able to offer, but from a project "management" point of view, Google Code Hosting is missing almost all of the common tools really useful in other tools: Wiki, Web/SVN browser, RSS timelines, commit/ticket integration (a la trac), file releases, ...</description><link>http://people.no-distance.net/ol/olog/2006/07/migrating-s3-objc-to-google-code.html</link><author>O</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-10970006.post-115079027404886560</guid><pubDate>Tue, 20 Jun 2006 07:37:00 +0000</pubDate><atom:updated>2006-06-20T10:20:15.280+02:00</atom:updated><title>Technical and democratic processes</title><description>&lt;blockquote&gt;A democratic process such as the OMG's is uniquely ill-suited for creating good software.&lt;/blockquote&gt;&lt;p style="text-align:right;"&gt;Michi Henning&lt;/p&gt;
.. in &lt;a href="http://www.acmqueue.com/modules.php?name=Content&amp;pa=showpage&amp;pid=396"&gt;a very interesting view&lt;/a&gt; about why CORBA failed. And you cannot blame Michi Henning for not knowing his subject.
&lt;p&gt;The article covers both the technical issues (opaque references, security, versioning, complexity), the market context (Microsoft moves, effect of the bubble) and the huge procedural issues - probably the most important point in the story: most of the technical issues could have been avoided with a different decision flow in the OMG.
&lt;br&gt;
However, there is one point which is missing in the picture, imho, it is that the OMG never really acknowledged the problems and tried to fix these. 
Some were there for good, but others could have probably been solved. One example I have in mind in the over-complex C++ mapping (designed before C++ standardization was finished): why not adding a cleaner, simpler modern C++ mapping ? This raises the question of presenting clear roadmaps for standards, which has not been something stellar at the OMG. CORBA 3 was discussed for years - without presenting a clear picture of which problems it was supposed to tackle. And at the same time, as Michi remarks, the elephant in the room was this bunch of crappy, unimplemented (and often not implementable) specifications for additional services. The OMG never tagged a bogus spec as obsolete (they only obsoleted two things: OpenDoc for obvious market reasons, and XCMF, superseded by the component model).
&lt;p&gt;
All of this from the point of view of an outsider. I've never been an OMG member (just a CILab member at some point - oh, the irony), I just did a bit of CORBA development, and taught it for several years.</description><link>http://people.no-distance.net/ol/olog/2006/06/technical-and-democratic-processes.html</link><author>O</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-10970006.post-114945264609823308</guid><pubDate>Sun, 04 Jun 2006 20:18:00 +0000</pubDate><atom:updated>2006-06-19T12:12:05.203+02:00</atom:updated><title>S3 Browser 0.2, now with source code.</title><description>&lt;img class="imgdroite" src="http://people.no-distance.net/ol/software/s3/s3.png"&gt;Ok, sorry for the big delay. Here is a &lt;a href="http://people.no-distance.net/ol/software/s3/"&gt;new release&lt;/a&gt; (with source) for my S3 Browser application. This version is quite close to the previous v0.1, with some clean-up, Keychain support (it was bugging me from day one), UI enhancements (removed action buttons and added toolbars). Multiple selection now works in objects window, and downloading a file now use a default file name that makes sense. &lt;p&gt;
The code is under a BSD license. if you use this code, I'd love to know about it. Thanks!</description><link>http://people.no-distance.net/ol/olog/2006/06/s3-browser-02-now-with-source-code.html</link><author>O</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-10970006.post-114901328694152016</guid><pubDate>Tue, 30 May 2006 18:13:00 +0000</pubDate><atom:updated>2006-05-30T21:02:01.743+02:00</atom:updated><title>Ruby on Rails, an introduction...</title><description>... in french. This is based on a Ruby on Rails presentation I gave a few months ago, and that I planned to release with a Creative Commons license. I just wanted to fix a few things, and I ended rewriting the whole stuff. So if you're interested in RoR -and- french speaking, &lt;a href="http://people.no-distance.net/ol/documents/rails-intro/"&gt;enjoy&lt;/a&gt;. Feedback is welcome. I might translate it in english if the feedback from the french geeks is positive.
&lt;p&gt;
And sorry for the lack of updates, especially for the S3 Browser application and source code. A lot of personal issues in the last weeks took most of my time and my hacking time was close to zero. Things are getting better, so I'm slowly catching up (sorry for all the unanswered emails - and comments). For S3 Browser, I'm going to prepare a source code drop before the end of the week, along with my current unreleased version (minor tweaks). I hope to be able to quickly add the features I was working on (URL generation, streaming upload/downloads, ...) after that, but my priority is first to have a source code release. Sorry again for the delay.</description><link>http://people.no-distance.net/ol/olog/2006/05/ruby-on-rails-introduction.html</link><author>O</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-10970006.post-114549034297131507</guid><pubDate>Wed, 19 Apr 2006 23:44:00 +0000</pubDate><atom:updated>2006-04-23T00:07:56.173+02:00</atom:updated><title>Wifi + Mobile + HD + DTTV + ADSL + S/PDIF + Wimax + ...</title><description>Something really interesting happened today in the french telco industry.  &lt;a href="http://www.iliad.fr/"&gt;Free&lt;/a&gt; did it again. 
&lt;p&gt;
Free is a broadband operator in France, and in the past, they did some very bold moves and really changed the broadband landscape. Basically they were among the first to leverage the unbundling of the local loop, and they positioned themselves as the first 'alternative' broadband operator. They started as a 'standard' ISP (POTS / ISDN) but in 2003, they launched the first "Triple play" offer. A custom hardware (the 'Freebox') that provided ADSL access, along with TV and telephone. What's interesting there is that they pushed the envelope both on the feature set, and the price: for 29.99 euros (about $35), you had full ADSL bandwidth (not capped at 512k or 1 Mbits), 'free' phone calls in France (not including mobiles) and TV channels.
&lt;p&gt;
In october 2004, they released a new Freebox and upgraded their DSLAM to ADSL2+. For the same 29.99 euro per month, you now had 20 Mbps (maximum bandwidth - basically you have what your line length allows). They added some features in 2005: a vlc-based software to stream mpeg to your TV or to watch TV on the computer, free calls to many international destinations (USA, Germany, Singapore, ...)
&lt;p&gt;
There is some &lt;a href="http://www.iliad.fr/en/"&gt;background information&lt;/a&gt; in english on their site (esp. the slide shows and press releases). 
&lt;p&gt;
But now, they're releasing another new box, the Freebox HD. And things are getting &lt;b&gt;really&lt;/b&gt; interesting:
&lt;ul&gt;
&lt;li&gt; Same 29.99 euros/month fee
&lt;li&gt; Same ADSL 2+
&lt;li&gt;Wireless router, apparently 802.11n based, with Wifi Mimo, 
&lt;li&gt;1 USB port
&lt;li&gt;5 ethernet ports
&lt;/ul&gt;
On a second box, connected to the first through ethernet or wifi:
&lt;ul&gt;
&lt;li&gt;SD / HD video decoder
&lt;li&gt;DTTV receiver
&lt;li&gt;S-Video, composite, HDMI, S/PDIF (optical+coax) connectors
&lt;li&gt;IR receiver with remote control
&lt;li&gt;According to some reports, there's a 40 Gb hard drive. Which could enable interesting uses in the future: PVR, HD VoD temporary storage, ...
&lt;/ul&gt;
&lt;p&gt;
The icing on the cake ? The box can act as a mobile phone access point. If you have a dual wifi-GSM mobile phone, and if you activate your Free mobile phone account for 9.99 e (one-time fee), you will transparently use the Freebox... and if you're in the street with your wifi-gsm mobile and if there's a Freebox HD around, it will use it to place your call. Basically, they want to create an urban mesh of Freebox HD and be a disruptive mobile operator. They also plan to offer a wifi-gsm phone in september for about 200 euros ($245).
&lt;p&gt;
Oh. And Free is a WiMax operator.
&lt;p&gt;
The &lt;a href="http://www.iliad.fr/en/presse/2006/CP_190406_Eng.pdf"&gt;press release&lt;/a&gt; is now available in english.
&lt;p&gt;
&lt;img class="imggauche" src="http://people.no-distance.net/ol/olog/media/06/freebox-hd.png" /&gt;</description><link>http://people.no-distance.net/ol/olog/2006/04/wifi-mobile-hd-dttv-adsl-spdif-wimax.html</link><author>O</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-10970006.post-114454869708281026</guid><pubDate>Sun, 09 Apr 2006 01:52:00 +0000</pubDate><atom:updated>2006-09-07T13:16:37.803+02:00</atom:updated><title>Mac OS X S3 Browser</title><description>&lt;img class="imggauche" src="http://people.no-distance.net/ol/software/s3/s3.png"&gt;Ok, so I have something sort of working for my &lt;a href="http://people.no-distance.net/ol/software/s3/"&gt;Objective-C / Amazon S3&lt;/a&gt; quick hack. 
&lt;p&gt;
I slightly revised my goals: instead of just wrapping the S3 REST API, I'm writing at the same time a small application to test my code - a minimal S3 GUI browser. I will then extract the objective-C S3 wrapper framework from this example, which I'll try to keep as simple and straightforward as possible (it's heavily &lt;a href="http://developer.apple.com/documentation/Cocoa/Conceptual/CocoaBindings/CocoaBindings.html"&gt;bindings-based&lt;/a&gt;, there's no much code). S3 is cool, but my main objective was to have an idea of what it takes to wrap a REST API to build a desktop app on top of it. But if it could be useful to others as a basic S3 OS X sample code, it would be great.
&lt;p&gt;
What is more or less working right now: list, create and delete buckets, non-blocking, asynchronous operations, bucket content list (no multiple requests for large buckets yet), basic upload and download, and a small operation console and inspector. Check the &lt;a href="http://people.no-distance.net/ol/software/s3/s3-screenshot.png"&gt;screenshot&lt;/a&gt;. 
&lt;p&gt;
Even if many features are missing (multi-requests, correct canonicalization, correctly tracking bucket content windows, transient URLs generation, etc), any feedback would be great (including 'it works on my Intel Mac' and 'it works with my account').  
&lt;p&gt;
&lt;i&gt;Update&lt;/i&gt;: this small experiment actually became a real application, check it out is &lt;a href="http://people.no-distance.net/ol/software/s3/"&gt;here&lt;/a&gt;.</description><link>http://people.no-distance.net/ol/olog/2006/04/mac-os-x-s3-browser.html</link><author>O</author></item></channel></rss>