Category Archives: work

Live Labs Web Sandbox in Your Pocket

A few weeks ago we launched Live Labs Web Sandbox, a preview for a technology that secures Web 2.0. The sandbox runs entirely in the browser, without requiring any browser add-ons or plugins. Consequently we worked hard to make it cross-browser, as the image from my post from 10/23 illustrates.

However the browser no longer belongs to the realm of desktop or laptop computers. Browsers run on mobile phones and offer capabilities on par with their traditional counterparts. We ran the Web Sandbox on the T-Mobile G1 phone, as well as on the iPhone (screenshot below). The samples from the sandbox site execute as they should. When running the overhead benchmarks the QoS layer kicks in a little earlier than on traditional platforms, reflecting the speed differential between the underlying runtimes.

Live Labs Web Sandbox on iPhone

In the NYT Tech Section


The New York Times already has a story about Live Labs Sandbox, a project we’ve released just a few days ago. I am happy to see one of Live Labs‘ projects I’ve been driving from the embryonic stages receiving this kind of attention! For a closer look drop by our PDC 2008 session in L.A. or join the discussion about Web 2.0 security in the community forums available on

Live Labs Social Streams

In the post Political Streams Online (work blog) I mentioned that I left my fingerprints on Social Streams, the platform underneath Political Streams. For those who followed my work for a while the connections are probably obvious. For those who’d like to get oriented here are a few starting points:

  • Streams fit right into data flow architectures. A Data Flow Pattern Language covers sources, filters, and sinks, as well as how they interact with each other.
  • Aggregating data from heterogeneous sources is an integration problem. Integration Patterns discusses many proven techniques for tackling those problems.


Cloud Computing and LINQ

Due to scheduling conflicts I will miss the forthcoming workshop on Cloud Computing and Its Applications (CCA08), scheduled to kick off in a couple of days in Chicago. Erik Meijer will be there to present our LINQ-to-Datacenter paper–thanks Erik!. Here’s the abstract:

A plethora of Cloud/fabric frameworks/substrates have emerged within the industry: S3/EC2, Bigtable/Sawzall, Hadoop/PigLatin. Typically these substrates have low-level, idiosyncratic interfaces with data- and query- models heavily influenced by legacy SQL.

The many choices translate into high pain of adoption by developers because of the high risk of making the wrong bet. The SQL-like query model translates into high pain of adoption because it doesn’t appeal to developers who embraced object-oriented languages like C# or Java. The SQL-like data model is suboptimal for MapReduce computations because it is not fully compositional. This conservative approach is puzzling because recent language and tool innovations such as Language Integrated Query (LINQ) address precisely the problem of compositional programming with data in modern object-oriented languages.

The proponents of the current substrates have no incentive to come up with a general and developer-friendly abstraction that hides the idiosyncrasies of their proprietary solutions and graduates from the SQL model to a modern, object-oriented and compositional style.

We propose extending the LINQ programming model to massively-parallel, data-driven computations. LINQ provides a seamless transition path from computing on top of traditional stores like relational databases or XML to computing on the Cloud. It offers an object-oriented, compositional model that hides the idiosyncrasies of the underlying substrates. We anticipate that just as the community already built custom LINQ providers for sources such as Amazon, Flickr, or SharePoint, this model will trigger a similar convergence in the space of Cloud-based storage and computation substrates.

Building Distributed Applications with Recompilers

(Cross-posted from my work blog)

My article Volta: Developing Distributed Applications by Recompiling (co-authored with Brian Beckman and Benjamin Livshits) is now available in the Software Development Tools issue of IEEE Software (September/October 2008).

Here’s the abstract:

Mainstream languages and tools are tailored for sequential, non-distributed applications, with support for distributed computing provided only in library APIs. Such programming environments force developers to make decisions about “where-code-runs” early in the application lifecycle, structuring the entire application around partitioning decisions. Performance measurement may reveal that the original partitioning was wrong, but redistributing the application is expensive because redistributing is restructuring. We built a new kind of tool suite that recompiles executables into distributed form based on declarative user annotations, inserting most of the necessary remoting and synchronization boilerplate code, and facilitating post-hoc instrumentation to drive quantitative redistribution. Since the tools operate on the intermediate language CIL, they are compatible with a wide variety of .NET programming languages and eventual execution environments, even those that do not support .NET CIL directly, such as JavaScript.


