« November 2010 | Main | January 2011 »

December 29, 2010

Endpoint: What Does it Mean?

I'm trying to determine the effectiveness of a bit of nomenclature. You can help me by taking the following poll:

3:54 PM | Comments () | Recommend This | Print This

December 28, 2010

Streams of Micromessages: Building the Live Web

Steve Ballmer

Steve Gillmor recently described a breakfast meeting Micorsoft's Ballmer had with Twitter's Costolo, it's timing, and--more interesting--what it means called breakfast with Twtter. The point of the article is that Microsoft's empire is built on a crumbling foundation that has at it's very base "Outlook." Outlook is vulnerable because it's not real-time. Microsoft's efforts to bring real-time into Outlook have largely failed. Here's Gillmor's words:

For all the power and money Ballmer commands at Microsoft, he faces a serious vulnerability at the heart of his Windows/Office stack. In a word: Outlook. If Outlook goes, Office goes. If Office goes, who needs Windows? If Windows goes, something replaces it. Whether it's Chrome OS or iOS or even Android, that something would be a big big deal. Most likely, it will be all of the above, with a communications layer loosely coupling them together under a stream of micromessages.
From Breakfast with Twitter
Referenced Tue Dec 28 2010 14:46:11 GMT-0700 (MST)

What really caught my eye was this phrase: a communications layer loosely coupling them together under a stream of micromessages. This is music to my ears because it's my song. :) I say "events" rather than "micromessages" but the meaning the same. I believe that the next generation of Internet applications, what I've taken to calling "the live Web" with props to Doc Searls, will be based on contextually correlated events and data. In order for those micromessages to be meaningful, they have to be correlated with each other and with relevant data using a context that's meaningful to the user. Once we do that, applications that seem like science fiction are within our reach today.

I'm in the process of writing a book on all this. Over the next few months, I'll be posting much of the material from the book here to test drive it as I go.

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

December 23, 2010

The Problem with Identity Proofing

As part of settling IIW Europe, I needed to send a wire transfer for $5000 to a company in London. I logged onto my account at my bank and set it all up. This process involved not only logging in with my secure password, but also having a "security code" sent to my phone four times along the way that I needed to type into the Web page to prove I was in possession of my phone--or something: once for setting up the wire account, once for setting up the recipient, once for sending the wire, and once for something else.

Today I got an email from the London company saying the wire didn't arrive, so I went to the bank's Website again only to be told that my username and password were "frozen" and I needed to call an 800 number to fix it. I called the number and they started an identity prooofing process to make sure they were talking to the owner of the account. They asked:

  • My business name
  • The EIN
  • The business address
  • My name
  • Last six of my SSN
  • My address
  • My phone number

Apparently, I got some part of that wrong or it didn't match the profile information I have on file, because the guy on the phone didn't seem happy, so he launched into a "things you should know if you are you" identity proofing process. These services are available from Equifax and Acxiom and maybe others. He asked:

  • Which of the following addresses have you lived at before? I said "none" because I hadn't.
  • Which of the following vehicles have you owned? I answered that one right, I think.
  • Which of the following towns does Tracey Windley own property in? One of the options was "I don't know Tracy Windley" and I picked that.
  • Another question about Tracy Windley. I again said I didn't know Tracy Windley.
  • Which of the following towns does Jill Windley own property in? I saud I don't know Jill Windley.

Well, I failed this one as well apparently because he told me I had to go into a branch and prove to the branch banker that I was really Phil Windley. Apparently, I found out, the wire I sent was rejected, for no knowable reason and that was why my account was frozen. I wasn't notified the wire was rejected and neither the person at the bank or on the phone can give me a reason why it was rejected. Now, I've got the account unfrozen and the wire reissued. But the interesting thing is why the identity proofing failed.

When I said I don't know Tracy and Jill Windley, I was lying because I do know them. They're my cousin's kids. What I couldn't figure out is why I was getting asked where my cousin's kids owned property. But I think I know now. When I moved from Moscow Idaho in 1993, my cousin Paul, who was the Dean of Art and Architecture at the University of Idaho where I was a computer science prof, bought our house. There have been Windleys living at that address for 20 years. But two different families. Apparently that last fact is lost to Acxiom, Equifax, or whoever. They think Tracy and Jill are my kids. And access to my bank account depends on that.

