<?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/' xmlns:georss='http://www.georss.org/georss' version='2.0'><channel><atom:id>tag:blogger.com,1999:blog-10970006</atom:id><lastBuildDate>Wed, 17 Mar 2010 00:41:46 +0000</lastBuildDate><title>o(ther)l/log</title><description></description><link>http://people.no-distance.net/ol/olog/</link><managingEditor>noreply@blogger.com (O)</managingEditor><generator>Blogger</generator><openSearch:totalResults>67</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-10970006.post-952570975313156028</guid><pubDate>Wed, 17 Feb 2010 15:30:00 +0000</pubDate><atom:updated>2010-02-17T16:42:25.800+01:00</atom:updated><title>Graph/chart linkfest</title><description>Some notes about graph and charting software after an online conversation, for future references

Graph/Charting software:  
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://graphite.wikidot.com/"&gt;Graphite&lt;/a&gt; - a scalable real-time graphing system,
&lt;li&gt;&lt;a href="http://www.liquidx.net/plotkit/"&gt;PlotKit&lt;/a&gt; - Javascript Chart Plotting, 
&lt;li&gt;&lt;a href="http://bluff.jcoglan.com/"&gt;Bluff&lt;/a&gt; - a Gruff port in Javascript,
&lt;li&gt;&lt;a href="http://code.google.com/p/flot/"&gt;Flot&lt;/a&gt; - jQuery based,
&lt;li&gt;&lt;a href="http://moochart.coneri.se/"&gt;MooChart&lt;/a&gt; - Mootools based,
&lt;li&gt;&lt;a href="http://raphaeljs.com/"&gt;RaphaelJS&lt;/a&gt; - Javascript SVG/VML based,
&lt;li&gt;&lt;a href="http://xaviershay.github.com/tufte-graph/"&gt;TufteGraph&lt;/a&gt; - Tufte-inspired and JQuery-based,
&lt;li&gt;&lt;a href="http://www.idolhands.com/ruby-on-rails/gems-plugins-and-engines/graphing-for-ruby-on-rails-with-seer"&gt;Seer&lt;/a&gt; - a Ruby wrapper for Google Visualization API
&lt;/ul&gt;

Books about information representation and design: 
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://oreilly.com/catalog/9780596100162"&gt; Information Dashboard Design
 &lt;/a&gt; and &lt;a href="http://www.analyticspress.com/nysi.html"&gt;Now You See It&lt;/a&gt; by Stephen Few,
&lt;li&gt; the Tufte books: &lt;a href="http://www.edwardtufte.com/tufte/books_vdqi"&gt; The Visual Display of Quantitative Information&lt;/a&gt;, &lt;a href="http://www.edwardtufte.com/tufte/books_ei"&gt; Envisioning Information&lt;/a&gt;, &lt;a href="http://www.edwardtufte.com/tufte/books_visex"&gt; Visual Explanations: Images and Quantities, Evidence and Narrative&lt;/a&gt;, &lt;a href="http://www.edwardtufte.com/tufte/books_be"&gt; Beautiful Evidence&lt;/a&gt;
&lt;/ul&gt;

