<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Emil Sit: Thoughts on Systems</title>
	
	<link>http://www.emilsit.net/blog</link>
	<description />
	<lastBuildDate>Mon, 12 Oct 2009 18:52:34 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/EmilSitMainBlog" /><feedburner:info uri="emilsitmainblog" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>StackOverflow DevDays Boston 2009, Afternoon</title>
		<link>http://feedproxy.google.com/~r/EmilSitMainBlog/~3/m3V54piYH-8/</link>
		<comments>http://www.emilsit.net/blog/archives/stackoverflow-devdays-boston-2009-afternoon/#comments</comments>
		<pubDate>Mon, 12 Oct 2009 12:21:55 +0000</pubDate>
		<dc:creator>Emil Sit</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[conferences]]></category>
		<category><![CDATA[devdays]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[John Resig]]></category>
		<category><![CDATA[Miguel De Icaza]]></category>
		<category><![CDATA[mono]]></category>
		<category><![CDATA[stackoverflow]]></category>

		<guid isPermaLink="false">http://www.emilsit.net/blog/?p=245</guid>
		<description><![CDATA[The afternoon of Boston DevDays 2009 was, in my opinion, not as broadly appealing as the morning sessions (see my writeup of the morning here).  However, there was still a lot of interesting material presented.

Joel welcomed us back from lunch by plugging
StackExchange and how it&#8217;ll mean the end of &#8220;crappy
old copies of Usenet&#8221; (by [...]]]></description>
			<content:encoded><![CDATA[<p>The afternoon of <a href="http://stackoverflow.carsonified.com/events/boston">Boston DevDays</a> 2009 was, in my opinion, not as broadly appealing as the morning sessions (see my writeup of the morning <a href="http://www.emilsit.net/blog/archives/stackoverflow-devdays-boston-2009-morning/">here</a>).  However, there was still a lot of interesting material presented.</p>

<p>Joel welcomed us back from lunch by plugging
<a href="http://stackexchange.com">StackExchange</a> and how it&#8217;ll mean the end of &#8220;crappy
old copies of Usenet&#8221; (by which he meant phpBB).  He showed a pretty graph of
StackOverflow edging out ExpertsExchange in traffic. He also announced a new job search
site called <a href="http://careers.stackoverflow.com/">careers.stackoverflow.com</a> that
charges job seekers some money and asks you what your favorite editor is.
There was also a video ad for the FogCreek training videos.  This man knows how
to monetize.</p>

<h3>Patrick Hynds and Chris Bowen</h3>

<p>The first technical session of the afternoon was on <a href="http://asp.net/mvc/">ASP.NET
MVC</a>.  Patrick started the session with an expanation of ASP.NET MVC&#8217;s history relative to ASP
Classic and ASP.NET, and why one might want to use a
<a href="http://en.wikipedia.org/wiki/Model–view–controller)">model-view-controller (MVC)</a> architecture for a website: for example, much finer control over generated HTML compared to traditional ASP, test-driven development,  and better URLs for SEO.</p>

<p>The rest of the talk was a demo of creating a hello world MVC
application in Visual Studio.  The presenters walked through
updating models and view and controllers, setting up some basic
routing.  It seems that ASP.NET MVC is a fine re-implementation of
Ruby on Rails or Django for the Microsoft world.  One concrete
tip I learned was that in Visual Studio, Control-. will offer you some
completions or other shortcuts.</p>

<p>Reception to this talk was somewhat mixed, at least as far as I
can tell from the blogs and Tweets about it. The talk itself could have been
improved, of course; for example it
would have helped for Patrick to have explained what MVC
stood for (with a few architecture diagrams) before plugging its
advantages for ten minutes.  My take is that if
you knew nothing about MVC, it was a straightforward talk that
gave an introduction to the concepts and the implementation in
.NET.  If you were already familiar with MVC, I think you
would have thought it pretty content-free as there wasn&#8217;t a tremendous
amount of focus on the ASP.NET side of things. </p>

<h3>John Resig</h3>

<p><a href="http://ejohn.org/">John Resig</a>, the creator and lead developer
of <a href="http://jquery.org">jQuery</a>, a very popular JavaScript library,
next took the stage to talk about JavaScript testing.</p>

<p>&#8220;Developing for JavaScript is a lot like whack-a-mole,&#8221; John
reported.  The large space of operating systems, browsers,
browser versions, JavaScript engines, and browser plugins mean
that typically if you fix one thing you&#8217;re more than likely
to break something else.  And so, in some informal studies,
John found that people just don&#8217;t test.  This is something
John would like to change.</p>

<p>A unit test suite for JavaScript apparently isn&#8217;t that hard to
write.  John threw up a bunch of increasingly feature-rich test
harnesses&#8212;with asserts, grouping by role, and a test runner
web-page&#8212;using a few dozen lines of JavaScript.  The hardest
part of writing a test suite is likely to be adding support for
asynchronous events (e.g. XMLHttpRequests).  Fortunately, there
are several pre-built suites such as
<a href="http://docs.jquery.com/QUnit">QUnit</a>,
<a href="http://www.jsunit.net">JSUnit</a>, <a href="http://developer.yahoo.com/yui/yuitest/">YUI
Test</a>, and
<a href="http://seleniumhq.com/">Selenium</a>.  John spent a bit of time
talking about the differences between these frameworks, and
particularly plugged QUnit and YUITest.</p>

<p>Selenium is of particular interest since, unlike the others,
it is not just a unit test framework.  It also has plugins
to allow recording and scripting events to a browser, so you
can do whole site testing.  It even comes with <a href="http://selenium-grid.seleniumhq.org/">Selenium
Grid</a> which will let
you distribute and automate testing.  This seems like a big win.</p>

<p>There are JavaScript engines like
<a href="http://www.mozilla.org/rhino/">Rhino</a>.  To help test code
in a browserless environment, John wrote <a href="http://groups.google.com/group/envjs">env.js</a>, which is a
browser-like environment that runs in pure JavaScript.  He talked about how this could be used for
screen scraping.</p>

<p><div class="wp-caption alignright" style="width: 343px">
<a href="http://www.flickr.com/photos/emilsit/3999843934/"
title="John Resig at DevDays Boston by Emil Sit, on Flickr"><img src="http://farm3.static.flickr.com/2582/3999843934_61ceeb4fce_m.jpg"
width="240" height="160" alt="John Resig plugs testswarm.com for
distributed JavaScript testing." /></a>
<p class="wp-caption-text">John Resig at DevDays Boston</p></div>
Finally, John introduced <a href="http://testswarm.com/">testswarm.com</a>.
This is a SETI@Home style site where anyone can visit the
site, download some tests to run and report back the results.
This should give very broad coverage and allow developers to
get feedback from a wide range of real environments (e.g.
mobile!).</p>

<p>Overall, John&#8217;s talk was a rapid-fire overview of JavaScript
testing resources from a JavaScript ninja.  It was very practical,
easy to follow and probably great for anyone who does JavaScript
development.  However, it lacked the &#8220;Python is awesome!&#8221; feel of
Ned Batchelder&#8217;s morning talk and so for a non-Javascript
developer such as myself, it was not as appealing.</p>

<h3>Miguel De Icaza</h3>

<p><a href="http://tirania.org/blog/">Miguel De Icaza</a> closed out the day
with a talk on Mono.  Miguel explained that he wasn&#8217;t really sure
what he should talk about&#8212;Mono is a giant universe and
explaining &#8220;Mono&#8221; it is &#8220;kind of like explaining God&#8221;&#8212;and his
<a href="http://tirania.org/blog/archive/2009/Sep-30.html">informal survey</a> didn&#8217;t
really provide a mandate.  He would up giving some nice technical
demonstrations of some recent Mono developments, with a fair amount
of personal flair to keep the audience engaged.</p>

<p>The core of Mono is an implementation of the Common Language
Runtime for Linux.  One of the goals of this project was
to bring the best development tools to Linux.</p>

<p>The first demonstration Miguel gave was an impressive combination
of tools.  Using a <a href="http://www.go-mono.com/monovs/">plugin to Visual
Studio</a>, Miguel demonstrated that
you could develop a Linux port of a .NET application entirely using
Visual Studio on Windows, and seamlessly testing and packaging
on a Linux machine (or VM), by walking through a live example
of porting BlogEngine.NET.  This made use of Bonjour to
dynamically discover the Linux machines, pushing execution
to the selected machine, and viewing the debugging results 
in Visual Studio.</p>

<p>Miguel then decided that a developer might want to publish their
application as a <a href="http://nat.org/blog/2009/07/suse-studio-10/">software
appliance</a>, so he
walked through a complete demonstration of using <a href="http://susestudio.com/">SUSE
Studio</a>.  He seamlessly built an RPM on
his Linux box from Visual Studio and pushed it into &#8220;the cloud&#8221; of
SUSE Studio.  From his browser, he configured an appliance with
that RPM, baked it the way they do on cooking shows, booted the
virtual machine in the cloud, accessed it using a Flash-based console in
the web browser, and accessed the port of BlogEngine.NET that he
had just booted.</p>

<p>For his second major demonstration, Miguel moved over to
<a href="http://monotouch.net">MonoTouch</a>.  This showed using
<a href="http://monodevelop.com/">MonoDevelop</a>, an IDE for Mono
developers, running on a Mac, to work with the iPhone interface
builder application, to build a simple flashlight application
(i.e., a giant white button) for the iPhone simulator.  He
talked a little also about the technical work involved here,
which was to compile the developer&#8217;s Mono code into ARM assembly
and link it into the Mono runtime, to create an iPhone
application.  This gets around Apple&#8217;s &#8220;no interpreters&#8221; rule.</p>

<p>Miguel&#8217;s talk was easily the most entertaining one of the day.  It
was perhaps most entertaining because, in addition to his wry
humor (check out <a href="http://twitter.com/irobinson/status/4691930719">the pictures from Ian Robinson&#8217;s
Tweet</a>, for
example), as he performed his live demonstrations, things would
break, whereupon Miguel would think, realize what was wrong,
pop open a Terminal and fix it.  That&#8217;s not something you
see in the usual carefully scripted demos at most shows.
Of course, Miguel was also demonstrating some interesting
technical features and giving an advertisement for a wide-range
of Mono-related tools as well, so there was something for
everyone.</p>

<h3>Wrap-up</h3>

<p>After Miguel&#8217;s talk, Joel suggested that the audience break
up into informal groups and get dinner, loosely organized
around seven areas that he suggested.  I hadn&#8217;t planned for
that and had to get home; not sure how many people went.</p>

<p>Overall, I think DevDays was well worth attending.  On the networking side, I got
to meet a few local developers (of whom I&#8217;ve posted a few <a href="http://www.flickr.com/photos/emilsit/sets/72157622558403216/">pictures on Flickr</a>)
and catch up briefly with some acquaintances from school.  On the technical side, I got a broad overview of several popular technical areas from leading
figures in those areas. </p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/EmilSitMainBlog?a=m3V54piYH-8:WmfZJnkrFY4:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/EmilSitMainBlog?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/EmilSitMainBlog?a=m3V54piYH-8:WmfZJnkrFY4:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/EmilSitMainBlog?i=m3V54piYH-8:WmfZJnkrFY4:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/EmilSitMainBlog/~4/m3V54piYH-8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.emilsit.net/blog/archives/stackoverflow-devdays-boston-2009-afternoon/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.emilsit.net/blog/archives/stackoverflow-devdays-boston-2009-afternoon/</feedburner:origLink></item>
		<item>
		<title>StackOverflow DevDays Boston 2009, Morning</title>
		<link>http://feedproxy.google.com/~r/EmilSitMainBlog/~3/DaIgUTmUb2M/</link>
		<comments>http://www.emilsit.net/blog/archives/stackoverflow-devdays-boston-2009-morning/#comments</comments>
		<pubDate>Thu, 08 Oct 2009 14:47:44 +0000</pubDate>
		<dc:creator>Emil Sit</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[conferences]]></category>
		<category><![CDATA[Dan Pilone]]></category>
		<category><![CDATA[devdays]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Joel Spolsky]]></category>
		<category><![CDATA[mercurial]]></category>
		<category><![CDATA[Ned Batchelder]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[stackoverflow]]></category>

		<guid isPermaLink="false">http://www.emilsit.net/blog/?p=231</guid>
		<description><![CDATA[Boston DevDays kicked
off a month-long tour of technical talks aimed at programmers, organized
by StackOverflow and Carsonified.
I had the good fortune to attend, meet a few interesting people and see
some fun talks.  I tried to write a bit in real-time (search Twitter here)
but the WiFi was pretty over-subscribed and there was no cell coverage
to speak [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://stackoverflow.carsonified.com/events/boston">Boston DevDays</a> kicked
off a month-long tour of technical talks aimed at programmers, organized
by <a href="http://stackoverflow.com/">StackOverflow</a> and <a href="http://carsonified.com">Carsonified</a>.
I had the good fortune to attend, meet a few interesting people and see
some fun talks.  I tried to write a bit in real-time <a href="http://search.twitter.com/search?q=from:emilsit+%23devdays">(search Twitter here)</a>
but the WiFi was pretty over-subscribed and there was no cell coverage
to speak of so eventually I gave up.  Here are some more detailed notes, starting with
the morning sessions.</p>

<p>The day ran very much on schedule, and after some very loud music, DevDays opened with a funny video demonstrating the
competent technical leadership of the keynote speaker&#8230;</p>

<h3>Joel Spolsky</h3>

<p>Joel opened the day by giving a demonstration of the tyranny of computers:
you are constantly interrupted with questions asking for decisions, like &#8220;Do you want to install these
10 updates to Windows?&#8221; or &#8220;Enable caret browsing?&#8221;, that can be really hard to answer.
He argued that one of the reasons that computers ask us so many questions is that programmers want to give
users the power (and control) to do what they want.  But that&#8217;s another way of
saying that programmers don&#8217;t want to make the decisions to keep things simple.  The
rest of Joel&#8217;s somewhat meandering but always entertaining talk was a discussion
of how programmers (us!) should approach decision making, framed as a trade-off
between simplicity and power.</p>

<p>Decisions are ultimately hard to make&#8212;there have been many studies that
demonstrate that when people have too many choices, they freeze up and choose
nothing.  Thus, we&#8217;ve seen strong push towards simplicity in recent years; one
clear example of that has been the <a href="http://gettingreal.37signals.com/">Getting Real book from 37signals</a>.  Joel
(jokingly?) points out that three of the four 37signals apps are in fact just
one big textarea tag that you type into.  Other examples, given later, include
of course Apple&#8217;s products and Google.</p>

<p>But why do we wind up with programs with lots of options?  Well, if you have a
simple program, you find that most people won&#8217;t buy your product if it doesn&#8217;t
have feature X (or Y or Z or &#8230;).  So you wind up adding features over
time, as you get more customers and more experience.  Thus, removing simplicity
often happens as a side-effect of making money.</p>

<p>How to balance these?  If we don&#8217;t want to take away all decisions from the
user, we need a rule to guide us in what to remove and what to keep.  One rule
to follow is that <em>the computer does not get to set the agenda</em>.  Good decision
points are those that should help the user achieve what they want to do.  Bad
decision points are those that interrupt the user, that the user really isn&#8217;t
equipped to answer (e.g., should GMail automatically display inline images in
HTML?), that are things that the programmer cares about.</p>

<p>To decide what is good or bad, developers need a good model to understand what the user is trying
to do&#8212;Joel says every user is ultimately trying to replicate their DNA, but
you may have some more refined model.  Joel gave the example of Amazon&#8217;s
1-Click purchasing where the user should just be able to buy something with
a single click.  Apparently, early drafts of 1-Click really weren&#8217;t
one click: programmers kept wanting to put in things like confirmation pages.
Eventually, they arrived at just one click&#8212;by not immediately starting the
order processing, but holding it for a few minutes to consolidate related
1-Click orders and allow for cancellation of errors.  This was more work for
the developers, but simpler for the user.  This is what we want to see happen.</p>

<p>Overall, I think Joel&#8217;s talk set a nice tone for how we should think as developers
but didn&#8217;t offer anything particularly ground-breaking.</p>

<h3>Ned Batchelder on Python</h3>

<p><a href="http://netbatchelder.com/">Ned Batchelder</a> presented Python as a &#8220;Clean noise free environment to type your ideas.&#8221;
Or, alternatively, &#8220;Python is awesome.&#8221;  With a few bullets to lead-off (e.g.,
the REPL, duck typing, and &#8220;batteries included&#8221; nature of Python), we dove into code to
really understand what Python is capable of doing.
<a href="http://nedbatchelder.com/text/devdays.html">Ned&#8217;s slides</a> are online if you want to
take a look.  I won&#8217;t cover his talk in much detail since it was largely
explaining the Python language but will list some high points.</p>

<p>The first example was Peter Norvig&#8217;s concise <a href="http://norvig.com/spell-correct.html">spell corrector</a>.
This code makes ample use of <a href="http://docs.python.org/tutorial/datastructures.html#list-comprehensions">list comprehensions</a> and <a href="http://docs.python.org/tutorial/datastructures.html#sets">sets</a>, plus functions like <a href="http://docs.python.org/library/re.html#re.findall"><code>re.findall</code></a>,
<a href="http://docs.python.org/library/collections.html#collections.defaultdict"><code>collections.defaultdict</code></a>, and <a href="http://docs.python.org/library/functions.html#max">parameterized <code>max</code></a>, which were all new to me.</p>

<p>The second example was a custom build-up of a simple Python
templating engine, loosely based on <a href="http:/www.djangoproject.com/">Django</a>&#8217;s template styles.
This example demonstrated simple formatting with the <a href="http://docs.python.org/tutorial/inputoutput.html#fancier-output-formatting">percent operator</a>, but then quickly moved into more advanced features
like duck-typing (by implementing <a href="http://docs.python.org/reference/datamodel.html#object.__getitem__"><code>__getitem__</code></a>) and <a href="http://docs.python.org/library/functions.html#callable"><code>callable</code></a>.</p>

<p>One of the nice things about Ned&#8217;s presentation is that he demonstrated the
power of Python in two short but extremely powerful examples that left people
who didn&#8217;t know Python thinking, &#8220;Wow! That is really amazing!&#8221;</p>

<p>Ned recommended reading <a href="http://diveintopython.org">Dive into Python</a>
to learn more, and if you are in the Boston-area,  checking out the <a href="http://python.meetup.com/181/">Cambridge Python meetup</a>.</p>

<h3>Dan Pilone</h3>

<p><a href="http://twitter.com/danpilone">Dan Pilone</a>&#8217;s talk was an overview of iPhone development,
first giving a quick market overview, then giving a broad overview
of the nitty-gritty of developing in Objective C, and finally diving
into the practical economics and realities of selling iPhone apps.
The iPhone app market (as of Apple&#8217;s September numbers), consists of
something like 85,000 applications, of which 75% are pay
applications.  Some 35% of applications are games, whereas 6% fall
into more social applications.  There are 5 or 6 different
iPhone/iTouch hardware platforms, and something like 20 million
plus devices sold.  The iPhone has a great user
experience and comes with a great delivery model (the iTunes app
store).  This combined with some of the numbers make it a
good platform to develop for, with significant amounts of money
that can be earned.  (Dan emphasized that you really have to work
to develop and market the application, hence the &#8220;earned&#8221;.)</p>

<p>The iPhone development environment is very shiny.  I&#8217;m sure
<a href="http://arstechnica.com/apple/news/2008/10/iPhone-SDK.ars">Ars Technica</a>
has a much better overview but in short Dan demonstrated some
tools like XCode, CoreData (a graphical SQLite data modeler),
reference counting support (aka retain), and Instruments (a memory
profiler).  Dan suggested that this shininess is to make up
for some of the oddities of <a href="http://en.wikipedia.org/wiki/Objective-C">Objective C</a>
that you&#8217;ll have to live with.  He also demonstrated some of
the interface builder tools and how they link up.</p>

<p>Testing turns out to be quite interesting; the simulator
is okay but limited and often your app will work in the simulator
but fail on real devices.  For example, your app on a real device
might &#8220;run so slow you wish it had crashed&#8221;.  The simulator also doesn&#8217;t
enforce sandboxing as strictly as real devices, where
each app has its own uid and single directory where it
can store data.  There are also many different hardware
variants that you have to support that limit you in different ways: for example, early iPhones only give you
40MB of memory to play with whereas newer ones give you almost 120MB.  This is not reflected well in the simulator either.</p>

<p>Shipping an iPhone app on the app store requires approval,
a process that can take two weeks <em>per round-trip</em>.
There&#8217;s no way to get around it so you must budget in time
for that in development.  The approval store helps guarantee
a minimal level of quality of apps&#8212;they will verify that
your app indeed works on all different hardware, and they will
(eventually) catch any licensing violations but they&#8217;re
overall pretty reasonable.</p>

<p>Once you get approval, you show up in the recent releases section
of the app store, and there you have about 24 hours to get popular or
else you will fade into the long tail of oblivion. In fact, if you are in the top 50 apps,
you will easily get double the sales (presumably relative to the 51st app); if you
are in the top 10, you&#8217;ll be getting an order-of-magnitude more sales. So, make
sure you get your approval/release-date lined up with your marketing blitz.
The alternative is to charge a bit more than $0.99, and go for slow but steady sales.</p>

<p>As a Blackberry owner and Linux user, I found Dan&#8217;s talk to be a great introduction
to iPhone development.  Presumably his new ORA book, <a href="https://www.amazon.com/dp/0596803540?tag=indashe-20&amp;camp=0&amp;creative=0&amp;linkCode=as4&amp;creativeASIN=0596803540&amp;adid=11M4W940YFT2A0HNB3MM&amp;">Head First iPhone Development</a>, would be a good buy if you are in to that sort of thing.</p>

<h3>Joel on FogBugz</h3>

<p>Before lunch, Joel took the opportunity to give a pitch for his company&#8217;s FogBugz product,
and announce some new features.  He gave us a walk-through of its capabilities, from
organizing documentation, to project planning, to bug tracking, to user support.  New features announced
are a rich plugin architecture, plus support for Mercurial and code reviews
in a new hosted plug-in to FogBugz called <a href="http://fogcreek.com/kiln/">Kiln</a>.  He spent a fair amount of time
on that, demonstrating calling <code>hg push</code> from the command line.  He also demonstrated the <a href="http://www.joelonsoftware.com/items/2007/10/26.html">evidence-based scheduling</a> features of FogBugz.</p>

<p>Nothing too exciting for me working in a big company using Perforce, but a good marketing opportunity for FogCreek
and a nice chance to see how some other people do scheduling and bug tracking.  I was a bit disappointed that
there&#8217;s no direct way to do pre-commit (i.e. pre-push) reviews a la <a href="http://code.google.com/p/gerrit/">Gerrit</a>, but <a href="http://twitter.com/jasonrr/status/4689929004">@jasonrr</a> says you can set up a branch repo, push to that and then review there before merging to main.  I expect this means
that <a href="http://github.com">GitHub</a> will be getting code review support soon.</p>

<h3>Lunch!</h3>

<p>With that, we broke for lunch. <a href="http://twitter.com/jldio">@jldio</a> has the <a href="http://www.jimdio.net/?p=23">scoop on lunch</a>, and his own write-up of the day too.
More to come later, thanks for reading.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/EmilSitMainBlog?a=DaIgUTmUb2M:-u0WVEiFXRQ:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/EmilSitMainBlog?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/EmilSitMainBlog?a=DaIgUTmUb2M:-u0WVEiFXRQ:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/EmilSitMainBlog?i=DaIgUTmUb2M:-u0WVEiFXRQ:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/EmilSitMainBlog/~4/DaIgUTmUb2M" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.emilsit.net/blog/archives/stackoverflow-devdays-boston-2009-morning/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.emilsit.net/blog/archives/stackoverflow-devdays-boston-2009-morning/</feedburner:origLink></item>
		<item>
		<title>Systems Researchers: Mike Freedman</title>
		<link>http://feedproxy.google.com/~r/EmilSitMainBlog/~3/hKptx3wifVY/</link>
		<comments>http://www.emilsit.net/blog/archives/systems-researchers-mike-freedman/#comments</comments>
		<pubDate>Wed, 25 Mar 2009 11:00:49 +0000</pubDate>
		<dc:creator>Emil Sit</dc:creator>
				<category><![CDATA[Research]]></category>
		<category><![CDATA[academia]]></category>
		<category><![CDATA[cdn]]></category>
		<category><![CDATA[coral]]></category>
		<category><![CDATA[implementation]]></category>
		<category><![CDATA[interviews]]></category>
		<category><![CDATA[planetlab]]></category>
		<category><![CDATA[tarzan]]></category>

		<guid isPermaLink="false">http://www.emilsit.net/blog/?p=219</guid>
		<description><![CDATA[Mike Freedman and I have known each other since we were Masters students at MIT, working on things like the Tarzan anonymizing network (a parallel, pre-cursor to Tor).  He went on to build the hugely successful (&#8221;as seen on Slashdot&#8221;) Coral content distribution network, which figured largely in his dissertation.  It&#8217;s a great [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.cs.princeton.edu/~mfreed/">Mike Freedman</a> and I have known each other since we were Masters students at MIT, working on things like the Tarzan anonymizing network (a parallel, pre-cursor to Tor).  He went on to build the hugely successful (&#8221;as seen on Slashdot&#8221;) Coral content distribution network, which figured largely in his dissertation.  It&#8217;s a great treat to have him talk here about how Coral was built and deployed.  Be sure also to check out his <a href="http://sns.cs.princeton.edu/blog/">research group blog</a> for more interesting thoughts from him and his students!</p>

<p><em>What did you build?</em><br />
<a href="http://www.coralcdn.org/">CoralCDN</a> is a semi-open content distribution network.  Our stated goal with <a href="http://www.coralcdn.org/">CoralCDN</a> was to
&#8220;democratize content publication&#8221;: namely, allow websites to scale by
demand, without requiring special provisioning or commercial CDNs to
provide the &#8220;heavy lifting&#8221; of serving their bits.  Publishing with
CoralCDN is as easy as slightly modifying a URL to include <code>.nyud.net</code>
in its hostname (e.g., <a href="http://www.cnn.com.nyud.net/">http://www.cnn.com.nyud.net/</a>),
and the content is subsequently requested from and served by
CoralCDN&#8217;s network of caching web proxies.</p>

<p>Our initial goal for deploying <a href="http://www.coralcdn.org/">CoralCDN</a> was a network of volunteer
sites that would cooperate to provide such &#8220;automated mirroring&#8221;
functionality, much like sites do somewhat manually with open-source
software distribution.  As we progressed, I also imagined that small
groups of users could also cooperate in a form of time-sharing for
network bandwidth: they each would provide some relatively constant
amount of upload capacity, with the goal of being able to then handle
any sudden spikes (from the Slashdot effect, for example) to any
participant.  This model fits well with how 95th-percentile billing
works for hosting and network providers, as it then becomes very
important to flatten out bandwidth spikes.  We started a deployment of
CoralCDN on <a href="http://www.planet-lab.org/">PlanetLab</a>, although it never really migrated off that
network.  (We did have several hundred users, and even some major
Internet exchange points, initially contact us to run CoralCDN nodes,
but we didn&#8217;t go down that path, both for manageability and security
reasons.)</p>

<p>CoralCDN consists of three main components, all written from scratch:
a special-purpose web proxy, nameserver, and distributed hash table
(DHT) indexing node.  CoralCDN&#8217;s proxy and nameserver are what they
sound like, although they have some differences given that they are
specially designed for our setting.  The proxy has a number of design
choices and optimizations well-suited for interacting with websites
that are on their last legs&#8212;CoralCDN is designed for dealing with
&#8220;Slashdotted&#8221; websites, after all&#8212;as well as being part of a big
cooperative caching network.  The nameserver, on the other hand, is
designed to dynamically synthesize DNS names (of the form <code>.nyud.net</code>),
provide some locality and load balancing properties when selecting
proxies (address records it returns), and ensure that the returned
proxies are actually alive (as the proxy network itself is comprised
of unreliable servers).  The indexing node forms a DHT-based
structured routing and lookup structure that exposes a put/get
interface for finding other proxies caching a particular web object.
Coral&#8217;s indexing layer differs from traditional DHTs (such as 
<a href="http://pdos.csail.mit.edu/chord/">MIT&#8217;s Chord/DHash</a>) in that it creates a hierarchy of locality-based
clusters, each which maintains a separate DHT routing structure and
put/get table, and it provides weaker consistency properties within
each DHT structure.  These latter guarantees are possibly because
Coral only needs to find <em>some</em> proxies (preferably nearby ones)
caching a particular piece of content, not <em>all</em> such proxies.</p>

<p><em>Tell us about what you built it with.</em><br />
CoralCDN is built in C++ using <a href="http://www.scs.stanford.edu/~dm/">David Mazieres</a>&#8216;
<a href="http://www.okws.org/doku.php?id=sfslite">libasync and libarpc</a>
libraries, originally built for the Self-certifying File System (SFS).
This came out of my own academic roots in MIT&#8217;s PDOS group, where SFS
was developed by David and its libraries are widely used.  (David was
my PhD advisor at NYU/Stanford, and I got my MEng degree in PDOS.)
Some of the HTTP parsing libraries used by CoralCDN&#8217;s web proxy were
from <a href="http://www.okws.org/">OKWS</a>, <a href="http://maxk.org/">Max Krohn</a>&#8217;s webserver also written using SFS libraries.
Max was research staff with David at NYU during part of the time I was
there.  It&#8217;s always great to use libraries written by people you know
and can bother when you find a bug (although for those two, that was a
rare occurrence indeed!).</p>

<p>When I started building CoralCDN in late 2002, I initially attempted
to build its hierarchical indexing layer on top of the <a href="http://pdos.csail.mit.edu/chord/">MIT Chord/DHash</a>
implementation, which also used SFS libraries.  This turned out to be
a mistake (dare I say nightmare?), as there was a layering mismatch
between the two systems: I wanted to build distinct, localized DHT
clusters in a certain way, while Chord/DHash sought to build a single,
robust, global system.  It was thus rather promiscuous in maintaining
group membership, and I was really fighting the way it was designed.
Plus, <a href="http://pdos.csail.mit.edu/chord/">MIT Chord</a> was still research-quality code at the time, so bugs
naturally existed, and it was really difficult to debug the resulting
system with large portions of complex, distributed systems code that I
hadn&#8217;t written myself.  Finally, we initially thought that the &#8220;web
proxy&#8221; part of the system would be really simple, so our original
proxy implementation was just in python.  CoralCDN&#8217;s first
implementation was scrapped after about 6 months of work, and I
restarted by writing my own DHT layer and proxy (in C++ now) from
scratch.  It turns out that the web proxy has actually become the
largest code base of the three, continually expanded during the
system&#8217;s deployment to add security, bandwidth shaping and
fair-sharing, and various other robustness mechanisms.</p>

<p>Anyway, back to development libraries. I think the SFS libraries
provide a powerful development library that makes it easy to build
flexible, robust, fast distributed services&#8230;provided that one spends
time overcoming their higher learning curve.  Once you learn them,
however, they make it really easy to program in an event-based style,
and the RPC libraries prevent many of the silly bugs normally
associated with writing your own networking protocols.  I think Max&#8217;s
<a href="http://www.okws.org/doku.php?id=sfslite:tame2">tame</a> libraries significantly improve the readability and (hopefully)
lessen the learning curve of doing such event-based programming, as
tame <a href="http://www.usenix.org/events/usenix07/tech/krohn.html">removes the &#8220;stack-ripping&#8221;</a> that one normally sees associated
with events.  Perhaps I&#8217;ll use tame in future projects, but as I&#8217;ve
already climbed the learning curve of <a href="http://www.okws.org/doku.php?id=sfslite">libasync</a> myself, I haven&#8217;t yet.</p>

<p>That said, one of my PhD students at Princeton, <a href="http://www.cs.princeton.edu/~jterrace/">Jeff Terrace</a>, is
building a high-throughput, strongly-consistent object-based
(key/value) storage system called CRAQ using tame.  He&#8217;s seemed to
really like it.</p>

<p><em>How did you test your system for correctness?</em><br />
I deploy it?  In seriousness, it&#8217;s very difficult to test web proxies,
especially ones deployed in chaotic environments and interacting with
poorly-behaving clients and servers.  </p>

<p>I did most of my testing during initial closed experiments on about
150-300 PlanetLab servers, which is a distributed testbed deployed at
a few hundred universities and other institutions that each operate
two or more servers.  Testing that the DHT &#8220;basically&#8221; worked was
relatively easy: see if you actually get() what you put().  There are
a lot of corner cases here, however, especially when one encounters
weird network conditions, some of which only became apparent after we
moved Coral from the network-friendly North American and European
nodes to those PlanetLab servers in China, India, and Australia.
Always be suspicious with systems papers that describe the authors&#8217;
&#8220;wide deployment&#8221; on &#8220;selected&#8221; (i.e., cherry-picked) U.S. PlanetLab
servers.</p>

<p>Much of the testing was just writing the appropriate level of debug
information so we could trace requests through the system.  I got
really tired of staring at routing table dumps at that time.  Last
year I worked with Rodrigo Fonseca to integrate <a href="http://x-trace.net">X-Trace</a> into CoralCDN, which would have
made it <em>significantly</em> easier to trace transactions through the DHT
and the proxy network.  I&#8217;m pretty excited about such tools for
debugging and monitoring distributed systems in a fine-grained
fashion.</p>

<p>Testing all the corner cases for the proxy turned out to be another
level of frustration.  There&#8217;s really no good way to completely debug
these systems without rolling them out into production deployments,
because there&#8217;s no good suite of possible test cases: The potential
&#8220;space&#8221; of inputs is effectively unlimited.  You constantly run into
clients and servers which completely break the HTTP spec, and you just
need to write your server to deal with these appropriately.  Writing a
proxy thus because a little bit of learning to &#8220;guess&#8221; what developers
mean.  I think this actually has become worse with time.  Your basic
browser (FireFox, IE) or standard webserver (Apache) is going to be
quite spec-compliant.  The problem is that you now have random
developers writing client software (like podcasters, RSS readers,
etc.) or generating Ajax-y XmlHttpRequest&#8217;s.  Or casual developers
dynamically generating HTTP on the server-side via some scripting
language like PHP.  Because who needs to generate vaguely
spec-compliant HTTP if you are writing both the client and server?
(Hint: there might be a middlebox on path.)  And as it continues to
become even easier to write Web services, you&#8217;ll probably continue to
see lots of messy inputs and outputs from both sides.</p>

<p>So while I originally tested CoralCDN using its own controlled
PlanetLab experiments, after the system went live, I started testing
new versions by just pushing them out to one or a few nodes in the
live deployment.  Then I just monitor these new versions carefully
and, if things seemed to work, slowly push them out across the entire
network.  Coral nodes include a shared secret in their packet headers,
which excludes random people from joining our deployment.  I also use
these shared secrets to deploy new (non-backwards-compatible) versions
of the software, as the new version (with a new secret nonce) won&#8217;t
link up with DHT nodes belonging to previous versions.</p>

<p><em>How did you deploy your system? How big of a deployment?</em><br />
CoralCDN has been running 24/7 on 200-400 PlanetLab servers since
March 2004.  I manage the network using <a href="http://appmanager.berkeley.intel-research.net/">AppManager</a>, built by Ryan
Huebsch from Berkeley, which provides a SQL server that keeps a record
of current node run state, requested run state, install state, etc.
So AppManager gives me a Web interface to control the desired runstate
of nodes, then all nodes &#8220;call home&#8221; to the AppManager server to
determine updated runstate.  You write a bunch of shell scripts to
actually use these run states to start or stop nodes, manage logs,
etc.  This &#8220;bunch of shell scripts&#8221; eventually grew to be about 3000
lines of <code>bash</code>, which was somewhat unexpected.  While AppManager is a
single server (although nodes are configured with a backup host for
failover), CoralCDN&#8217;s scripts are designed for nodes to &#8220;fail same&#8221;.
That is, requested runstate is stored durably on each node, so if the
management server is offline or returns erroneous data (which it has
in the past), the nodes will maintain their last requested runstate
until the management server comes back online and provides a valid
status update.</p>

<p><em>How did you evaluate your system?</em><br />
We performed all the experiments one might expect in an academic
evaluation on an initial test deployment on PlanetLab. Our <a href="http://www.cs.princeton.edu/~mfreed/docs/coral-nsdi04.pdf">NSDI
&#8216;04</a> paper discusses these experiments.</p>

<p>After that stage, CoralCDN just runs &#8212; people continue to use it, so
it provides some useful functionality.  My interest transitioned from
providing great service to just keeping it running (while I moved onto
other research).</p>

<p>I probably spend about 10 minutes a week &#8220;keeping CoralCDN running&#8221;,
which is typically spent answering abuse complaints, rather than
actually managing the system.  This is largely because the system&#8217;s
algorithms were designed to be completely self-organizing &#8212; as we
initially thought of CoralCDN as a peer-to-peer system &#8212; as opposed
to a centrally-managed system designed for PlanetLab.  System
membership, fault detection and recovery, etc., is all completely
automated.</p>

<p>Unfortunately, dynamic membership and failover doesn&#8217;t extend to the
primary nameservers we have registered for <code>.nyud.net</code> with the <code>.net</code>
gTLD servers.  These 10-12 nameservers also run on PlanetLab servers,
so if one of these servers go offline, our users experience bad DNS
timeouts until I manually remove that server from the list registered
with Network Solutions.  (PlanetLab doesn&#8217;t provide any IP-layer
virtualization that would allow us to failover to alternate physical
servers without modifying the registered IP addresses.)  And I have to
admit I&#8217;m pretty lazy about updating the DNS registry, especially
given the rather painful web UI that Network Solution provides.  (In
fairness, the UIs for GoDaddy and other registrars I&#8217;ve used are
similarly painful).  I think registrars should really provide a
programmatic API for updating entries, but haven&#8217;t found one for
low-cost registrars yet.  Anyway, offline nameservers are probably the
biggest performance problem with CoralCDN, and probably the main
reason it seems slow at times.  This is partly a choice I made,
however, in not becoming a vigilant system operator for which managing
CoralCDN becomes a full-time job.</p>

<p>There&#8217;s a lesson to be had here, I think, for academic systems that
somehow &#8220;escape the lab&#8221; but don&#8217;t become commercial services: either
promote lessened expectations for your users (and accept that reality
yourself), build up a full-time developer/operations staff (a funding
quandary), or expect the project to soon die-off after its initial
developers lose interest or incentives.</p>

<p><em>Anything you’d like to add?</em><br />
My research group actually just launched a <a href="http://sns.cs.princeton.edu/blog/">blog</a>.  In the next few
weeks, I&#8217;ll be writing a series about some of the lessons I&#8217;ve learned
from building and deploying CoralCDN.  I want to invite all your
readers to look out for those posts and really welcome any comments or
discussion around them.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/EmilSitMainBlog?a=hKptx3wifVY:q6MT_ZNYASk:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/EmilSitMainBlog?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/EmilSitMainBlog?a=hKptx3wifVY:q6MT_ZNYASk:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/EmilSitMainBlog?i=hKptx3wifVY:q6MT_ZNYASk:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/EmilSitMainBlog/~4/hKptx3wifVY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.emilsit.net/blog/archives/systems-researchers-mike-freedman/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.emilsit.net/blog/archives/systems-researchers-mike-freedman/</feedburner:origLink></item>
		<item>
		<title>Systems Researchers: Justin Cappos</title>
		<link>http://feedproxy.google.com/~r/EmilSitMainBlog/~3/PcFnGO5uB8g/</link>
		<comments>http://www.emilsit.net/blog/archives/systems-researchers-justin-cappos/#comments</comments>
		<pubDate>Mon, 16 Mar 2009 11:00:22 +0000</pubDate>
		<dc:creator>Emil Sit</dc:creator>
				<category><![CDATA[Research]]></category>
		<category><![CDATA[academia]]></category>
		<category><![CDATA[implementation]]></category>
		<category><![CDATA[interviews]]></category>
		<category><![CDATA[planetlab]]></category>
		<category><![CDATA[san fermin]]></category>
		<category><![CDATA[seattle]]></category>
		<category><![CDATA[stork]]></category>
		<category><![CDATA[testbed]]></category>

		<guid isPermaLink="false">http://www.emilsit.net/blog/?p=205</guid>
		<description><![CDATA[Justin Cappos received his PhD from the University of Arizona under the supervision of John Hartman.  I met Justin several years ago at a PlanetLab Consortium meeting when he was starting to work on Stork, a system to simplify package deployment.  He is currently a Post Doc at the University of Washington working [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.cs.arizona.edu/~justin/">Justin Cappos</a> received his PhD from the <a href="http://www.cs.arizona.edu/">University of Arizona</a> under the supervision of <a href="http://www.cs.arizona.edu/people/jhh/">John Hartman</a>.  I met Justin several years ago at a PlanetLab Consortium meeting when he was starting to work on Stork, a system to simplify package deployment.  He is currently a Post Doc at the University of Washington working with <a href="http://www.cs.washington.edu/homes/tom">Tom Anderson</a> and <a href="http://www.cs.washington.edu/homes/arvind">Arvind Krishnamurthy</a>.</p>

<p><em>What did you build?</em><br />
The most relevant / longest term projects are: <a href="http://www.cs.arizona.edu/stork">Stork</a>, <a href="http://www.usenix.org/events/nsdi08/tech/cappos.html">San Fermin</a>, and <a href="https://seattle.cs.washington.edu">Seattle</a>.</p>

<p>Stork is a <a href="http://www.cs.arizona.edu/stork">package manager</a> that has security and functionality
improvements over existing Linux package managers.   Some of the
advances we made in Stork have been adapted by APT, YUM, YaST and
other popular Linux package managers.</p>

<p>San Fermin is a system for <a href="http://www.usenix.org/events/nsdi08/tech/cappos.html">aggregating large quantities of data from
computers</a>.   San Fermin provides the result faster and with better
fault tolerance than existing techniques.</p>

<p>Seattle is an <a href="https://seattle.cs.washington.edu">educational testbed</a> built from resources donated by
universities all around the world.   The universities run a safe,
lightweight VM that students from other universities can run code in.</p>

<p><em>Tell us about what you built it with.</em><br />
I used Java for <a href="http://www.usenix.org/events/nsdi08/tech/cappos.html">San Fermin</a> because I needed to leverage existing
Pastry code that was in Java.   I used Python for <a href="http://www.cs.arizona.edu/stork">Stork</a> and <a href="https://seattle.cs.washington.edu">Seattle</a>.
I found Python to be far superior for large projects (other languages
I&#8217;ve used are Java, C, C++, QBASIC, and Pascal).   Python has been a
dream come true because it&#8217;s great for prototyping, easy to learn, and
the resulting code is readable (so long as you have sensible style
constraints on the written code).</p>

<p>Perhaps the most useful thing is getting other developers involved.
I like to do the initial prototyping myself, but after that it is
great to have others helping out.</p>

<p><em>How did you test your system for correctness?</em><br />
There are whitebox / unit tests as well as blackbox / integration
tests for most parts of the systems.   The time that we spent building
thorough test cases really paid off because it simplifies debugging.</p>

<p>I like to use my systems in real world environments with outside
users, so the system is never done thus correctness is an iterative
process.   If I&#8217;m aware of bugs, we fix them.   If I&#8217;m not aware of
bugs, we&#8217;re adding features based upon user requests (and therefore
may be adding more bugs for us to fix later).   In general, the fact
that we have users that rely on the software over long time periods is
a testament to its stability which is related to correctness.</p>

<p>To more specifically answer the question you are really asking, I
usually run my code by hand and evaluate it in small / constrained
environments (turning these test runs into unit tests).   I also
follow a philosophy where I try to &#8220;detect and fail&#8221; as much as
possible.   I care more about correctness than performance (at least
initially) and so add many redundant checks in my code to catch errors
as soon as possible.</p>

<p>I find that if I&#8217;m careful and thorough when writing my code, I spend
very little time debugging.   I probably spend about 30% of the time
writing code, 40% writing comments / docs (which I normally write
before / during coding), 20% of the time writing test code for
individual modules, and about 10% debugging after the fact.   I think
part of this is I&#8217;m really careful about checking input and boundary
conditions and so I can normally pin-point the exact cause of a
failure.</p>

<p>In terms of problems when writing code, I generally only use standard
libraries and code I&#8217;ve written.   I don&#8217;t depend on third party code
because I don&#8217;t know what level of support it will have.   Also, since
I usually code in Python, it&#8217;s easy for me to add functionality to do
whatever I need.</p>

<p><em>How did you deploy your system?  How big of a deployment?</em><br />
Stork has been deployed on <a href="http://www.planet-lab.org/">PlanetLab</a> for about 6 years.   For the
majority of the time we&#8217;ve been deployed on every working PlanetLab
node.   Stork has managed > 500K VMs and when I last checked was used
daily by users on around two dozen sites.   We initially used
AppManager to deploy Stork, but since have been using PlanetLab&#8217;s
initscript functionality.</p>

<p><a href="http://www.usenix.org/events/nsdi08/tech/cappos.html">San Fermin</a> was deployed on PlanetLab for use in combining and managing
logs from <a href="http://www.cs.arizona.edu/stork">Stork</a>.   However, we found that <a href="http://www.usenix.org/events/nsdi08/tech/cappos.html">San Fermin</a> was dysfunctional
due to difficulties in getting Pastry to start reliably and work when
non-transitive connectivity occurs.   As a result, we mainly ended up
using San Fermin as a publication vehicle.</p>

<p><a href="https://seattle.cs.washington.edu">Seattle</a> is currently deployed on more than 1100 computers around the
world.   We have done our initial deployment by encouraging educators
to use our platform in networking and distributed systems classes.
Our longer term plans involve using Seattle to build a research
testbed of 1 million nodes.</p>

<p><em>How did you evaluate your system?</em><br />
With <a href="http://www.usenix.org/events/nsdi08/tech/cappos.html">San Fermin</a> (and other systems research I haven&#8217;t mentioned),
there is fairly clear related work to compare against.   In some
cases, the biggest challenge has been getting the existing research
prototype code from another project to run well enough for comparison.</p>

<p>For the work that I&#8217;ve done where I&#8217;ve focused on impact over
publication impact (<a href="https://seattle.cs.washington.edu">Seattle</a> / <a href="http://www.cs.arizona.edu/stork">Stork</a>), evaluation is much more
difficult because these aren&#8217;t incremental improvements over existing
models and systems.   These systems break the mold in terms of
security and / or functionality so sometimes it&#8217;s difficult to know
how to compare them to existing work.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/EmilSitMainBlog?a=PcFnGO5uB8g:yGUCVizN5Y0:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/EmilSitMainBlog?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/EmilSitMainBlog?a=PcFnGO5uB8g:yGUCVizN5Y0:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/EmilSitMainBlog?i=PcFnGO5uB8g:yGUCVizN5Y0:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/EmilSitMainBlog/~4/PcFnGO5uB8g" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.emilsit.net/blog/archives/systems-researchers-justin-cappos/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.emilsit.net/blog/archives/systems-researchers-justin-cappos/</feedburner:origLink></item>
		<item>
		<title>Systems Researchers Interview Series</title>
		<link>http://feedproxy.google.com/~r/EmilSitMainBlog/~3/ekpzhpaQwT8/</link>
		<comments>http://www.emilsit.net/blog/archives/systems-researchers-interview-series/#comments</comments>
		<pubDate>Sun, 15 Mar 2009 01:41:04 +0000</pubDate>
		<dc:creator>Emil Sit</dc:creator>
				<category><![CDATA[Research]]></category>
		<category><![CDATA[academia]]></category>
		<category><![CDATA[implementation]]></category>
		<category><![CDATA[interviews]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://www.emilsit.net/blog/?p=201</guid>
		<description><![CDATA[After my last post on implementing Chord, I thought it might be insightful and educational to examine how others are building research distributed systems.  I have asked a number of colleagues who have built successful research systems to answer a few questions about their implementations.  Here, successful roughly means that the system has [...]]]></description>
			<content:encoded><![CDATA[<p>After my last post <a href="http://www.emilsit.net/blog/archives/on-implementing-chord/">on implementing Chord</a>, I thought it might be insightful and educational to examine how others are building research distributed systems.  I have asked a number of colleagues who have built successful research systems to answer a few questions about their implementations.  Here, successful roughly means that the system has seen some broad use or adoption, or (and?) has been presented at a notable peer-reviewed conference.  The questions to be answered:</p>

<ul>
<li>What did you build?</li>
<li>Tell us about what you built it with.  For example, what languages or 3rd party tools/libraries did you use?  Why?  What was your experience with them?</li>
<li>How did you test your system for correctness?</li>
<li>How did you deploy your system?  How big of a deployment?</li>
<li>How did you evaluate your system?</li>
<li>Anything you&#8217;d like to add?</li>
</ul>

<p>A few folks have agreed to participate; as I post their responses, I will update this post with their names and links to the interviews.  If you are interested in participating, just send me an e-mail!</p>

<p>Participants (last updated 25 Mar 2009):</p>

<ul>
<li><a href="http://www.emilsit.net/blog/archives/systems-researchers-justin-cappos/">Justin Cappos</a>, currently a post-doc at UW, working on <a href="http://seattle.cs.washington.edu">Seattle</a>.</li>
<li><a href="http://www.emilsit.net/blog/archives/systems-researchers-mike-freedman/">Mike Freedman</a>, professor and leader of the <a href="http://sns.cs.princeton.edu/">S* Network Systems</a> at Princeton.</li>
</ul>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/EmilSitMainBlog?a=ekpzhpaQwT8:SvrCFH1Qw6Q:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/EmilSitMainBlog?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/EmilSitMainBlog?a=ekpzhpaQwT8:SvrCFH1Qw6Q:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/EmilSitMainBlog?i=ekpzhpaQwT8:SvrCFH1Qw6Q:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/EmilSitMainBlog/~4/ekpzhpaQwT8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.emilsit.net/blog/archives/systems-researchers-interview-series/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.emilsit.net/blog/archives/systems-researchers-interview-series/</feedburner:origLink></item>
		<item>
		<title>On implementing Chord</title>
		<link>http://feedproxy.google.com/~r/EmilSitMainBlog/~3/6W4gwCydPog/</link>
		<comments>http://www.emilsit.net/blog/archives/on-implementing-chord/#comments</comments>
		<pubDate>Mon, 02 Mar 2009 03:28:10 +0000</pubDate>
		<dc:creator>Emil Sit</dc:creator>
				<category><![CDATA[Research]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[chord]]></category>
		<category><![CDATA[dht]]></category>
		<category><![CDATA[implementation]]></category>

		<guid isPermaLink="false">http://www.emilsit.net/blog/?p=171</guid>
		<description><![CDATA[The Chord protocol dynamically constructs robust and scalable overlay networks that map a given key to an active node.  The MIT PDOS Chord implementation has served as a reference implementation of Chord, and over the years has accumulated many tweaks and improvements.  While the theoretical highlights have largely been documented in our publications, [...]]]></description>
			<content:encoded><![CDATA[<p>The <a href="http://pdos.csail.mit.edu/papers/ton:chord/">Chord</a> protocol dynamically constructs <a href="http://pdos.csail.mit.edu/papers/dhtcomparison:infocom05/">robust</a> and <a href="http://pdos.csail.mit.edu/papers/ton:chord/">scalable</a> <a href="http://en.wikipedia.org/wiki/Overlay_network">overlay networks</a> that map a given key to an active node.  The MIT <a href="http://pdos.csail.mit.edu/chord/">PDOS Chord implementation</a> has served as a reference implementation of Chord, and over the years has accumulated many tweaks and improvements.  While the theoretical highlights have largely been documented in <a href="http://pdos.csail.mit.edu/pubs.html#Peer-to-peer+Computing">our publications</a>, the implementation details may have been omitted.  Given the relative multitude of <a href="http://pdos.csail.mit.edu/chord/faq.html#lang">re-implementations I know of</a>, it seemed worthwhile to try and identify some of these lessons instead of leaving them to bit-rot inside our implementation.  A basic understanding of Chord is assumed.  It is also important to realize that MIT Chord was largely run over the wide-area, not in a data-center.</p>

<p>MIT Chord is implemented in C++ using <a href="http://www.okws.org/doku.php?id=sfslite">libasync</a>.  We did not like Java because (at least a few years ago) <a href="http://www.planet-lab.org/">PlanetLab</a> did not make it easy to push a JRE to all your nodes and would also kill processes with large memory footprints (which seemed to often be Java VMs).  So, using C++ made deployment to PlanetLab easier and the code more efficient.  Today, I might use the STL and select bits from Boost, which would make the implementation accessible to a broader audience.  I&#8217;d probably also use threads.</p>

<p>Because of its <a href="http://www.okws.org/doku.php?id=sfslite">libasync</a> roots, MIT Chord uses XDR and SunRPC for its inter-node communcation.  It would be better today to use something like <a href="http://code.google.com/p/protobuf/">Protocol Buffers</a> or <a href="http://incubator.apache.org/thrift/">Thrift</a>; the front-end should definitely support XML-RPC for maximum ease-of-application development.  Other than NFS, basically no one uses SunRPC.</p>

<p>Chord uses its own transport called the <a href="http://www.usenix.org/events/nsdi04/tech/full_papers/dabek/dabek_html/index.html#tth_sEc5.2">Striped Transport Protocol (STP)</a>.  Read the section, think about the problem, decide if STP is right for you.  For actual data transfers, depending on your object size, it may be simpler to go with TCP.  UDP without flow-control may be just fine for the routing RPCs, though managing retransmission timers and mapping it to node liveness will be lots of fun.  Also read about <a href="http://www.usenix.org/events/nsdi05/tech/full_papers/li/li_html/index.html">Accordion</a>&#8217;s approach to this issue.</p>

<p>Much of a DHT implementation revolves around keeping track of other nodes (e.g., your neighbors).  The Chord paper describes the abstract successor list and finger table; our implementation keeps a bucket of nodes (the <code>locationtable</code>) that calculates successors and fingers on the fly from this table.  The Chord stabilization protocol runs periodically to keep this bucket filled with relevant live nodes.  This approach also let us easily implement <a href="http://www.usenix.org/events/nsdi05/tech/full_papers/li/li_html/index.html">Accordion</a> in our codebase.  A single reference-counted object is used to proxy remote nodes: this keeps all state about a remote node consistent, even if it is part of multiple in-flight operations.</p>

<p>Nodes often fail and MIT Chord works hard to stop using failed nodes, despite
some Chord operations that pass node lists around, by tagging the node wire representation with the time since the node was last contacted directly.  If node A has discovered for itself that node B has failed, it will ignore any mention of B from its neighbors that have not directly heard from B more recently.  (This doesn&#8217;t quite work right in the case of asymmetrically reachable nodes, but it is unclear what to do with such nodes anyway.)</p>

<p>Definitely include tools to view a live node&#8217;s state.  If you&#8217;re feeling fancy,  your nodes will speak HTTP on a special port and produce pretty graphics (MIT Chord doesn&#8217;t).  This will significantly improve your ability to debug weird routing issues (remotely).</p>

<p>These thoughts are a bit haphazard but hopefully they contain some tidbits of interest.
I&#8217;ve actually had relatively little interaction with other implementors of Chord so if you&#8217;re one of them, I&#8217;m curious how your experiences compare.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/EmilSitMainBlog?a=6W4gwCydPog:8lkWEqQjERI:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/EmilSitMainBlog?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/EmilSitMainBlog?a=6W4gwCydPog:8lkWEqQjERI:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/EmilSitMainBlog?i=6W4gwCydPog:8lkWEqQjERI:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/EmilSitMainBlog/~4/6W4gwCydPog" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.emilsit.net/blog/archives/on-implementing-chord/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://www.emilsit.net/blog/archives/on-implementing-chord/</feedburner:origLink></item>
		<item>
		<title>Mendel Rosenblum on Virtualization in Modern Computing Environments</title>
		<link>http://feedproxy.google.com/~r/EmilSitMainBlog/~3/IlBOHCPsVj4/</link>
		<comments>http://www.emilsit.net/blog/archives/mendel-rosenblum-on-virtualization-in-modern-computing-environments/#comments</comments>
		<pubDate>Fri, 27 Feb 2009 02:06:17 +0000</pubDate>
		<dc:creator>Emil Sit</dc:creator>
				<category><![CDATA[Research]]></category>
		<category><![CDATA[mendel rosenblum]]></category>
		<category><![CDATA[virtualization]]></category>
		<category><![CDATA[vmware]]></category>

		<guid isPermaLink="false">http://www.emilsit.net/blog/?p=186</guid>
		<description><![CDATA[Today, VMware co-founder Mendel Rosenblum gave a Deuterzos Lecture at MIT titled The Impact of Virtualization on Modern Computing Environments.  His talk outlined the general function of virtualization as an interposing layer between the hardware and the operating system, and the evolution of functionality in this layer over the past decade&#8212;in short, the talk [...]]]></description>
			<content:encoded><![CDATA[<p>Today, VMware co-founder Mendel Rosenblum gave a Deuterzos Lecture at MIT titled <a href="http://www.csail.mit.edu/events/eventcalendar/calendar.php?show=event&amp;id=1902">The Impact of Virtualization on Modern Computing Environments</a>.  His talk outlined the general function of virtualization as an interposing layer between the hardware and the operating system, and the evolution of functionality in this layer over the past decade&#8212;in short, the talk was largely a super high-level summary of VMware&#8217;s greatest hits, from server integration to VMotion to high-availability via record replay to virtual appliances.  Overall, I was not particularly impressed, though I thought it was well delivered and probably educational for a non-VMware-employee audience.</p>

<p>The most interesting observation Mendel made was in regarding the space between packaged software and software-as-a-service.   In the former, the user is responsible for everything outside of software development: from hosting, to configuration, to maintenance. In the latter, everything other than the actual use is handled by the developers.  The in-between space of deployment is enabled by virtualization: some of the maintenance/configuration can be handled by virtual appliances, and with the advent of vClouds and virtual data centers, you can transparently host things either internally or externally.</p>

<p>Anant Agarwal closed the QA section by asking Mendel to take his years of successful academic and industry work as a single sentence of advice.  To paraphrase, Mendel said to jump on opportunities that present themselves, for even if you land badly, most people find that the experience was worthwhile.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/EmilSitMainBlog?a=IlBOHCPsVj4:Vc-XNHgtPeY:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/EmilSitMainBlog?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/EmilSitMainBlog?a=IlBOHCPsVj4:Vc-XNHgtPeY:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/EmilSitMainBlog?i=IlBOHCPsVj4:Vc-XNHgtPeY:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/EmilSitMainBlog/~4/IlBOHCPsVj4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.emilsit.net/blog/archives/mendel-rosenblum-on-virtualization-in-modern-computing-environments/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.emilsit.net/blog/archives/mendel-rosenblum-on-virtualization-in-modern-computing-environments/</feedburner:origLink></item>
		<item>
		<title>Mobile virtualization demonstration at VMworld</title>
		<link>http://feedproxy.google.com/~r/EmilSitMainBlog/~3/jn0YV9MqJDQ/</link>
		<comments>http://www.emilsit.net/blog/archives/mobile-virtualization-demonstration-at-vmworld/#comments</comments>
		<pubDate>Thu, 26 Feb 2009 01:29:52 +0000</pubDate>
		<dc:creator>Emil Sit</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[mobile virtualization]]></category>
		<category><![CDATA[mvp]]></category>
		<category><![CDATA[n800]]></category>
		<category><![CDATA[nokia]]></category>
		<category><![CDATA[vmware]]></category>
		<category><![CDATA[vmworld]]></category>

		<guid isPermaLink="false">http://www.emilsit.net/blog/?p=177</guid>
		<description><![CDATA[At today&#8217;s VMworld keynote, CTO Steve Herrod included a brief demonstration of the project that I have been working on at VMware since last May: the Mobile Virtualization Platform (MVP).  One of the downsides of working in industry as opposed to academia is that you have to wait for big release dates such as [...]]]></description>
			<content:encoded><![CDATA[<p>At today&#8217;s <a href="http://www.vmworld.com/community/conferences/europe2009/agenda/keynotes/2">VMworld keynote</a>, CTO Steve Herrod included a brief demonstration of the project that I have been working on at VMware since last May: the <a href="http://www.vmware.com/technology/mobile/index.html">Mobile Virtualization Platform (MVP)</a>.  One of the downsides of working in industry as opposed to academia is that you have to wait for big release dates such as this before being able to talk about your work, so I&#8217;m excited to have the opportunity to blog a little bit about MVP today.</p>

<p>Steve chatted with Jerry Chen, who showed a <a href="http://en.wikipedia.org/wiki/Nokia_N800">Nokia N800</a> running the MVP bare-metal hypervisor which was hosting a Windows CE guest and an Android guest.  The relevant part of the keynote, including <a href="http://vimeo.com/3363448">the N800 loading and launching the Android VM</a> can be found on Vimeo.  The demo was also shown in a booth: Senior R&amp;D Director <a href="http://www.linkedin.com/in/juliaaustin">Julia Austin</a> walked through the demo for ITPro who has posted a <a href="http://www.itpro.co.uk/609997/video-two-operating-systems-on-one-phone">3 minute video of the full demo</a>, which I&#8217;ve embedded at the end of this post.</p>

<p>Running Android and WinCE on an N800 is pretty cool in and of itself, but our demo also highlights one of the key use cases for mobile virtualization, namely the separation of work and personal settings.  With your &#8220;work phone&#8221; as a virtual machine, it will be possible to easily backup and transfer your work settings from one phone to another, while keeping these settings cleanly partitioned from your personal settings.  Similarly, when you upgrade a device to the next generation, you will be able to port your phone over with relatively little hassle.</p>

<p>By providing a stable virtual platform, MVP will also hopefully simplify application development by allowing developers to target MVP instead of a myriad different devices.  Defining the virtual platform and mapping it into different physical platforms is an interesting challenge.</p>

<p>Some of the other challenges and benefits of virtualization in the mobile space are discussed in an <a href="http://www.eweek.com/index2.php?option=content&amp;task=view&amp;id=51813&amp;pop=1&amp;hide_ads=1&amp;page=1&amp;hide_js=1">eWeek article</a> by one of the founders of VirtualLogix, a competitor in this space.  At VMware, we are working hard on addressing these challenges with the aim of providing benefits to all stakeholders, from phone OEMs to enterprises to end-users.  Hopefully, you&#8217;ll be able to see the results of this work in the palm of your hand in the near future!</p>

<p><object width="480" height="295"><param name="movie" value="http://www.youtube.com/v/UNo6pn-dnSQ&#038;hl=en&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/UNo6pn-dnSQ&#038;hl=en&#038;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="295"></embed></object></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/EmilSitMainBlog?a=hZcPekeb"><img src="http://feeds.feedburner.com/~f/EmilSitMainBlog?d=41" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/EmilSitMainBlog?a=QjURiGYL"><img src="http://feeds.feedburner.com/~f/EmilSitMainBlog?i=QjURiGYL" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/EmilSitMainBlog/~4/jn0YV9MqJDQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.emilsit.net/blog/archives/mobile-virtualization-demonstration-at-vmworld/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.emilsit.net/blog/archives/mobile-virtualization-demonstration-at-vmworld/</feedburner:origLink></item>
		<item>
		<title>The afterlife of systems research code</title>
		<link>http://feedproxy.google.com/~r/EmilSitMainBlog/~3/n5JqdGnqcDI/</link>
		<comments>http://www.emilsit.net/blog/archives/the-afterlife-of-systems-research-code/#comments</comments>
		<pubDate>Mon, 16 Feb 2009 02:23:02 +0000</pubDate>
		<dc:creator>Emil Sit</dc:creator>
				<category><![CDATA[Research]]></category>
		<category><![CDATA[chord]]></category>
		<category><![CDATA[dhash]]></category>
		<category><![CDATA[dht]]></category>
		<category><![CDATA[history]]></category>
		<category><![CDATA[sfs]]></category>
		<category><![CDATA[sfslite]]></category>

		<guid isPermaLink="false">http://www.emilsit.net/blog/?p=160</guid>
		<description><![CDATA[When a graduate student completes their PhD, the software they wrote for that degree begins an almost inexorable decline into obscurity.  Other things become more important and, unless that code serves as a platform for further research or has spun off into a startup, there is precious little time to maintain and further develop [...]]]></description>
			<content:encoded><![CDATA[<p>When a graduate student completes their PhD, the software they wrote for that degree begins an almost inexorable decline into obscurity.  Other things become more important and, unless that code serves as a platform for further research or has spun off into a startup, there is precious little time to maintain and further develop code written for the degree.  The code has already served a purpose&#8212;namely, advancing the state of the art in the form of research papers and a dissertation.</p>

<p>For example, one student I know wanted to test a new Byzantine Fault Tolerant system against an earlier one and was told that the old one only worked on one specific machine in the corner of lab (running some ancient release of RedHat).  Another student in my group was trying to compare file system synchronization tools and found that the published source for some tools was hopelessly incompatible with modern compilers and libraries; he wound up finding some old RedHat isos and testing in a virtual machine.</p>

<p>I&#8217;m thinking about this today in the context of some recent activity on the <a href="https://pdos.csail.mit.edu/pipermail/chord/">Chord mailing list</a> about code I wrote for my PhD.  The entirety of my time as a graduate student was spent hacking on the PDOS <a href="http://pdos.csail.mit.edu/chord/">Chord/DHash implementation</a>, which has served as the reference implementation of Chord in <a href="http://pdos.csail.mit.edu/chord/faq.html#apps">numerous papers</a>. While I hesitate to declare this implementation dead, it has become clear from numerous mailing list posting that it will be increasingly hard for others to use the implementation if it is not more actively maintained.</p>

<p>Chord and DHash are implemented using the <a href="http://www.usenix.org/events/usenix01/mazieres.html">libasync C++ library</a>, an obscure and mostly undocumented creation of <a href="http://www.scs.stanford.edu/~dm/">Prof. David Mazieres</a>, who wrote it as part of his thesis on a <a href="http://www.scs.stanford.edu/~dm/home/papers/mazieres:separating.ps.gz">Self-Certifying File System (SFS)</a> ten years ago, back when C++ compilers sucked and the STL didn&#8217;t work very portably.  libasync offers a lot of nice features such as managing TCP buffering for nonblocking I/O and a comprehensive framework for writing user-level NFS servers; this came in handy for early Chord applications such as the <a href="http://pdos.csail.mit.edu/papers/cfs:sosp01/">Cooperative File System</a>.  As a result, the libasync toolkit was adopted by many PDOS research projects.</p>

<p>Unfortunately, as Prof. Mazieres moved on to other research projects, SFS releases and the libasync codebase languished.  The libasync library was fortunately adopted by <a href="http://www.maxk.org/">Max Krohn</a> in the form of <a href="http://www.okws.org/doku.php?id=sfslite">sfslite</a>.  I switched Chord to sfslite, so that it would be possible to point people at a real release instead of asking them to checkout some recent version of SFS from its (now defunct?) CVS server.</p>

<p>As part of sfslite, Max went on to develop <a href="http://www.okws.org/doku.php?id=sfslite:tame2">tame</a>&#8212;a language designed to <a href="http://www.usenix.org/events/usenix07/tech/krohn.html">simplify writing event driven programs</a> with callbacks using libasync, and as part of my thesis, I started to write code in tame to help test it.  When sfslite 1.x was released, tame had evolved from its v1 to v2 which changed the syntax.  Since I never had the time to take the potential stability hit involved in upgrading, Chord still relies on sfslite 0.8, which Max no longer has time to maintain.</p>

<p>Which brings us back to recent activity on the chord mailing list: as people try to build Chord with ever newer compilers and Linux versions, they run into problems finding a version of sfslite and Chord that build successfully.  I still don&#8217;t have the time to update the Chord tree to use newer versions of sfslite (though it might not be too hard), nor do I have access to all the resources I used to test it in deployment.  So, people are left to patch their own source trees and cobble together working bits.</p>

<p>I wish I had better news for people interested in Chord&#8212;there are a lot of useful lessons embedded in our implementation, and many <a href="http://pdos.csail.mit.edu/chord/faq.html#lang">reimplementations</a> that might benefit from those lessons.  Perhaps one day soon I will try to write up some of those implementation lessons.  Or maybe someone would be willing to take over maintaining Chord.  If you volunteer, I&#8217;d be happy to help you get started!</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/EmilSitMainBlog?a=gBqOIYRG"><img src="http://feeds.feedburner.com/~f/EmilSitMainBlog?d=41" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/EmilSitMainBlog?a=41fqX1va"><img src="http://feeds.feedburner.com/~f/EmilSitMainBlog?i=41fqX1va" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/EmilSitMainBlog/~4/n5JqdGnqcDI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.emilsit.net/blog/archives/the-afterlife-of-systems-research-code/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://www.emilsit.net/blog/archives/the-afterlife-of-systems-research-code/</feedburner:origLink></item>
		<item>
		<title>Capacity planning for cell phone networks</title>
		<link>http://feedproxy.google.com/~r/EmilSitMainBlog/~3/yDdKQuzZux0/</link>
		<comments>http://www.emilsit.net/blog/archives/capacity-planning-for-cell-phone-networks/#comments</comments>
		<pubDate>Mon, 19 Jan 2009 16:19:29 +0000</pubDate>
		<dc:creator>Emil Sit</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Thoughts]]></category>
		<category><![CDATA[cellphone]]></category>
		<category><![CDATA[flash crowds]]></category>
		<category><![CDATA[networks]]></category>
		<category><![CDATA[scalability]]></category>

		<guid isPermaLink="false">http://www.emilsit.net/blog/?p=151</guid>
		<description><![CDATA[The New York Times has an article today about how the inauguration crowd will test cellphone networks.  They wrote:


  Sprint Nextel, which said it had been planning for the inauguration since April, has also increased capacity of its cell sites and terrestrial transmission lines to prepare the network to sustain 10 to 15 [...]]]></description>
			<content:encoded><![CDATA[<p>The New York Times has an article today about how the <a href="http://www.nytimes.com/2009/01/19/technology/19cell.html?partner=permalink&amp;exprod=permalink">inauguration crowd will test cellphone networks</a>.  They wrote:</p>

<blockquote>
  <p>Sprint Nextel, which said it had been planning for the inauguration since April, has also increased capacity of its cell sites and terrestrial transmission lines to prepare the network to sustain 10 to 15 times the number of users it would serve on its networks during a normal day.</p>
</blockquote>

<p>Web services (such as Twitter, also cited in the article) also have to deal with scalability and planning to provide adequate (network) capacity.  It&#8217;s interesting to see how difficult (and expensive!) it can be to deal with flash crowds in other systems.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/EmilSitMainBlog?a=ni7fuuLQ"><img src="http://feeds.feedburner.com/~f/EmilSitMainBlog?d=41" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/EmilSitMainBlog?a=sSFwwNZB"><img src="http://feeds.feedburner.com/~f/EmilSitMainBlog?i=sSFwwNZB" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/EmilSitMainBlog/~4/yDdKQuzZux0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.emilsit.net/blog/archives/capacity-planning-for-cell-phone-networks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.emilsit.net/blog/archives/capacity-planning-for-cell-phone-networks/</feedburner:origLink></item>
	</channel>
</rss><!-- Dynamic page generated in 0.850 seconds. --><!-- Cached page generated by WP-Super-Cache on 2010-03-06 13:43:31 --><!-- Compression = gzip -->