Where does it end? Clearly what banks are doing now to prove identity online is not convenient and doesn't scale. I don't understand why they think solutions like information cards won't be accepted by consumers when they're putting people through what they are. At least Paypal gives me the option of buying a key fob that does one-time passwords. Give me that option at least! Something has to change.

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

December 17, 2010

Readings for December 12, 2010

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

The Kynetx Rule Language has Modules

Apollo 13 Command Module

KRL (Kynetx Rule Language) started out as a fairly small domain specific language for augmenting Web pages. We integrated with several online services (like geolocation, weather, and so on) to make what we were doing simpler to write. Later, as KRL grew, we added more integrations with Web APIs and services like Twitter. We've increased the abstraction capabilities of the language by adding first-class functions.

Lately we've realized that many of the native integrations of external APIs we've done could--and should--be done by developers working in KRL. If only they had a way to encapsulate and share them! Now they do. This week we pushed code that added modules to KRL.

In KRL, any ruleset can be a module. At present, only declarations in the global block are available to the ruleset that uses the module. There are language changes in the works that will allow actions to defined and shared in a module as well. Please stand by, as they say. Not everything in the global block has to be exported, so you can keep things private. Modules can be parametrized and aliased. For details see the module documentation.

Alex Olsen created a nice little demo of modules that I'll share to show how they work. One of the little tools we use to make storing temporary information easier is called StringBin. StringBin allows you to create key-value pairs in the cloud and has a simple API. Alex defined his StringBin module like so (Gist here):

ruleset a369x115 {
  meta {
    name "StringBin Module"
    description <<
      StringBin Module
    >>
    author "AKO"
    logging off

    provide read, write, destroy
    configure using pin = "nopin"
  }

  global {
    datasource write <- "http://api.stringbin.com/1/write?" 
               cachable for 1 second
    datasource read <- "http://api.stringbin.com/1/read?" 
               cachable for 1 second

    write = function(k,v) {
      datasource:write({"pin":pin,"key":k,"value":v})
    }

    read = function(k) {
      datasource:read({"pin":pin,"key":k})
    }

    destroy = function(k) {
      datasource:write({"pin":pin,"key":k,"value":""})
    }
  }
}

The important things to note here are the provide and configure clauses. The provide keyword is followed by a list of names that will be available outside the module. The configure keyword indicates the module parameters and their default values. Alex's module has one parameter, the StringBin pin or developer token and it defaults to "nopin". Note that that datasource declarations are not provided to rulesets using the module and the implementation details are effectively hidden.

You can use this module like so:

meta {
  use module a369x115 alias StringBin 
         with pin = "X9ooUUsrR180MkpxZ2N1M"
}
...

rule write_to_stringbin {
  select when pageview ".*"
  pre {
    stuff = StringBin:write("yellow", "mellow");
  }
...
}

Note: I've cut out large pieces of Alex's example, for the complete sample ruleset that uses his module, see the Gist.

In the preceding code, the module is used by putting a use module clause in the meta block. The use module clause needs a ruleset name and optionally an alias (StringBin in this case) and configuration (setting the pin in this case). Later, the write function from the StringBin module is used to write the value "mellow" to the key "yellow".

Because modules are parametrized and can be aliased, you can use the module multiple times with different parameters. For example, suppose we had two StringBins and we wanted to copy a value out of one into the other. We could accomplish that like so:

meta {
  use module a369x115 alias BinA 
         with pin = "X9ooUUsrR180MkpxZ2N1M"
  use module a369x115 alias BinB 
         with pin = "ada98u0ada0kkdad0a0da"
}
...

rule copy_stringbin {
  select when pageview ".*"
  pre {
    stuffToCopy = BinA:read("yellow");
    results = BinB:write("yellow", stuffToCopy);
  }
...
}

In the preceding code, we've attached to two bins called BinA and BinB and we're reading something out of one and writing to the other.