Server monitoring/graphing services with UI much better than what is often found in this field:
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.scoutapp.com/"&gt;Scout&lt;/a&gt;
&lt;li&gt;&lt;a href="http://www.serverdensity.com/"&gt;Server Density&lt;/a&gt;
&lt;li&gt;&lt;a href="http://lithium5.com/"&gt;Lithium&lt;/a&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10970006-952570975313156028?l=people.no-distance.net%2Fol%2Folog%2Findex.html' alt='' /&gt;&lt;/div&gt;</description><link>http://people.no-distance.net/ol/olog/2010/02/graphchart-linkfest.html</link><author>noreply@blogger.com (O)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-10970006.post-7053169843998620069</guid><pubDate>Tue, 05 Jan 2010 22:40:00 +0000</pubDate><atom:updated>2010-01-06T02:36:31.481+01:00</atom:updated><title>Leaving Fotopedia</title><description>A few months ago I decided to leave Fotonauts, and New Year’s Eve was my last day (nice symbolic date, uh ?).
&lt;p&gt;
Why leaving ? I co-founded the company, and have been in this project for almost four years, and I’m really proud of what we built. We shipped, the encyclopedia is growing, the base is here, we’re improving the web app. And thus it’s a good time to go and explore something new. The decision to leave was a tough one, but I will definitively keep in close touch with the Fotonauts team, building the fotopedia has been an exhilarating experience.
&lt;p&gt;
Time for a quick look back.
&lt;p&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://people.no-distance.net/ol/olog/uploaded_images/ical-758075.png"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 128px; height: 128px;" src="http://people.no-distance.net/ol/olog/uploaded_images/ical-758073.png" border="0" alt="" /&gt;&lt;/a&gt;I had a wonderful opportunity in mid-2001 to join Apple, after my Ph.D. &lt;a href="http://www.fotopedia.com/users/jmhullot"&gt;Jean-Marie Hullot&lt;/a&gt; was founding the Apple Paris R&amp;D office and we immediately started working on iCal (&lt;a href="http://www.fotopedia.com/users/bertrand"&gt;Bertrand&lt;/a&gt;, &lt;a href="http://www.fotopedia.com/users/goo"&gt;Sébastien&lt;/a&gt; &amp; me on the engineering side, &lt;a href="http://www.colom.org/"&gt;Manu&lt;/a&gt; on HI).  The project was a wild ride: 10 months between the first line of code and the unveiling in MacWorld NYC. The team grew, we continued for a while on calendar and sync products, then on new projects. 
&lt;p&gt;
In early 2006, some of us left Apple: Jean-Marie, Bertand, Seb, Manu and me - the usual suspects. We started drafting our ideas for a new generation photo application and web site. We had this feeling there was a missing piece in the photo landscape: iPhoto and Picasa are great client applications, and Flickr, Smugmug and others are really impressive on the web side. But Wikipedia was growing. Geolocation and collaborative tools were emerging. There was a whole new area to explore.
&lt;p&gt;
So we founded Fotonauts to give it a shot.
&lt;p&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://people.no-distance.net/ol/olog/uploaded_images/fotopedia-722130.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 128px; height: 128px;" src="http://people.no-distance.net/ol/olog/uploaded_images/fotopedia-722128.png" border="0" alt="" /&gt;&lt;/a&gt;  We started implementing our ideas: a multi-platform client app able to play well with the existing social tools and the rich metadata corpus already available, with a full-featured server backend &amp; web app. What if, instead of just tagging a photo with user-entered words, we took advantage of Wikipedia, Maps and other content sources to automatically build rich content albums? And then automatically build a photo encyclopedia from it.
&lt;p&gt;
We spent some time prototyping this. Seb architectured the UI and wrote a high-level cross-platform toolkit, Bertrand coordinated everything, coded the core dynamic layer and a CoreData-like datastore, and I wrote the main networking classes and client Web API and some of the core classes, as well as the early web application and infrastructure code. After a few months work, with a convincing prototype in hand, we raised seed money and &lt;a href="http://www.techcrunch.com/2008/09/10/tc50-fotonauts-is-a-georgeous-photopedia/"&gt;announced&lt;/a&gt; the project three months later at TC50. &lt;a href="http://www.fotopedia.com/users/fred"&gt;Fred&lt;/a&gt;, &lt;a href="http://www.fotopedia.com/users/aymerick"&gt;Aymerick&lt;/a&gt;, &lt;a href="http://www.fotopedia.com/users/jet"&gt;Jérôme&lt;/a&gt; and then &lt;a href="http://www.fotopedia.com/users/kali"&gt;Kali&lt;/a&gt; joined the team. Fred took over the client network part (and wrote a full synchronization layer, with offline support and so on - woah). I switched full-time on the server side, now with Aymerick &amp; Kali helping.
&lt;p&gt;
In a way, our timeframe was perfect: we had the opportunity to take advantage of the cloud computing changes as we were developing the app: S3 was already here when we started, and we quickly switched our server infrastructure to EC2, then NoSQL came to fruition just when we had very specific storage needs. Chef arrived just at the right moment to finish automating everything. Hadoop helped us for wikipedia content processing (yay for Kali), and we implemented our own agent framework for asynchronous processing (yay for Aymerick). It has been a joy to lead the server software effort (and I still wonder how I found the time to write an &lt;a href="http://izibook.eyrolles.com/store/show/9782212850154"&gt;ebook&lt;/a&gt; on REST - I hear &lt;a href="http://blog.verte-adelie.com/"&gt;V.&lt;/a&gt; saying “by giving up sleep”).
&lt;p&gt;
The Fotopedia infrastructure is an impressive &lt;a href="http://aws.typepad.com/aws/2009/12/fotopedia-and-aws.html"&gt;beast&lt;/a&gt;, mostly driven by the level of features and the many, many details required to implement Jean-Marie's vision. It has been a wonderful opportunity for me to lead the effort on a modern server-side platform, especially  within a top-level technical team. 
&lt;p&gt;
What’s next ? I will be taking some time before exploring anything new. The last years have been frantic. But there are a lot of fun projects around. Tablets. Clouds. Automation. Big Data. Phones. Hybrid apps. New web frameworks. NoSQL. Woah. Isn’t it a good time to try new things? Must ... just... take... a... vacation... before...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10970006-7053169843998620069?l=people.no-distance.net%2Fol%2Folog%2Findex.html' alt='' /&gt;&lt;/div&gt;</description><link>http://people.no-distance.net/ol/olog/2010/01/leaving-fotopedia.html</link><author>noreply@blogger.com (O)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>7</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-10970006.post-4657412181323332159</guid><pubDate>Sun, 04 Oct 2009 23:50:00 +0000</pubDate><atom:updated>2009-10-05T16:42:53.198+02:00</atom:updated><title>MacRuby</title><description>I gave a presentation this week-end about MacRuby at OSDC.fr 2009. The presentation (and slides) was in french, but I did a quick translation of the slides today.&lt;div style="width:425px;text-align:left" id="__ss_2123540"&gt;&lt;a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" href="http://www.slideshare.net/olg/macruby-an-introduction" title="MacRuby, an introduction"&gt;MacRuby, an introduction&lt;/a&gt;&lt;object style="margin:0px" width="425" height="355"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=osdcmacrubyen-091004184309-phpapp02&amp;stripped_title=macruby-an-introduction" /&gt;&lt;param name="allowFullScreen" value="true"/&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=osdcmacrubyen-091004184309-phpapp02&amp;stripped_title=macruby-an-introduction" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;"&gt;View more &lt;a style="text-decoration:underline;" href="http://www.slideshare.net/"&gt;presentations&lt;/a&gt; from &lt;a style="text-decoration:underline;" href="http://www.slideshare.net/olg"&gt;Olivier Gutknecht&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;

