« August 2009 | Main | October 2009 »

September 30, 2009

New Media Platforms, Building Audience, and the Purpose-Centric Web

Kynetx Logo

Last week Seth Godin posted a piece on his blog called The platform vs. the eyeballs. The idea is that in "old media" the medium has control of the customer and "rented" them out to people who wanted to influence them. This is the premise of anyone getting paid for advertising. If you have control of a flow of users, you can charge other people for access to that flow. In essense you're renting out the flow.

Seth argues that in "new media" you're not renting an audience, you're building one. Seth calls the thing you use to build your audience a platform. He says there are two steps: buy a platform and then fill it with people. He goes on to give examples of this including book authors going directly to readers and real estate agents starting their own magazines. The beauty of building an audience over renting eyeballs is that the latter has small--often sub 1%--conversion rates. Platforms have conversion rates in the double digits--sometimes as high as 90%.

I think the reason for the high conversion rates is that "customer acquisition" (I hate the term, but nothing serves better at the moment) is done via what Britt Blaser calls "stepping stones." Convincing someone to receive your newletter or follow you on Twitter is easier than getting them to spend money or join an organization. But it's also the first step in a journey.

You don't have to look far to see examples of this phenomenon: blogs, podcasting, Twitter, and Facebook are being used by organizations and individuals alike as platforms on which to build a private audience. I chose the word "private" with some care since I think it would be a mistake to think of the audience as proprietary or owned in any way.

In fact, that's one of the real strengths of this model, as I see it. I can choose to read your blog--or not. I can unfollow--or even block--you on Twitter. As a consequence, the new media model shifts the balance of power. This shift gives organizations an incentive to do right by the individual. What's more, individuals are more likely to share information about themselves with organizations they trust and have a relationship with.

One way to look at Kynetx is as a platform company. Because Kynetx apps are cross-site and contextual, they can be used to create powerful platforms on which to build an audience. As I said in my post on the purpose-centric Web, "context matters more than content." When you are using a blog or newsletter as a platform, you're doing old media in the small: create an audience with content.

But as Paul Graham recently pointed out, you can't really sell content, you can only charge for the medium. And the ease of publishing online has created a situation where your content is competing with everyone else's content. Take it from someone who's blogged for a long time: creating good, compelling content day after day is tough.

Paul finished his blog post with this statement:

The reason I've been writing about existing forms is that I don't know what new forms will appear. But though I can't predict specific winners, I can offer a recipe for recognizing them. When you see something that's taking advantage of new technology to give people something they want that they couldn't have before, you're probably looking at a winner. And when you see something that's merely reacting to new technology in an attempt to preserve some existing source of revenue, you're probably looking at a loser.
From Post-Medium Publishing
Referenced Tue Sep 29 2009 15:38:28 GMT-0600 (MST)

Catering to someone's purpose for being online with a cross-site, contextual application is "taking advantage of new technology to give people something they want that they couldn't have before." While the Kynetx applications that people are building now are simple, they nevertheless represent platforms that support a private audience. More importantly they do it in ways that are extremely useful to the individual who uses them and thus are more likely to be used frequently and shared often.

In fact, Kynetx apps are so powerful and different compared to blogs, newsletters, and the like, that I don't think of the individuals who use them an "audience." Rather, I think of them as a community. Once someone has a app card installed, they've joined the community. The card owner--the platform builder--is responsible for bringing that community together, but if they fail to make the experience relevant and personal or, worse yet, fail to act with integrity, the community will dissolve.

Done right, a Kynetx application has the opportunity to interact with an individual over and over again. What's more these interactions are inherently customer-initiated and thus more likely to be welcomed as long as they continue to provide value. Going back to the "stepping stones" idea, apps work because the app can reduce friction and ease the journey down the path. Again, if it's not useful, then individuals will just opt-out giving app developers the right incentives.