Parametrized modules provide a convenient way to encapsulate complex behavior and use it over and over again. Now that you don't need language mods to make your API calls all pretty, I'm expecting to see an explosion of APIs that are integrated--via modules--into KRL.

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

December 14, 2010

Starting a High Tech Business: We Believe...

Kynetx Events

I'm the founder and CTO of Kynetx. This series of articles relates my discoveries and feelings about starting a high-tech business. This is the twenty-ninth installment. You may find my efforts instructive. Or you may know a better way---if so, please let me know!

A while back I was pointed to this TED video by Simon Sinek on how great leaders inspire action. The talk is marvelous and is well worth watching. The line I like best: "[Martin Luther King] gave the 'I have a dream' speech, not the 'I have a plan' speech." Here's the primary point:

Every company can explain what they do. Most can explain how they do it, but few explain why. He says:

Let me give you an example. I use Apple because they're easy to understand and everybody gets it. If Apple were like everyone else, a marketing message from them might sound like this. "We make great computers. They're beautifully designed, simple to use and user friendly. Want to buy one?" Neh. And that's how most of us communicate. That's how most marketing is done. That's how most sales are done. And that's how most of us communicate interpersonally. We say what we do, we say how we're different or how we're better and we expect some sort of a behavior, a purchase, a vote, something like that. Here's our new law firm. We have the best lawyers with the biggest clients. We always perform for our clients who do business with us. Here's our new car. It gets great gas mileage. It has leather seats. Buy our car. But it's uninspiring.

Here's how Apple actually communicates. "Everything we do, we believe in challenging the status quo. We believe in thinking differently. The way we challenge the status quo is by making our products beautifully designed, simple to use and user friendly. We just happen to make great computers. Want to buy one?" Totally different right? You're ready to buy a computer from me. All I did was reverse the order of information. What it proves to us is that people don't buy what you do; people buy why you do it. People don't buy what you do; they buy why you do it.

Based on this video, we've had some good discussions at Kynetx about why we do what we do. Here's what I've come up with after reading what others (including Doc Searls) had to say:

At Kynetx, we believe that:

  • much of the promise of the Web remains unfulfilled,
  • new patterns of Internet usage such as Twitter, RSS, Facebook, and so on point to an emerging real-time, "live" Web of events that is more fluid and dynamic than older, static, Web 2.0-style, interactive Web sites,
  • people want to participate on the Web on their own terms and in their own context, and
  • a Web comprised of a network of equals is more useful, powerful, and valuable than a Web of clients and servers with their one-sided services, terms and privacy policies

We see substantial evidence for that supports our belief in a developing new model of online interaction: RSS, river of news, pubsubhubbub, webhooks, Twitter, Twilio, and so on.

Because of our beliefs Kynetx espouses a new model for Web interactions based on events, endpoints, and rules that embraces the Live Web and moves beyond the client-server model. We have invented a programming language uniquely suited to this new model and a cloud-based rules-engine that integrate events, endpoints, and rules into a system that can be used to make the most of the Live Web.

So, why do you do what you do? Are others inspired by your belief in what you do?

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

December 13, 2010

Capture Mode and Emacs

One of the "new" things in Emacs is something called Org mode. If you're an Emacs user and need an outliner, a calendar, a TODO list, or just a place to capture your thoughts, it's great. I've been using Org mode for a while and love it's features. A while back, I started using it with Remember mode to capture thoughts about a book I'm writing, notes in meetings, and a personal journal. I learned over the weekend about something called Org-capture, a Remember mode replacement and took a few minutes to get it set up. Since there were some rough spots, I thought I'd blog my experience for others.

First, you ought to do yourself a favor and download the latest org-mode.el files. The ones that come with your Emacs distro aren't likely to contain the Org-capture files. You can follow the standard instructions for setting up Org-mode. I like the following hook for turning on things like spell checking and turning off truncate-lines.

(add-hook 'org-mode-hook 
	  (lambda ()
	    'turn-on-font-lock
	    (setq word-wrap 1)
	    (setq truncate-lines nil)
	    (flyspell-mode 1)))

I sent up Org-capture s that files are stored in my Dropbox and added several templates like so:

(setq org-directory "~/Dropbox/Documents/orgfiles/")
(setq org-default-notes-file (concat org-directory "notes.org"))
(define-key global-map "\C-cr" 'org-capture)

(setq org-capture-templates 
  `(
    ("n" "Notes" entry (file+datetree 
		        ,(concat org-directory "notes.org"))
	"* %^{Description} %^g %? 
Added: %U") 

    ("b" "Book" entry (file+datetree 
	  	       ,(concat  
                         "~/Dropbox/Documents/KRL Book/krl.txt"))
        "* Topic: %^{Description}  %^g
%?
Added: %U") 

    ("j" "Journal" entry (file 
                          ,(concat org-directory "journal.org"))
        "** %^{Title} %U %(journal-google-weather \"Lindon, UT\")
%?
")
	  ))

For more information on setting up templates, see this article on Capture mode and date trees and the manual entry. The file+datetree designation in the preceding templates creates a date tree outline in the Org file for easy reference.

I wanted to be able to access Org-capture from anywhere. I found this article on GTD capture in Org mode, but it's based on the old Remember mode, not the new Org-capture mode. Here's a screencast showing how this works:

With a simple keypress I'm able to fire up an Emacs window in capture mode from whatever application I'm then using, make my notes, and save the results. As I mentioned, the article on GTD capture in Org mode wasn't based on Org-capture, but the older Reember mode. I updated that code to use Org-capture. Here's the updated code:

 (defadvice org-capture-finalize 
  (after delete-capture-frame activate)  
   "Advise capture-finalize to close the frame"  
   (if (equal "capture" (frame-parameter nil 'name))  
       (delete-frame)))  
   
 (defadvice org-capture-destroy 
  (after delete-capture-frame activate)  
   "Advise capture-destroy to close the frame"  
   (if (equal "capture" (frame-parameter nil 'name))  
       (delete-frame)))  
   
 ;; make the frame contain a single window. by default org-capture  
 ;; splits the window.  
 (add-hook 'org-capture-mode-hook  
           'delete-other-windows)  
   
 (defun make-capture-frame ()  
   "Create a new frame and run org-capture."  
   (interactive)  
   (make-frame '((name . "capture") 
                 (width . 120) 
                 (height . 15)))  
   (select-frame-by-name "capture") 
   (setq word-wrap 1)
   (setq truncate-lines nil)
   (org-capture))  

I trigger this with Quicksilver. To do that I created a simple bash script called capture

#!/bin/bash
/usr/bin/emacsclient -n -e '(make-capture-frame)'

Setting up a Quicksilver trigger to call the script is trivial. I bound it to Command-Option-Backslash.

You might have noticed, that the template for my journal entries contains this little bit of magic:

%(journal-google-weather \"Lindon, UT\")

That tells the template to evaluate the function journal-google-weather. This is something I hacked together using the google-weather library:

(defun journal-google-weather (location)
  (let* ((data (ignore-errors
		 (google-weather-get-data location)))
	 (forecast 
            (when data 
              (caddr (google-weather-data->weather data)))))
    (when forecast
      (let ((condition (cdaadr (assoc 'condition forecast)))
            (low (cdaadr (assoc 'low forecast)))
            (high (cdaadr (assoc 'high forecast)))
            (city (google-weather-data->city data))
	    )
	(format-spec "%L | %c | High: %hF Low: %lF"
		     `((?c . ,condition)
		       (?L . ,location)
		       (?l . ,low)
		       (?h . ,high)))))))

When this runs, emacs contacts the Google weather API, parses the result for the given location, and inserts a formated string into my journal header like so:

... [2010-12-12 Sun 21:12]  Lindon, UT | Partly Cloudy | High: 52F Low: 30F

I'm loving the easy ability I have now to capture information from mail, the Web or anywhere else and put it into a notes file for later. Give it a try!

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

December 11, 2010

Podcast: Kaliya Hamlin Interview Me on Personal Data Ecosystems

Kaliya interviewed me for her Personal Data Ecosystem podcast series. Here's her description?