Viral Spread and Scalability

Several threads that we put on the table at last week’s workshop in Zuerich did not get sufficient traction to tackle with the workshop’s participants. However that doesn’t mean that they’re not worthy of pattern mining; on the contrary.

Consider for example scalability and viral spread. There are well known techniques and patterns for designing high-capability Internet-based systems.

However, in a Web 2.0 world, particularly when there is potential for network effects, a site may become popular very quickly. How do you design a system that may need to scale to 1 million users in less than 2 months? I offered iLike as an example, but that was as concrete as we got at the workshop.


Back in Redmond my colleague Greg Linden pointed me to a Q&A with Ali Partovi of While the conversation doesn’t go into the technical details, the numbers speak for themselves:

In terms of daily signups, iLike on Facebook trounces anything else we do… iLike on Facebook has been signing up roughly 200,000 new members a day.

Viral spread made possible by social networking adds an interesting twist to scalability. I hope than an increasing number of designers will start talking about their solutions. If you’re interested in sharing data points or articulating them as Web 2.0 patterns, head over to our pattern Wiki. As the iPhone 3G launch demonstrated just a few days ago, miscalculations have the potential to inflict major frustrations with customers, as well as make the headlines.

Web 2.0: The Next Generation

In his 2003 OOPSLA keynote The Internet Paradigm Shift Tim O’Reilly summarized some of the common traits of the successful applications of the Internet era. They included software built for use in delivering services, dynamic data and languages, architecture of participation, low barriers to experimentation, interoperability, and a few others. Here are a couple of snapshots from his keynote (October 30, 2003).

OOPSLA 2003 - 13 OOPSLA 2003 - 14

A few years later he expanded on and explained the traits as design patterns. He then used the design patterns extracted from web applications such as eBay, Craigslist, Wikipedia, and a few others to define Web 2.0. While today there’s no general consensus on what Web 2.0 really is, many new systems exhibiting Web 2.0 traits have emerged since Tim’s paper–Pownce, SlideShare, friendfeed, reddit, and so forth.

Now why am I telling you this? If you’ve built Web 2.0 applications then you too could leave your fingerprints on the next generation of Web 2.0 design patterns. We are aiming at extracting new patterns from this post-eBay/Craigslist/Wikipedia crop at the Web 2.0 Pattern Mining Workshop at the TOOLS Europe conference. During the 2-day workshop (June 30-July 1) Web 2.0 and pattern experts will crack-open several Web 2.0ish systems, identify the recurring problems and common solutions, and extract new patterns.

Workshop participation is open to anybody who could contribute. If you’re interested check out the Call for Participation and send your proposal by the May 5 deadline. Feel free to contact me with questions or clarifications.


With the workshop a few days away, here are some updates:

  • Details about the pre-workshop preparation work are available from the workshop’s web site.
  • As part of their pre-workshop preparations, participants are posting selected Web 2.0 sites and questions to the social networking site. (As workshop participation is open to anybody attending TOOLS, you may want to track these posts if you’re planning on joining us.)
  • The TOOLS Europe Social Networking Site provides opportunities to bootstrap networking at the conference, as well as offers a glimpse into one of the topics we’ll look into at the workshop.

Live Labs Volta

Refactoring has been confined to object-oriented design for too long. The refinement through successive transformations and ability to revisit design decisions often is equally valuable (maybe even more so) for architecture. Live Labs Volta, one of the projects I’m working on, aims at providing just that. Today we are releasing a Live Labs Technology Preview of Volta. Volta introduces the Tier-Splitting refactoring, allowing a designer to move the distribution boundary in a declarative manner, while handling all the plumbing associated with distribution. In effect, it hides what Fred Brooks called accidental complexity, allowing the designer to focus on the essential complexity. Volta also stretches the reach of .NET to cover the cloud, but that’s the topic for a different post.