I invite you to find out for yourself about Kynetx by reading my post on the Purpose-centric Web, signing up for a developer account to create your own apps (it's free), and registering for Kynetx Impact, our conference to help you understand and use Kynetx as a new media platform for building your own private audience.

11:21 AM | Comments () | Recommend This | Print This

September 29, 2009

The Futility of Positively Identifying Commenters

google in china

Image by El Tipo Gráfico via Flickr

A recent NY Times article discusses the Chinese order for Web sites to register and post comments using their true identities. Of course, in a totalitarian regime (are we calling China that these days?) identity is a tool that the state uses to control dissent and it's clear that's what's behind this.

This article caught my attention because of the attention that SideWiki has been getting this week. John Gillmore said "The Net interprets censorship as damage and routes around it." SideWiki is an example of how what China's attempting is ultimately going to fail. Of course, China might put pressure on Google and get SideWiki limited in some way inside China, or even just block it. But China's never going to be able to block all the ways that people can link up comments and news.

9:44 AM | Comments () | Recommend This | Print This

Usability Study at HP

Canon PowerShot A590 IS Sample - Hewlett-Packa...

Image by włodi via Flickr

A friend of mine, Esther Sumner, is running a usability lab at HP in American Fork, Utah the end of this week or beginning of next. She's looking for participants who are business owners who will come and review their product for 1 hour. In exchange you'll get a $50 American Express gift card. No technical skills required.

If you're interested but not a business owner, you may still qualify for a $25 American Express gift card to participate in a lab. if you work closely with a business owner (e.g., admin, someone planning to start a business, spouse of a business owner). If you're interested, contact Esther at usability@hp.com.

8:25 AM | Comments () | Recommend This | Print This

September 28, 2009

You're Invited to Kynetx Impact

Kynetx Logo

I've recently been writing about my thoughts on building a purpose-centric web and how SideWiki illuminates the client-centric focus of a purpose-based Web. If you've read through these (yeah, they're long) then you'll know that Kynetx is in the business of helping developers build purpose-centric applications that run in the browser.

If that interests you at all, I'd like to invite you to sign up for Kynetx Impact, our conference for bringing together anyone interested in the idea of a purpose-centric Web and building applications for it. Doc Searls will be giving the keynote and I'll be speaking about the purpose-based Web. Craig Burton will be closing the conference with his analysis of what this all means. In between will be tracks for developers and on business and product development in this space.

The conference is November 18th and 19th at the Novell Open Source Technology Center in Provo Utah. Please register online. The cost is $45, but if you send me a note, I'd be happy to send you a discount code.

Please take a minute and sign up now. I'd love to have you there.

9:51 AM | Comments () | Recommend This | Print This

September 24, 2009

Claiming My Right to a Purpose-Centric Web: SideWiki

Image representing Google Toolbar as depicted ...

Image via CrunchBase

Yesterday Google released a small project called SideWiki. SideWiki, enabled by the Google Toolbar, allows people to write commentary about Web pages and see the comments that other have left. The service is opt-in: people can install the toolbar or not and even when it's there, turn SideWiki off if they don't want to see it. But it's not opt-in for a site--you can comment on any page without the permission of the owner.

The reaction has been interesting. I've seen tweets from people about how they thought it was wrong for people to be able to comment on a Web site (likening it to graffiti or defacement). Dave Winer asked "what if I don't want it on my site?" That's a curious sentiment because it's not on your site. Rather it's about your site. What makes it difficult to accept is that the browser is displaying the comments alongside the page itself.

I don't want to debate the particulars of SideWiki itself. And there's plenty to discuss: Why is this better or worse than comments on the site? Is it OK for commentary to be split and "put behind a hedge." Will it become a SPAM machine? Is Google the right player to control this. And so on.

The real issue is larger than any of that: do people have the right to control how Web content is displayed in their browser? I'm intensely interested in the whole idea of client-side Web augmentation or modification. If you read my blog post from Tuesday on Building the Purpose Centric Web, you'll know that I'm an advocate of the techniques Google is using and more. I believe that people will get more from the Web when client-side tools that manipulate Web sites to the individual's purpose are widely and freely available. A purpose-centric Web requires client-side management of Web sites. SideWiki is a mild example of this.

The reaction that "I own this site and you're defacing it" is rooted in the location metaphor of the Web. Purpose-centric activities don't do away with the idea that Web sites are things that people and organizations own and control. But it's silly to think of Web sites the same way we do land. I'm not trespassing when I use HTTP to GET the content of a Web page and I'm not defacing that content when I modify it--in my own browser--to more closely fit my purpose.

For a different example, consider Adaptive Blue's Glue. Glue is a browser add-on that alerts you to what your friends are saying about movies, TV shows, and so on. The way it works, and even what it allows, are not all that different from SideWiki. I think this is just the tip of the iceberg. There are thousands of interesting things to do on the client-side that mash-up, remix, annotate, augment, and just plain modify Web content (not the sites themselves) in the browser.

I understand why people who have cut their teeth and made their living creating Web sites would object when people start to mess with Web content inside the browser. The reasoning goes something like: "I worked hard to create this and want it to be just so and now you're changing it!" But it's ironic when people who've fought against that logic when the RIAA and MPAA used it in support of an outdated business model, apply that same reasoning to the Web.

With that, let me state something unequivocally:

I claim the right to mash-up, remix, annotate, augment, and otherwise modify Web content for my purposes in my browser using any tool I choose and I extend to everyone else that same privilege.

You may not like what people do with your Web content. We can debate the business model or ethics of specific applications of client-side technologies. But don't threaten my right to purpose-centric Web.

8:50 AM | Comments () | Recommend This | Print This

September 22, 2009

The Forgotten Edge: Building a Purpose-Centric Web

Abstract Since it's inception, the primary metaphor of the Web has been one of location. By framing the Web as a collection of places, we have necessarily caused Web development to focus on servers. But people don't get online to go to a server. They get online to get something done--achieve a purpose. This talk argues that focusing on purpose allows us to build Web applications that more closely align with what people want from the Web. Focusing on purpose will require a move to more intelligent client-side applications.

Technological development in the area of Internet identity over the last several years has left us well prepared for this move to the client. In particular, we argue that identity selectors are a great platform for building these purpose-managing client-site applications. Coupled with a rise in social networking tools that give individuals greater voice in conversations with the organizations that server them, these advances promise a Web that is less focused on location and more focused on purpose. We conclude with six rules for a purpose-centric Web and a call for others to join in helping build it.

Introduction

David Weinberger (left) and Doc Searls In 2003, Doc Searls and David Weinberger wrote an essay called World of Ends. The thesis was simple: "the Net is a world of ends. You're at one end, and everybody and everything else are at the other ends." This idea that the ends are what is important online is critical to understanding where the value lies and how to best add value to the 'Net.

From 1993, when the Web was brand-new, to the present we have largely focused our attention on one type of end, or one edge, if you will: the server. Browsers have been seen as a given, something that is and works. To create value online, most people have worked at the server. This has created a pat formula for online success, repeated over and over:

  • Get a good address
  • Build a killer site with great content
  • Advertise to get traffic
  • Make the site sticky
  • Convert traffic into sales or eyeballs
  • Rinse and repeat...

There's nothing wrong with this, of course. Working at the server has created an amazing array of Web sites and services that simply astound me.

But I believe there is significant value to be created at the edge of the network we call the browser. And that for the most part we've ignored it. Browsers have gotten flashier and fancier over the years, but for the most part their job is simple:

  1. Go to a URL
  2. Get the content
  3. Render the content properly

That's not to discount the tremendous and enormously fertile world of browser extensions, but in truth, only Firefox has made browser extensions easy enough to create a significant extension ecosystem. Building extensions for Internet Explorer or Safari is not for the faint of heart and requires real expertise.

Our focus on the server is related to the primary metaphor we use for understanding the Web: location. We "go" to Web "sites" using an "address." The first decade of the Web has been characterized as a "land rush."

The problem with ignoring most of the endpoints on the Web is that it leads Web application developers to force fit things that would be better done on the client using a server instead. Portals are one example. Portals try to pull multiple applications and data together into one place to make it more convenient for people to use. Travel portals are a good example.

But portals are rarely successful in really giving people what they want. The answer isn't better personalization. They answer is to move that functionality to the client.

The location metaphor isn't bad; after all, servers are places. The problem is that it doesn't go far enough. I believe that we can extend the location metaphor in a way that gives us a new way of thinking about how to solve people's problems.

The Purpose-Centric Web

Most people don't fire up their browser to go somewhere, rather they want to accomplish something. While going places is part of finishing a task, it's not enough to just go someplace unless that one place happens to have everything you need. More often than not, online sessions consist of visits to multiple Web sites over time. Consequently, a better metaphor for building Web applications would be purpose.

As an example, consider the purpose of "finding a book to read." Finding a book is not necessarily the same as going to Amazons or Borders. Those are great sites to browse for books, read reviews, and buy books; but, what if I my preference is to check the book out from my local library when it's available? Right now, that requires that I visit at least two sites: Amazon and my local library. I connect those experiences together by conducting the same search on each and then collecting the data.

"Finding a book to read" is a relatively simple task compared to other tasks that people do online everyday. A more complex example is "planning a vacation." People spend weeks and visit dozens of Web sites planning their vacations online. It's rarely the case that one Web site provides them with everything they need. That is simple counter to the distributed nature of the Web itself.

Let's return to the task of finding a book and consider how it might be made simpler. The browser can see both Amazon and my library's Web site. A tool, on my browser, could modify Amazon to inform me when I'm looking at a book that's available at the library like so:

As this video shows, an intelligent, adaptable browser helps people achieve their purpose rather than simply taking them to a Web site.

A purpose-centric metaphor supports a different intention than a location-based metaphor. The following table, which we'll expand later, shows this:

Intention
Locationgo and get
Purposedo and know

In a location-based Web we "go and get" whereas in a purpose-centric web we "do and know."

Identity on the Web

Back in 1993, I was part of an email list that was discussing ecommerce (although it wasn't yet called that). There were two things that people really wanted: a way to take credit cards securely and a way to create a shopping cart. The first was solved with the emergence of SSL. The second required cookies.

HTTP is a stateless protocol, meaning that each request is processed independently of any previous requests. That's great for returning pages of text, but makes building things like shopping carts--which are by definition stateful--difficult. Cookies are tokens sent by the server and stored by the browser to be returned to the server with any subsequent requests to that same Web site. They were the answer to build shopping carts and other applications that require intra-site state like authentication systems.

Because cookies were good enough for most things people wanted to do on the location-based Web, there wasn't much interest in identity systems that went beyond cookies. But cookies have some significant limitations. Most relevant to this discussion: browsers are designed to only share cookies with the site that sent them. This ensures a level of privacy and security, but makes it impossible to use cookies as the basis for a purpose-centric Web. At best, they could only be used when sites have decide to cooperate beforehand.

Kim Cameron These limitations caused people like Kim Cameron at Microsoft to look beyond server-based solutions and decide that a special purpose client was needed. Kim invented an identity system called "information cards" based on a card-metaphor--something very familiar to people--that uses a special client called a "selector."

Here's a screenshot of the AzigoLite selector:

AzigoLite card selector

Each of the cards in this selector have an "action" attached to them, making them into client-side Web applications that have the ability to coordinate activities at multiple sites. Of course, because it's just a card in the selector, if the person doesn't like what the card is doing, it's easy enough to delete it or turn it off.

Card selectors provide some significant features for the purpose-centric Web:

  • selectors provide real, cryptographically sound identity
  • the selector model provides protection for personally identifying information
  • selectors provides smart client that can be used to message user in a secure way
  • Strong identity model provides foundation for certification and reputation of cards and their associated applications

Strong, cross-site identity, like that provided by a card selector, running on a client, enables purpose-centric browsing. We can add this our matrix:

IntentionIdentity
Locationgo and getcookies
Purposedo and knowselectors

A New Communications Model

Moving to a purpose-centric Web will allow us to change how organizations have come to relate to individuals online. In the traditional customer communications model--supported by advertising and CRM systems--organizations broadcast information to individuals in a top-down manner.

Traditional organizational communications model

Over the last century, this form of communication has gotten less and less personal while at the same time businesses tried to make it more and more targeted. With the Internet, this has only gotten worse as businesses put ads on Web sites and turned to ever more invasive tactics to increase the click thru rate. The result is ironic: the closer companies get with demographics, the more their customers resent it and retreat.

Companies have to rely on demographics when identity is missing. But as we've seen, new technologies are adding an identity layer to the Web. An identity layer provides an opportunity to flip the traditional demographics-based model on it's head. In the new personal communications model, information flows from the individual to the organization. These flows are owned and initiated by the individual.

The emerging personal communications model

Why would people do this? Simple: to increase their choice and the level of service they receive. In fact they already do. When someone posts information about their interactions with companies on Facebook, MySpace, Twitter, or a blog, they are actively engaging that organization and sending information through a personally controlled channel that smart businesses will capitalize on. The rise of Web-site independent identity will only accelerate this trend toward active participation.

This is an important component of the purpose-centric Web because only the individual can tell us their intention or purpose. A purpose-centric Web requires active participation by individuals. We can add this to our chart:

IntentionIdentityInformation
Locationgo and getcookiesorganizational
Purposedo and knowselectorspersonal

Note: See Craig Burton's essay on The Inverted Pyramid for more on this idea.

Rules for a Purpose-Centric Web

There are a number of important principles, or rules, that we need to remember if we are to capitalize on purpose:

  1. Purpose matters more than location. To an individual using the Web, giving them a place to go only goes so far in helping the accomplish their goals. We provide significant, additional value when we, instead, help them achieve their purpose. Many Web sites have recognized this, but few have really achieved it because of our focus on servers.
  2. Freedom of choice matters more than controlling the user. The traditional way companies have approached customers is as "things" to be "owned," "controlled," "locked up," and "targeted." In the emerging model, individuals have considerable power. Wielding that power will level the playing field. Companies that recognize this power shift and work within it are more likely to build customer loyalty.
  3. Context matters more than content. Content is dead--or at least not a very good way to differentiate. Just ask the newspapers. But putting content in context, as in the library lookup example I give in a preceding paragraph, makes it more actionable and this more useful and valuable.
  4. Relationships matter more than transactions. The lifetime value of a customer is obviously much greater than any single transaction--if you can get them to come back. In a world where goods have been commoditized and a cheaper price is only a Google search away, building relationships matters more than ever. I talk to people all the time to shop preferentially at Amazon, even when it's more expensive, because it's familiar, convenient, and has their trust.
  5. Loyalty matters more than "time on site." Most of the traditional Web site KPIs are structured around the traditional, broadcast-style communications model and heavily influenced by the location metaphor of the Web. Companies spend money on ads with microscopic click-thru rates. They spend money to make their sites "sticky" to entice the click-thrus to increase "time on site." Finally, we measure conversion that represents a fraction of a fraction of a fraction of the people who originally were shown an offer. Conversely, if you offer people a way to achieve a purpose on the client, you have started to build a relationship that can be nurtured to create real customer loyalty.
  6. Individuals matter more than demograpics. Knowing that I'm a white, male from Utah who drives a truck is better than nothing. But it's much better to know that right now, I'm in a hotel in Vegas and really need an iPhone charging cable and that I'm willing to pay for someone to get it to me. Under the right circumstances, individuals will freely share relevant information making demographic data less and less valuable to companies ready to work with customers rather than shout at them and lock them up.

Kynetx and Purpose-Centric Web Applications

Kynetx is an infrastructure provider with the goal of making purpose-centric applications easier to build. Kynetx works at the client-site of the Web thus enabling applications that work across multiple Web sites.

Here's how the Amazon Library Lookup example we showed earlier is done:

How Kynetx works
  1. The user visits Amazon
  2. A browser extension queries the card selector to determine if any of the installed cards are relevant to Amazon
  3. If so, a request is sent to the Kynetx Network Service (KNS) execute the Kynetx ruleset associated with that card (given in the card's metadata)
  4. KNS returns custom Javascript for that request which modifies the page DOM and thus rewrites tha page to show the notification

Kynetx bridges the individual silos represented by Amazon and the Minute Man Library to create an integrated experience for the user that more closely aligns with the user's purpose: find a book to read.

With any new platform, security is a concern. This is especially true on the client. Kynetx recognizes this and is working hard to address it. We don't have all the answers, but believe that a combination of identity selectors on the client and rules in the cloud provide numerous hooks for building an effective security model that protects users while giving them the advantages of client-side applications.

A Call to Action

The client is on the Web's forgotten edge--largely ignored by developers. Web sites are locations--useful in accomplishing a goal, but unable to provide a complete experience. But by centering development at the client, developers can build applications that span multiple Web sites and help people with purpose. If information card selectors are to serve as a platform for this purpose-centric Web, there is still a few missing pieces.

Some of the missing piece are things like standards that will allow everyone to play in this purpose-centric Web. Those are coming.

The most notable "missing piece" is that the Microsoft CardSpace selector does not yet support purpose-centric Web applications. If our vision of a purpose-centric Web is to become a reality, selectors must become ubiquitous and users need choice. The Azigo selector can be used as a foundation for controlling purpose-centric client-side applications. Users would be well served if the CardSpace selector were similarly enabled. We call on Microsoft to be part of this effort.

If you're interested in exploring Kynetx and building your own rules, sign up for a develop account. They're free.

This essay presents the material from the slides from my keynote speech at Digital Identity World given on September 15, 2009 in Las Vegas, NV. The slides from my talk are available online (PDF).

7:51 AM | Comments () | Recommend This | Print This

September 12, 2009

Utah Open Source Conference and the CTO Breakfast

CTo Breakfast

The Utah Open Source conference is a gathering of over 400 open source supporters from Utah and surrounding states. It's happening on October 8-10th at the Miller Campus of the Salt Lake Community College. This is a great event. This year's keynotes include:

  • Daren Brabham of the University of Utah will speak on Crowdsourcing on Thursday, October 8
  • Stormy Peters of the GNOME Foundation will discuss 'Would you do it again for free?' on Friday, October 9
  • Dave McAllister of Adobe explains 'Big Company, Open Choice: Why Adobe is becoming Open' on Saturday, October 10

In addition, there will be over 50 other presentations including one by me on using Cobbler and Puppet to automate infrastructure (more on that later).

The CTO Breakfast will be held on October 8th at the Miller Campus in conjunction with the conference. This will be instead of our regularly scheduled September breakfast which was scheduled for September 24th. I hope you can make it.

If you're interested in attending the conference, early bird registration is underway until Sept 19th. Whether you attend the conference or not, the CTO Breakfast is free, like always and open to all. So get it on your calendar now!

2:45 PM | Comments () | Recommend This | Print This

September 11, 2009

Space-Time-Travel Data Changing the World Now

Jeff Jonas, who is one of the world's premiere data analysis experts writes:

Mobile devices in America are generating something like 600 billion geo-spatially tagged transactions per day. Every call, text message, email and data transfer handled by your mobile device creates a transaction with your space-time coordinate (to roughly 60 meters accuracy if there are three cell towers in range), whether you have GPS or not. Got a Blackberry? Every few minutes, it sends a heartbeat, creating a transaction whether you are using the phone or not. If the device is GPS-enabled and you're using a location-based service your location is accurate to somewhere between 10 and 30 meters. Using Wi-Fi? It is accurate below 10 meters.

You know your cell provider has access to this data, but so do others. Jonas reports that they routinely sell it to third parties. Even with the data anonymoized, it's not a big step to either riangulate the data to you or even just collect information from you during a transaction links it to the real you.

I'm not writing this to scare you for your privacy--although it may to that--but simply to try to wrap my head around the shere volume of data and the ramifications of what having this kind of dta on virtually every person means. Jonas gives the following examples of how this data might be used to provide context (my word, not his) to your everyday interactions:

Tuesday afternoon your [free] Gmail account advises you that your buddy Ken is going to be 15 minutes late to the pool hall this coming Thursday, unless he leaves work 15 minutes early ... which he has only done twice in seven years. Brilliant!

Your Starbucks drink of choice (a grande vanilla soy latte in my case) is handed to you the instant you pull up, and you did not call ahead nor did they ask. Priceless!

When powerful analytics commingle space-time-travel data with tertiary data, the world we live in will fundamentally change. Organizations and citizens alike will operate with substantially more efficiency. There will be less carbon emissions, increased longevity, and fewer deaths.

Jeff goes on to list some good news/bad news couplets regarding this development. The bottom line is that we're fast entering a world where our every movement can be analyzed for purposes good, bad, commercial, or whatever.

In his book The Transparent Society: Will Technology Force Us to Choose Between Privacy and Freedom?, David Brin makes the assumption that the future will technically allow virutally constant surviellance of nearly everyone and then asks the pointed question: in such a future do we want to allow only select groups access to that surviellance, or everyone? He makes a brilliant case that the only way to preserve real freedom is to allow everyone access to all the data. You'd better be prepared to make that choice because the future is now.

8:03 AM | Comments () | Recommend This | Print This

September 9, 2009

Conditional Expressions and Explicit Logging

Kynetx Logo

This afternoon I released build 329 of Kynetx Network Services (KNS). This build includes two new features for the Kynetx Rule Language (KRL): explicit logging and conditional expressions.

Explicit logging allows developers to place information in the ruleset log when a ruleset runs. For example, the following example would place a string with the value of a variable named query in the log if the rule fired:

fired {
  log "query:"+query
}
Explicit logging is useful for recording information about the rule environment in the logs for later analysis.

Conditional expressions allow expressions to take on different values depending on the results of a predicate evaluation. You can use conditional expressions as part of any expression anywhere in the language. Here's a simple example:

pre {
  z = (x > y) => y | y + 3; 
} 

Conditional expressions nest nicely. Here's a longer example:

month = (m eq "01") => "January" |
        (m eq "02") => "February" |
        (m eq "03") => "March" |
        (m eq "04") => "April" |
        (m eq "05") => "May" |
        (m eq "06") => "June" |
        (m eq "07") => "July" |
        (m eq "08") => "August" |
        (m eq "09") => "September" |
        (m eq "10") => "October" |
        (m eq "11") => "November" |
                       "December"

In order to make the parser more efficient (and avoid hoops to avoid left recursion in the BNF) most predicate expressions require parentheses. The only exceptions are standalone intrinsic predicates:

pre {
  weather = cloudy() => "cloudy" | "sunny"
}

For as simple as they are, conditional expressions introduce significat expressive power to KRL. I think they'll come in handy in lots of situations.

8:53 PM | Comments () | Recommend This | Print This

On Health Care

An example of California hospital signage

Image via Wikipedia

Steve Gillmor invited me on the new Gillmor Gang at Building 43 yesterday. The topic was health care. I enjoyed the discussion which even included live music. I've avoided posting anything here about my thoughts on the health care debate, but since I've said them on the Gillmor Gang, I thought I'd better get them out in writing too.

First things first:

  • We're long past the point where keeping the current sytem is an option. It's unsustainable and broken. We need to reform the health care system.
  • The current employer supported model doesn't work for small businesses, the self employed, or the unemployed and doesn't do anything for our country's innovative competitiveness.

So, reform we must, but what kind of reform?

Any economic system, our current health care system and the proposed ones included, is a mechanism for rationing scarce goods. Heath care is a scarce good and so it must be rationed in some manner. The quesion is how will we ration it and who will make the choices? When something is rationed, by definition, someone won't get all they want or even need. Let me emphasize again: this isn't an argument for the current model--it's broken and is rationing health care irrationally.

At my core, I don't trust or want the government making those rationing decisions. Not trusting the government to ration properly doesn't make me incompassionate or evil. Trusting the government to do it doesn't make you good or moral. Government rationing isn't the definition of compassion & goodness.

And I don't buy the argument that "everyone else does it this way" means that it's right for America or even the best way to do it period. How many of the wonder drugs of the last two decades were developed in countries with government-run and managed health care systems? I thought so. We may be losing more than we intend by making that switch.

We have a sort of universal coverage now: anyone can drop by an emergency room and get treated--at great expense to the rest of us. The problem with this kind of "universal" coverage is that it's expensive, unevenly administered, and often too late or too little. We have to do better than this.

But the choice isn't between a government-run health care system and a let-the-poor-die-in-the-streets system either. The current system is heavily influenced by government--perhaps too much, but most certainly in the wrong ways. Any realist would conclude that we're going to have the government involved in health care. But more to the point: if the current system is broken (and it is) we broke it. That means we can fix it.

Lastly, before I give you my suggestions, as Rob La Gesse pointed out yesterday, any engineer knows that making large wholesale changes to complex open-loop dynamic systems (like the health care system) is a sure way to take a broken system and make it worse. If you're a programmer, you'd never program like that. We don't have to make public policy like that either. Refactoring 18% of the economy with one large bill is just plain nuts.

So, with that, here are a few changes we could make that I believe would go a long way toward rationalizing the health care system and give us real data about what the next steps should be:

  • Eliminate the tie between employment and insurance - having special rights related to insurability tied to whether or not someone has a job is just insane--not to mention a disincentive to innovation.
  • Eliminate pre-existing conditions - this is a common way for people who could otherwise have insurance to be denied insurance for the things they most need insurance for.
  • No rejections - everybody should get coverage.
  • Transparency - people should know what decisions are being made about their coverage, their plans, by who, and for what reasons.
  • Tax parity for individuals - either give everyone the same tax breaks or elimnate them for everyone when it comes to buying insurance and paying for health care expenses.
  • Rational incentives - let's create a system where doctors are reimbursed for care rather than procedures.
  • Portability (between jobs, plans, & states) - insurance that isn't portable between jobs, states, or different plans creates regional monopolies and this reduces competitiveness.
  • Build payer-payee networks - Health information networks can help reduce cost and increase transparency. The law should actively require patient access to the health data about them on these networks in clear, easy-to-understand terms.
  • Promote and incent HSAs combined with high deductable insurance plans - I've known people who do this and I think it holds great promise if people start it when they're young. It doesn't help those already in trouble with health care costs or health problems.

I don't pretend to think that these suggestions will solve the whole problem, but I think they go a long way toward properly setting incentives and getting more people covered. I also don't claim to have all the answers. There are probably good, simple ideas not on my list that someone who knows more about the health care industry than I could propose.

What you didn't see on this list is a requirement that everyone pay the same price (as some of my friends have advocated). There's a good reason for that. Go back to my point that any economic system is used to ration scarce goods. If everyone pays the same price, then you're not using price to ration health care and consequently you're using something else (time to live--literally, influence, rules, etc.).

This is the thing that those who advocate one price for all fail to be specific about. If everyone pays the same price, then there's no incentive for individuals to limit health care consumption. Since there's not an unlimited supply, something else will have to limit consumption. If you tell me what your plan is for limiting consumption, then I'll tell you whether or not I agree with it, but to simple say "one price for all" without fixing the obvious problem of over-consumption is not intellectually honest.

Having said that, I need to point out that this is one of the greatest failings of the health care system we've built to this point: health care is rationed in an irrational way: by whether or not you have a job, by whether or not you had insurance before, and by arbitrary rulings by unaccountable bureaucracies inside health insurance companies.

The proposals I've made are aimed at creating a system that is more fair and has incentives properly aligned with public sentiment. I'm sure I got some of them wrong. I'm sure you don't agree with me. So, feel free to write your own blog post about what your plan is. Be sure to give specifics about how your plan will ration health care.

8:42 AM | Comments () | Recommend This | Print This

September 8, 2009

A Virtual Printer for OS X

Mac OS X Snow Leopard

Image by Aeternitas. via Flickr

A few weeks ago I discovered the CUPS-PDF package for OS X. This package installs a virtual printer in OS X that prints PDF files to a directory. Why do this when you can "Save as PDF"? Because hitting one button is easier that hitting severa and selecting a directory. For 90% of the PDF printing I do, it's exactly what I need and for the other 10% it's no more work than the standard way.

When I discovered it, I tweeted something about it. Then I upgraded to Snow Leopard and it stopped working and I couldn't even remember the name of the thing. I had to do a little research to find the information I was after, so in an effort to not lose it again, I decided to blog it.

If you install the current package (2.4.6.1) you'll need to change a few things to make it work under Snow Leopard (via this Mac OS X Hint):

  • Change the permission so the executable to 700:
    sudo chmod 700 /usr/libexec/cups/backend/cups-pdf
    
    It should also be owned by root and in the group wheel. At this point, when you try to add the printer, it should show up as CUPS-PDF and you should be able to add it.
  • Because of the new application sandboxes in Snow Leopard, you won't be able to write to the default location (a folder in your HOME directory). So, you'll need to change the configuration to print somewhere else (like /var/spool/cups-pdf). In the file /etc/cups/cups-pdf.conf, change Out ${HOME}/Desktop/cups-pdf/ to Out /var/spool/cups-pdf/${USER}
  • I don't like having to navigate into the /var directory with Finder (not convinient), so I created an alias on my Desktop to this folder. There might be a better way to do it, but I printed something, moved the folder that got created (Out /var/spool/cups-pdf/${USER}) to my Desktop, created an alias, and then moved it back. Just using ln from the command line didn't create anything that Finder recognized.

9:10 PM | Comments () | Recommend This | Print This

What Would Google Do: The Slideshow

Here's a slideshow that does a nice job of summarizing Jeff Jarvis' book What Would Google Do?

The book is worth reading, but this presentation hits the high points.

8:01 AM | Comments () | Recommend This | Print This

September 2, 2009

Persistent Variables in KRL: Threading Sites Together

Kynetx Logo

Yesterday I released build 325 of Kynetx Network Services (KNS) which includes a significant addition to the feature set of Kynetx Rule Language (KRL): persistent variables. Persistent variables allow KRL rulesets to store and react to data over multiple visits. This data isn't personally identifying information, but rather the kind of information that makes writing intelligent Web applications easier. Here's an example: an information box placed on a Web site can now have a "don't show this to me again" check box and act accordingly.

Persistent variables, or just persistents, will ultimately come in two flavors:

  • Entity variables store persistent data about an entity. Think "user, browser, device, etc."
  • Application variables store persistent data about an application, or ruleset. Think "class variable."

In this build we're only supporting entity variables. Application variables will follow later.

All persistent variables are one of three type: flags, counters, or trails. We may add others in the future.

  • Flags store boolean data and can be set or cleared.
  • Counters store integer data and can be initialized, incremented, and decremented.
  • Trails store places in a 20 place stack. You can think of places as URLs, although trails allow you to store anything. Trails can be marked (push a place on the stack) and places can be forgotten (removing them from the trail).

These mutations to the persistent data can occur as a result of rule firing (or not) in the rule's postlude or as the result of user action on the page in the rule's callback specification.

In addition to the mutations of persistents indicated in the preceding description, entity variables can be referenced in KRL expressions and tested in predicates. For example, the following action will fire when the persistent variable ent:archive_pages is greater than 3:

if ent:archive_pages > 3 then
   notify(...)

There are also some special predicates available for persistents. Persistent flags and counters can also be tested with an associated timeframe. For example, the following action will fire when persisent variable ent:archive_pages is greater than 3 and the last time it as set was within the last 2 hours:

if ent:archive_pages > 3 within 2 hours then
   notify(...)
The value to test against and the time value are both KRL expressions. The timeframe (hours in the example) can be seconds, minutes, and so on through years. This reflects our belief that its often useful to know that action has been taken within a certain timeframe.

Persistent trails can be tested using the seen predicate. There are two forms:

  • The first form asks whether a regular expression has been seen within an optional timeframe (specified in the same way as timeframes for counters and flags). So you can say:
    if seen "/archive/2006" in ent:my_trail then 
       notify(...)
    
    or
    if seen "/archive/2006" in ent:my_trail within 3 days then 
       notify(...)
    
    The first argument is a string that is interpreted as a regular expression.
  • The second form tests whether a place in a trail matching the first regular expression comes before or after a place in the same trail matching a second regular expression. This example
    if seen "/archive/2006" 
        before "/archive/2007" in ent:my_trail then 
      notify(...)
    
    would fire the action when a place matching the regular expression "/archive/2006" was placed on the trail before a place matching the regular expression "/archive/2007".

Complete documentation for persistents is available on the Kynetx developer's site.

Here's how you could use persistents to create a notification that has a "don't show this to me again" checkbox:

rule show_note is active {
  select using "www.windley.com/cto_forum" setting ()

  pre {
    h = <<
Welcome to the CTO Breakfast page!!!<br/>
<input id="KOBJ_clear" type="checkbox" 
         name="option1" value="Clear">Don't show again
 >>
  }

  if not ent:dont_show then
    notify("Welcome", h)
        with sticky = true
			
  callbacks {
    failure {
      change id="KOBJ_clear" triggers set ent:dont_show
    }
  }
}

This shows a notification as long as the entity persistent ent:dont_show is false (or undefined). It also gives a persistent statement (set ent:dont_show) to be triggered whenever the user changes an element with the ID KOBJ_clear.

We could put another rule in the ruleset to clear the flag:

rule  clear_notice is active {
   select using "www.kynetx.com" setting ()

   notify("Notice", 
        "I'm clearing the notice flag for www.windley.com")

   fired {
      clear ent:dont_show
   }
}

This clears the ent:dont_show flag whenever this rule fires, which it always will as long as the selection statement is matched since the action has no conditional. So in this example, you'd see the notification on the CTO Breakfast page until you checked the box, then you'd never see them again unless you visited the Kynetx web site. If you did, the flag would be cleared and you'd begin getting the notifications again.

This example ruleset is a good example of the abstractive power of KRL and the cross-site capbilities of the KNS system. Clearly you could do something like this with Javascript, PHP, or other systems, but it would take more code and the purpose would not be as clear. Moreover, doing it across multiple Web sites would require the cooperation of those Web sites in some way, whereas with KNS, the client is controlling the cross-site capabilites--and it's all built-in.

In addition to adding persistents, there were a few other changes:

  • The KRL runtime is now based on jQuery 1.3.2. The previous runtime was based on 1.2.6. The complete power of the jQuery system is available to KRL developers who dip below the abstraction layer provided by the language and write their own Javascript.
  • We added a page:url datasource to return information about the calling page's URL such as domain name, path, query string, etc. This could previously be done using the replace operator, but seemed like such a likely use case that we built it in to make it easy.
  • We added a page:param datasource to return information about page parameters (set in the KNS_config object by the endpoint). This data has previously been available via the page:env datasource but that availability will be curtailed in future releases for security reasons.

If any of this looks interesting to you, please signup for a Kynetx developer's account--it's free and come to our developer's conference in November. We'll show you how to easily create context-aware, cross-site Web applications that do things server-side solutions can't even imagine.

4:46 PM | Comments () | Recommend This | Print This

IIW IX Is Coming Up! Register and Spread the Word

IIW2009 Registration banner

The Ninth Semianual Internet Identity Workshop (IIW IX) is coming up in about 9 weeks: November 3-5 (Tuesday to Thursday) in Mountain View California at the Computer History Museum. It's time to register and to help us spread the word about the event.

We are excited about all the developments in the industry with protocol evolution in the social web space AND larger and larger scale deployments of open identity technologies including OpenID and Information Cards. There will be much to talk about at this fall's event.

We have low rates for early bird registration until September 16 then prices go up:

  • $274 for regular tickets
  • $148 for independents
  • $50 for students

Special this year we have the "BIG" ticket for those can expense $1000 (but can't convince their marketing department to sponsor). This is a GREAT way to support IIW!

We need to get 75 people registered by September 16 to make a final confirmation for our conference space at the Computer History Museum. All those who book early will get a special thanks. If you can register now, please do.

Please Help Us Promote IIW IX Here are some ways you can help.

  1. Invite people you know who would be good contributors and could learn from our discussions. Give them your reasons for coming (this can also be part of your blog post about the event).
  2. Put our logo on your blog or website. Then let your audience know and tweet about the change too. We have all the logo's and HTML for you here. They look sharp.
  3. Sign up for a date to blog about IIW in the next 3 weeks. We would like you to express what you have gotten out of past IIW's, what industry developments you are looking forward to discussing at this upcoming one, and reasons why people should attend. Here is the schedule you can add yourself and let Kaliya know the date you will be blogging. She will also remind you.
  4. Follow us on Twitter @idworkshop - and Tweet about the event.

This is going to be another great event and we're excited to have you come. See you in November.

12:31 PM | Comments () | Recommend This | Print This

September 1, 2009

Shift Index, Intense Competition, and Continual Innovation

John Hagel

Image by Joi via Flickr

This morning, I was listening to John Hagel talk to Moira Gunn on IT Conversations. The topic was a recent report he, John Seely Brown, and Lang Davison wrote called the Shift Index (PDF).

They spoke about how the Internet and computers are different kinds of technological change than, say, TV. TV wasn't a tool anyone could use. Computers are--and people do. Blogs, twitter, and social networks are examples of that. The result is constant change leading to intense competition.

Moira talked about how one of her grad students has a little Web business that generates $4K per month or so. He operates globally for a less than $50K business. He also has competition: when he adds a feature, his comeition quickly follows suit.

This got me thinking that the traditional model for entrepreneurs may be changing. The traditional model is that there are people who are good at starting things and people who are good at running them and the intersection of those two sets is fairly small. That may change as the need fo continual innovation increases. We may see more companies stay small(er) and focus on innovation and meeting the demands of increasingly intense competitive pressure.

11:10 AM | Comments () | Recommend This | Print This