French version &lt;a href="http://people.no-distance.net/ol/log/2009/10/une-presentation-sur-macruby.html"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10970006-4657412181323332159?l=people.no-distance.net%2Fol%2Folog%2Findex.html' alt='' /&gt;&lt;/div&gt;</description><link>http://people.no-distance.net/ol/olog/2009/10/macruby.html</link><author>noreply@blogger.com (O)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-10970006.post-7630114908189275138</guid><pubDate>Wed, 10 Sep 2008 17:24:00 +0000</pubDate><atom:updated>2008-09-10T19:26:09.795+02:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>fotonauts</category><title>Fotonauts is now public !</title><description>Woohoo. More than two years of (hard) work and we announced Fotonauts today at TechCrunch 50. Still in private beta phase for now, but you can register for an invitation on &lt;a href="http://www.fotonauts.com"&gt;www.fotonauts.com&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10970006-7630114908189275138?l=people.no-distance.net%2Fol%2Folog%2Findex.html' alt='' /&gt;&lt;/div&gt;</description><link>http://people.no-distance.net/ol/olog/2008/09/fotonauts-is-now-public.html</link><author>noreply@blogger.com (O)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></item><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;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10970006-5504251852286797572?l=people.no-distance.net%2Fol%2Folog%2Findex.html' alt='' /&gt;&lt;/div&gt;</description><link>http://people.no-distance.net/ol/olog/2008/02/cat.html</link><author>noreply@blogger.com (O)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></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;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10970006-1395890297045196305?l=people.no-distance.net%2Fol%2Folog%2Findex.html' alt='' /&gt;&lt;/div&gt;</description><link>http://people.no-distance.net/ol/olog/2007/01/s3-browser-106.html</link><author>noreply@blogger.com (O)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></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;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10970006-116845268550513531?l=people.no-distance.net%2Fol%2Folog%2Findex.html' alt='' /&gt;&lt;/div&gt;</description><link>http://people.no-distance.net/ol/olog/2007/01/famous-last-words.html</link><author>noreply@blogger.com (O)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></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.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10970006-116758167115964775?l=people.no-distance.net%2Fol%2Folog%2Findex.html' alt='' /&gt;&lt;/div&gt;</description><link>http://people.no-distance.net/ol/olog/2006/12/s3-browser-source-repository-and-auto.html</link><author>noreply@blogger.com (O)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></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 !&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10970006-116637212679850082?l=people.no-distance.net%2Fol%2Folog%2Findex.html' alt='' /&gt;&lt;/div&gt;</description><link>http://people.no-distance.net/ol/olog/2006/12/obj-c-runtime-fun-redux.html</link><author>noreply@blogger.com (O)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></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;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10970006-116094554626929219?l=people.no-distance.net%2Fol%2Folog%2Findex.html' alt='' /&gt;&lt;/div&gt;</description><link>http://people.no-distance.net/ol/olog/2006/10/debian-mozilla-firefox-controversy.html</link><author>noreply@blogger.com (O)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></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;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10970006-116003551038946625?l=people.no-distance.net%2Fol%2Folog%2Findex.html' alt='' /&gt;&lt;/div&gt;</description><link>http://people.no-distance.net/ol/olog/2006/10/funny-thing-about-google-codesearch.html</link><author>noreply@blogger.com (O)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></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).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10970006-115938786198464710?l=people.no-distance.net%2Fol%2Folog%2Findex.html' alt='' /&gt;&lt;/div&gt;</description><link>http://people.no-distance.net/ol/olog/2006/09/google-code-svn-history-import.html</link><author>noreply@blogger.com (O)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></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.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10970006-115926883798778954?l=people.no-distance.net%2Fol%2Folog%2Findex.html' alt='' /&gt;&lt;/div&gt;</description><link>http://people.no-distance.net/ol/olog/2006/09/kvo-kvc.html</link><author>noreply@blogger.com (O)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></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.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10970006-115763336704307285?l=people.no-distance.net%2Fol%2Folog%2Findex.html' alt='' /&gt;&lt;/div&gt;</description><link>http://people.no-distance.net/ol/olog/2006/09/bigtable-or-infrastructure-paradise.html</link><author>noreply@blogger.com (O)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></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.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10970006-115737231291174190?l=people.no-distance.net%2Fol%2Folog%2Findex.html' alt='' /&gt;&lt;/div&gt;</description><link>http://people.no-distance.net/ol/olog/2006/09/s3-browser-hits-10.html</link><author>noreply@blogger.com (O)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></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;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10970006-115698686793906054?l=people.no-distance.net%2Fol%2Folog%2Findex.html' alt='' /&gt;&lt;/div&gt;</description><link>http://people.no-distance.net/ol/olog/2006/08/ec2-soap-xmlsig-wsse-x509-frustration.html</link><author>noreply@blogger.com (O)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></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.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10970006-115697261232906467?l=people.no-distance.net%2Fol%2Folog%2Findex.html' alt='' /&gt;&lt;/div&gt;</description><link>http://people.no-distance.net/ol/olog/2006/08/native-unicode-support-in-programming.html</link><author>noreply@blogger.com (O)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></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;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10970006-115679170777291023?l=people.no-distance.net%2Fol%2Folog%2Findex.html' alt='' /&gt;&lt;/div&gt;</description><link>http://people.no-distance.net/ol/olog/2006/08/useless-screenshot.html</link><author>noreply@blogger.com (O)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></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;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10970006-115667857832699421?l=people.no-distance.net%2Fol%2Folog%2Findex.html' alt='' /&gt;&lt;/div&gt;</description><link>http://people.no-distance.net/ol/olog/2006/08/stats-galore.html</link><author>noreply@blogger.com (O)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>4</thr:total></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.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10970006-115642919512035039?l=people.no-distance.net%2Fol%2Folog%2Findex.html' alt='' /&gt;&lt;/div&gt;</description><link>http://people.no-distance.net/ol/olog/2006/08/playing-with-amazon-ec2.html</link><author>noreply@blogger.com (O)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></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.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10970006-115606669240056970?l=people.no-distance.net%2Fol%2Folog%2Findex.html' alt='' /&gt;&lt;/div&gt;</description><link>http://people.no-distance.net/ol/olog/2006/08/quote-of-day.html</link><author>noreply@blogger.com (O)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></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.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10970006-115589832863179537?l=people.no-distance.net%2Fol%2Folog%2Findex.html' alt='' /&gt;&lt;/div&gt;</description><link>http://people.no-distance.net/ol/olog/2006/08/s3-browser-03.html</link><author>noreply@blogger.com (O)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></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.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10970006-115498822888946945?l=people.no-distance.net%2Fol%2Folog%2Findex.html' alt='' /&gt;&lt;/div&gt;</description><link>http://people.no-distance.net/ol/olog/2006/08/ruby-on-rails-and-leopard-server.html</link><author>noreply@blogger.com (O)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></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, ...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10970006-115428241672544703?l=people.no-distance.net%2Fol%2Folog%2Findex.html' alt='' /&gt;&lt;/div&gt;</description><link>http://people.no-distance.net/ol/olog/2006/07/migrating-s3-objc-to-google-code.html</link><author>noreply@blogger.com (O)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></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.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10970006-115079027404886560?l=people.no-distance.net%2Fol%2Folog%2Findex.html' alt='' /&gt;&lt;/div&gt;</description><link>http://people.no-distance.net/ol/olog/2006/06/technical-and-democratic-processes.html</link><author>noreply@blogger.com (O)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item></channel></rss>