In this podcast Kaliya talks to Phil Windley who is the CTO and co-founder of Kynetx and co-founded and co-produces the Internet Identity Workshop with Kaliya & Doc Searls. He gives his perspective on the key differentiator between today's social networks and Personal Data Ecosystem the emergence of the personal data store where individuals control their own data. He also covers the event based architecture his company Kynetx is developing and refers to the project neck pain demo. In the podcast he mentions Twillio.

3:49 PM | Comments () | Recommend This | Print This

December 10, 2010

Readings Weeks of Nov 29th and Dec 6th, 2010

1:25 PM | Comments () | Recommend This | Print This

December 8, 2010

Podcast: Ylian Saint-Hilaire on MeshCentral

Ylian Saint-Hilaire

This week Scott and I spoke with Ylian Saint-Hilaire of Intel about his MeshCentral project. While we were talking I just kept thinking how cool it would be to use Kynetx react to the events this system creates. I didn't indulge myself however, that will wait for a future conversation. Here's the description from IT Conversations:

MeshCentral, a remote monitoring and management web site, allows a user to connect with home or office devices from anywhere in the world. It requires a special management agent on computers, but once installed, the computers will show up in the My Devices section of the MeshCentral web site allowing a user to monitor them, power them on and off and take control of them. Developer Ylian Saint-Hilaire of Intel discusses the project, now in its alpha phase. He talks about its development and the Android app that allows a user to take advantage of MeshCentral fro a remote location.

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

December 7, 2010

Starting a High Tech Business: Move As a Pack

Pack of wolves

I'm the founder and CTO of Kynetx. This seriesof articles relates my discoveries and feelings about starting a high-tech business. This is the twenty-eighth installment. You may find my efforts instructive. Or you may know a better way---if so, please let me know!

Yesterday we had a short service degradation at Kynetx caused by a server that kernel paniced. As the incident was in play, I received periodic reports from Wade Billings and Dan McGarry about what steps were being taken to remediate the problem and address customer notification and concerns. Afterwards, I tweeted:

The nice thing about working with people you've worked with before is that you don't have to reset-up processes. Good things just happen.
From Twitter / @Phil Windley
Referenced Tue Dec 07 2010 08:56:15 GMT-0700 (MST)

David Bressler responded:

@windley that's critical, especially with job switching. Moving as a pack helps.
From Twitter / @David Bressler
Referenced Tue Dec 07 2010 09:05:07 GMT-0700 (MST)

I loved the idea of "moving as a pack." One of the things I love about startups is that you get to work with the people you want to work with and usually those are folks you've worked well with before.

Yesterday, I didn't have to worry about how the team would respond or even do much coaching on what we ought to do. Every question I asked was met with a "yeah, did that" or "in process." Beyond that, I trusted that things would be done in specific ways that I didn't have to teach Dan, Wade, and others involved. Actually, I did establish these processes with Dan and Wade. But I did it 12 years ago at iMall. When you're three or four gigs into a relationship with your coworkers there is a tremendous level of trust, confidence, and efficiency. The right things happen without Herculean levels of overhead. Here's to "moving in packs."

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

December 2, 2010

Podcast: Carmine Gallo on The Innovation Secrets of Steve Jobs

This week Scott and I sit down with Carmine Gallo about his new book The Innovation Secrets of Steve Jobs: Insanely Different Principles for Breakthrough Success. We talked to him a year ago about his ideas on how Steve Job's gives great presentations. The conversation was a lot of fun. Here's the write-up from IT Conversations.

Apple's Steve Jobs has a reputation for innovation, particularly with Apple's company slogan of "Think Different". Carmine Gallo wrote a book that reviewed Jobs' presentation secrets and now details his innovation secrets. Gallo discusses his book, including the seven points of innovation followed by Steve Jobs. Gallo also talks about the thought process that led to this follow-up to his previous successful book.

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

December 1, 2010

Luncheon: Improving Application Performance

If you're an IT director in Utah, then you might consider coming to a luncheon on December 14 at the Tuscany in Holladay. Niel Nickolaiesen, Kelly Phillips, Darin Swan, and Brad Jones will be the panel. I know all of them except Darin and think it will be a great event--besides the food is bound to be good in any event. I've signed up. (Full disclosure: the event is sponsored, in part, by Direct Pointe and I'm on their board.)

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