<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	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/"
	>

<channel>
	<title>Jeff Douglas - Technology, Coding and Bears... OH MY! &#187; Innovation</title>
	<atom:link href="http://blog.jeffdouglas.com/category/innovation/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.jeffdouglas.com</link>
	<description>Get your head out of your #@! and into the clouds!</description>
	<lastBuildDate>Thu, 02 Feb 2012 11:57:20 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<item>
		<title>Salesforce REST API Demo from Cloudstock</title>
		<link>http://blog.jeffdouglas.com/2010/12/17/salesforce-rest-api-demo-from-cloudstock/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=salesforce-rest-api-demo-from-cloudstock</link>
		<comments>http://blog.jeffdouglas.com/2010/12/17/salesforce-rest-api-demo-from-cloudstock/#comments</comments>
		<pubDate>Fri, 17 Dec 2010 17:18:16 +0000</pubDate>
		<dc:creator>Jeff Douglas</dc:creator>
				<category><![CDATA[Code Sample]]></category>
		<category><![CDATA[Innovation]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Salesforce]]></category>

		<guid isPermaLink="false">http://blog.jeffdouglas.com/?p=3353</guid>
		<description><![CDATA[This is the demo that I put together for the Cloudstock Hackathon and I tried to throw in as many partner services as possible. I finally ended up with five so it was dubbed the &#8220;Kitchen Sink&#8221; demo. I thought some people may find it useful as it shows how to use the Force.com REST [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.jeffdouglas.com%2F2010%2F12%2F17%2Fsalesforce-rest-api-demo-from-cloudstock%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.jeffdouglas.com%2F2010%2F12%2F17%2Fsalesforce-rest-api-demo-from-cloudstock%2F&amp;source=jeffdonthemic&amp;style=normal&amp;service=bit.ly&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>This is the demo that I put together for the <a href="http://www.cloudstockevent.com/cloudstockhackathon">Cloudstock Hackathon</a> and I tried to throw in as many partner services as possible. I finally ended up with five so it was dubbed the &#8220;Kitchen Sink&#8221; demo. I thought some people may find it useful as it shows how to use the Force.com REST API in conjunction with OAuth2 using the Spring MVC framework. Pat Patterson put together a great <a href="http://wiki.developerforce.com/index.php/Getting_Started_with_the_Force.com_REST_API">Getting Started with the Force.com REST API article</a> but my app is slightly different and IMHO easier, since it uses the Spring Framework.</p>
<p>The app is a external-facing recruiting site that advertises the open <a href="http://www.appirio.com/careers">Appirio positions</a>. Please remember that this is a demo and I put most of the code into a couple of controllers to make it easier to show. The code can definitely be refactored in certain places. </p>
<p>Here&#8217;s how the app uses the partner services:</p>
<p><table width="100%">
<tr>
<th>Partner</th>
<th>How Used?</th>
</tr>
<tr>
<td><a href="http://blog.jeffdouglas.com/wp-content/uploads/2010/12/Box.png" rel="lightbox[3353]"><img src="http://blog.jeffdouglas.com/wp-content/uploads/2010/12/Box.png" alt="" title="Box" width="96" height="48" class="alignnone size-full wp-image-3365" /></a></td>
<td>Store pdf job descriptions on Box for download by applicants.</td>
</tr>
<tr>
<td><a href="http://blog.jeffdouglas.com/wp-content/uploads/2010/12/Force.png" rel="lightbox[3353]"><img src="http://blog.jeffdouglas.com/wp-content/uploads/2010/12/Force.png" alt="" title="Force.com" width="200" height="57" class="alignnone size-full wp-image-3363" /></a></td>
<td>Use Force.com as the datastore for open jobs. Access to Force.com using OAuth2 and the REST API.</td>
</tr>
<tr>
<td><a href="http://blog.jeffdouglas.com/wp-content/uploads/2010/12/Twilio.png" rel="lightbox[3353]"><img src="http://blog.jeffdouglas.com/wp-content/uploads/2010/12/Twilio.png" alt="" title="Twilio" width="180" height="60" class="alignnone size-full wp-image-3368" /></a></td>
<td>Send a job to a friend via SMS.</td>
</tr>
<tr>
<td><a href="http://blog.jeffdouglas.com/wp-content/uploads/2010/12/VMWare.png" rel="lightbox[3353]"><img src="http://blog.jeffdouglas.com/wp-content/uploads/2010/12/VMWare.png" alt="" title="VMWare" width="180" height="28" class="alignnone size-full wp-image-3369" /></a></td>
<td>Application built using Spring STS, Spring Roo and Spring MVC. The application runs locally on tc Server.</td>
</tr>
<tr>
<td><a href="http://blog.jeffdouglas.com/wp-content/uploads/2010/12/MongoDB.png" rel="lightbox[3353]"><img src="http://blog.jeffdouglas.com/wp-content/uploads/2010/12/MongoDB.png" alt="" title="MongoDB" width="149" height="48" class="alignnone size-full wp-image-3367" /></a></td>
<td>Store metrics for jobs on MongoHQ.</td>
</tr>
</table>
<p>Here&#8217;s a video of the application so you can see it in action plus some explanation of the Spring code. The controller code for the OAuth functionality and interacting with the Job records is following the jump.</p>
<p><em>It may be easier to watch this at Youtube with a larger picture. Just double-click the video.</em></p>
<p><span class="youtube">
<object width="560" height="340">
<param name="movie" value="http://www.youtube.com/v/TFNJaHYEK3U?color1=d6d6d6&amp;color2=f0f0f0&amp;border=0&amp;fs=1&amp;hl=en&amp;loop=0&amp;showinfo=0&amp;iv_load_policy=3&amp;showsearch=0&amp;rel=1&amp;hd=1&#038;hd=1&#038;w=550" />
<param name="allowFullScreen" value="true" />
<embed wmode="opaque" src="http://www.youtube.com/v/TFNJaHYEK3U?color1=d6d6d6&amp;color2=f0f0f0&amp;border=0&amp;fs=1&amp;hl=en&amp;loop=0&amp;showinfo=0&amp;iv_load_policy=3&amp;showsearch=0&amp;rel=1&amp;hd=1&#038;hd=1&#038;w=550" type="application/x-shockwave-flash" allowfullscreen="true" width="560" height="340"></embed>
<param name="wmode" value="opaque" />
</object>
</span><p><a href="http://www.youtube.com/watch?v=TFNJaHYEK3U&fmt=18">www.youtube.com/watch?v=TFNJaHYEK3U</a></p></p>
<p><strong>OAuthController</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
</pre></td><td class="code"><pre class="java" style="font-family:monospace;">package com.appirio.jobs.web;
&nbsp;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
&nbsp;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.PostMethod;
import org.json.JSONException;
import org.json.JSONObject;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.WebRequest;
&nbsp;
/**
 * @author Jeff Douglas (jeff@appirio.com)
 */
@RequestMapping(&quot;/oauth/**&quot;)
@Controller
public class OAuthController {
&nbsp;
  private static final String ACCESS_TOKEN = &quot;ACCESS_TOKEN&quot;;
  private static final String INSTANCE_URL = &quot;INSTANCE_URL&quot;;
&nbsp;
  private String clientId = null;
  private String clientSecret = null;
  private String redirectUri = null;
  private String environment = null;
  private String authUrl = null;
  private String tokenUrl = null;
  private String accessToken = null;
&nbsp;
  private void init() {
&nbsp;
      redirectUri = &quot;https://127.0.0.1:8443/AppirioCareers/oauth/_callback&quot;;
      environment = &quot;https://na5.salesforce.com&quot;;
      // client id and secret from Force.com Remote Access
      clientId = &quot;YOUR-CLIENT-ID&quot;;
      clientSecret = &quot;YOUR-CLIENT-SECRET&quot;;
&nbsp;
        try {
      authUrl = environment + &quot;/services/oauth2/authorize?response_type=code&amp;client_id=&quot; 
        + clientId + &quot;&amp;redirect_uri=&quot; + URLEncoder.encode(redirectUri, &quot;UTF-8&quot;);
    } catch (UnsupportedEncodingException e1) {
      // TODO Auto-generated catch block
      e1.printStackTrace();
    }
&nbsp;
        tokenUrl = environment + &quot;/services/oauth2/token&quot;;
&nbsp;
  }
&nbsp;
  /* Start the OAuth process if no session with the access token is found. 
   * If a session exists, the redirect the user to the /job/list page. */
  @RequestMapping(value = &quot;/oauth/start&quot;, method = RequestMethod.GET)
  public String startOauth(WebRequest req) {
&nbsp;
    init();
    // check for an access token in the servlet session
    accessToken = (String) req.getAttribute(ACCESS_TOKEN, RequestAttributes.SCOPE_SESSION);
&nbsp;
    if (accessToken != null) {
      System.out.println(&quot;Session found!! Access token: &quot;+accessToken);
      return &quot;forward:/job/list&quot;;
    } else {
      System.out.println(&quot;No session... need to auth.&quot;);        
      return &quot;redirect:&quot; + authUrl;
    }
&nbsp;
  }
&nbsp;
  /* OAuth callback from Force.com after authrozing the application.  */
  @RequestMapping(value = &quot;/oauth/_callback&quot;, method = RequestMethod.GET)
  public String endOauth(WebRequest req) {
&nbsp;
    init();
    String accessToken = null;
    String instanceUrl = null;
    String code = req.getParameter(&quot;code&quot;);
    HttpClient http = new HttpClient();
    PostMethod post = new PostMethod(tokenUrl);
    post.addParameter(&quot;client_secret&quot;, clientSecret);
    post.addParameter(&quot;redirect_uri&quot;, redirectUri);
    post.addParameter(&quot;grant_type&quot;, &quot;authorization_code&quot;);
    post.addParameter(&quot;code&quot;, code);
    post.addParameter(&quot;client_id&quot;, clientId);
&nbsp;
    try {
      JSONObject json = null;
      http.executeMethod(post);
      String respBody = post.getResponseBodyAsString();
      System.out.println(&quot;post response: &quot; + respBody);
      try {
        json = new JSONObject(respBody);
        accessToken = json.getString(&quot;access_token&quot;);
        instanceUrl = json.getString(&quot;instance_url&quot;);
      } catch (JSONException e) {
        e.printStackTrace();
      }
      System.out.println(&quot;found access token: &quot;+accessToken);
      System.out.println(&quot;found instance url: &quot;+instanceUrl);
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } finally {
      post.releaseConnection();
    }
&nbsp;
    System.out.println(&quot;Setting Access token: &quot;+accessToken);
    System.out.println(&quot;Setting Instance Url: &quot;+instanceUrl);
&nbsp;
    /* Set the token and url to the session so other servlets can access it. */
    req.setAttribute(ACCESS_TOKEN, accessToken, RequestAttributes.SCOPE_SESSION);
    req.setAttribute(INSTANCE_URL, instanceUrl, RequestAttributes.SCOPE_SESSION);
&nbsp;
    return &quot;forward:/job/list&quot;;
  }
&nbsp;
  @RequestMapping
  public String index() {
    return &quot;oauth/index&quot;;
  }
}</pre></td></tr></table></div>

<p><strong>JobController</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
</pre></td><td class="code"><pre class="java" style="font-family:monospace;">package com.appirio.jobs.web;
&nbsp;
import java.io.IOException;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
&nbsp;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.GetMethod; 
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.WebRequest;
import org.springframework.web.servlet.ModelAndView;
&nbsp;
import com.appirio.jobs.domain.Job;
import com.appirio.jobs.domain.SmsMessage;
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.Mongo;
import com.mongodb.MongoException;
import com.twilio.sdk.TwilioRestClient;
import com.twilio.sdk.TwilioRestException;
import com.twilio.sdk.TwilioRestResponse;
&nbsp;
/**
 * @author Jeff Douglas (jeff@appirio.com)
 */
&nbsp;
@RequestMapping(&quot;/job/**&quot;)
@Controller
public class JobController {
&nbsp;
  private static final String ACCESS_TOKEN = &quot;ACCESS_TOKEN&quot;;
  private static final String INSTANCE_URL = &quot;INSTANCE_URL&quot;;
  private static Mongo m;
  private static DB db;
  private static DBCollection coll;
  private static DBCursor cur;
  private ArrayList&lt;Job&gt; jobs = new ArrayList&lt;Job&gt;();
&nbsp;
&nbsp;
    @RequestMapping(value=&quot;/job/list&quot;, method=RequestMethod.GET)
    public ModelAndView list(WebRequest req) {
&nbsp;
      // if the job collection is empty then fetch jobs from Force.com
      if (jobs.isEmpty()) {
&nbsp;
        // fetch the access token and url from the servlet session
        String accessToken = (String) req.getAttribute(ACCESS_TOKEN, RequestAttributes.SCOPE_SESSION);
        String instanceUrl = (String) req.getAttribute(INSTANCE_URL, RequestAttributes.SCOPE_SESSION);
&nbsp;
        System.out.println(&quot;Access token: &quot;+accessToken);
        System.out.println(&quot;Instance Url: &quot;+instanceUrl);
&nbsp;
        jobs = new ArrayList&lt;Job&gt;();
      HttpClient httpclient = new HttpClient();
          GetMethod gm = new GetMethod(instanceUrl + &quot;/services/data/v20.0/query&quot;);
          //set the token in the header
          gm.setRequestHeader(&quot;Authorization&quot;, &quot;OAuth &quot;+accessToken);
          //set the SOQL as a query param
          NameValuePair[] params = new NameValuePair[1];
          //no need to url encode here...it will cause your query to fail
          params[0] = new NameValuePair(&quot;q&quot;,&quot;Select Id, Name, Job_Title__c, Location__c, &quot; +
              &quot;Duties__c, Skills__c, Salary__c, Box_Url__c from Job__c Order by Job_Title__c&quot;);
          gm.setQueryString(params);
&nbsp;
          String respBody = &quot;&quot;;
&nbsp;
          try {
        httpclient.executeMethod(gm);
        respBody = gm.getResponseBodyAsString();
            System.out.println(&quot;response body: &quot; + respBody);
      } catch (HttpException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
      } catch (IOException e2) {
        // TODO Auto-generated catch block
        e2.printStackTrace();
      } finally {
              gm.releaseConnection();
          }
&nbsp;
          try {
              JSONObject json = new JSONObject(respBody);                
              JSONArray results = json.getJSONArray(&quot;records&quot;);
&nbsp;
             for(int i = 0; i &lt; results.length(); i++) {
               // add the json payload to a Job object
               Job job = new Job(results.getJSONObject(i).getString(&quot;Id&quot;), 
            results.getJSONObject(i).getString(&quot;Name&quot;),
            results.getJSONObject(i).getString(&quot;Job_Title__c&quot;),
            results.getJSONObject(i).getString(&quot;Location__c&quot;),
            results.getJSONObject(i).getString(&quot;Duties__c&quot;),
            results.getJSONObject(i).getString(&quot;Skills__c&quot;),
            results.getJSONObject(i).getString(&quot;Salary__c&quot;),
            results.getJSONObject(i).getString(&quot;Box_Url__c&quot;));
&nbsp;
               // add the job to the collection
               jobs.add(job);
             }
&nbsp;
&nbsp;
          } catch (JSONException e) {
              e.printStackTrace();
          }
&nbsp;
          System.out.println(&quot;jobs found: &quot;+jobs.size());
&nbsp;
      }
&nbsp;
      ModelAndView mav = new ModelAndView(&quot;job/list&quot;);
      mav.addObject(&quot;jobs&quot;, jobs);
      return mav;
    }
&nbsp;
    @RequestMapping(value=&quot;/job/{id}/display&quot;, method=RequestMethod.GET)
    public ModelAndView display(@PathVariable String id, Model model) {
      Job job = getJobById(id);
      incrementCount(job.getName(),&quot;views&quot;);
      ModelAndView mav = new ModelAndView(&quot;job/display&quot;);
      mav.addObject(getJobById(id));
      return mav;
    }
&nbsp;
    @RequestMapping(value=&quot;/job/{id}/sms&quot;, method=RequestMethod.GET)
    public ModelAndView message(@PathVariable String id, Model model) {
      ModelAndView mav = new ModelAndView(&quot;job/sms&quot;); 
      SmsMessage sms = new SmsMessage();
      sms.setPhone(&quot;9412274843&quot;);
      sms.setMessage(&quot;Check out this AWESOME job with Appirio!&quot;);
      mav.addObject(&quot;smsMessage&quot;, sms);
      mav.addObject(getJobById(id));
      return mav;
    }
&nbsp;
    @RequestMapping(value=&quot;/job/{id}/print&quot;, method=RequestMethod.GET)
    public String print(@PathVariable String id, Model model) {
      Job job = getJobById(id);
      incrementCount(job.getName(),&quot;downloads&quot;);
      System.out.println(job.getBoxUrl());
      return &quot;redirect:&quot;+job.getBoxUrl();
    }
&nbsp;
    @RequestMapping(value = &quot;/job/{id}/smsSend&quot;, method = RequestMethod.POST)
    public ModelAndView smsSubmit(@PathVariable String id, @ModelAttribute SmsMessage sms, Model model) {
&nbsp;
      Job job = getJobById(id);
      sendSms(job, sms.getPhone(), sms.getMessage());
      incrementCount(job.getName(),&quot;messages&quot;);
&nbsp;
      ModelAndView mav = new ModelAndView(&quot;job/smsConfirm&quot;); 
      mav.addObject(&quot;phone&quot;, sms.getPhone());
      mav.addObject(&quot;message&quot;, sms.getMessage());
      mav.addObject(job);
      return mav;
&nbsp;
    }
&nbsp;
  private void incrementCount(String name, String type) {
&nbsp;
    try {
      m = new Mongo(&quot;flame.mongohq.com&quot;, 27065);
      db = m.getDB(&quot;AppirioCareers&quot;);
      char[] password = { '4','+','r','E','o','x','x','x','x','x'};
      boolean auth = db.authenticate(&quot;jeffdonthemic&quot;, password);
      System.out.println(&quot;Mongo auth?: &quot;+auth);
      coll = db.getCollection(&quot;jobs&quot;);  
    }
    catch (UnknownHostException ex) {
      ex.printStackTrace();
    }
    catch (MongoException ex) {
      ex.printStackTrace();
    }
&nbsp;
    cur = coll.find(new BasicDBObject(&quot;name&quot;, name));  
    while (cur.hasNext()) {
      BasicDBObject doc = (BasicDBObject)cur.next();
      if (type.equals(&quot;views&quot;))
        doc.put(&quot;views&quot;, (Integer)doc.get(&quot;views&quot;)+1);
      else if (type.equals(&quot;messages&quot;))
        doc.put(&quot;messages&quot;, (Integer)doc.get(&quot;messages&quot;)+1);
      else
        doc.put(&quot;downloads&quot;, (Integer)doc.get(&quot;downloads&quot;)+1);
      coll.update( new BasicDBObject(&quot;name&quot;, name), doc );
    }
&nbsp;
  }
&nbsp;
    private void sendSms(Job job, String phone, String message) {
&nbsp;
        String AccountSid = &quot;YOUR-ACCOUNT-ID&quot;;
        String AuthToken = &quot;YOUR-AUTH-TOKEN&quot;;
        String ApiVersion = &quot;2010-04-01&quot;;
&nbsp;
        TwilioRestClient client = new TwilioRestClient(AccountSid, AuthToken, null);
&nbsp;
        String msg = &quot;\n&quot;+message+&quot;\n&quot;+job.getJobTitle()+&quot;\nhttp://appirio.com/careers&quot;;
&nbsp;
        System.out.println(&quot;size: &quot;+msg.length());
&nbsp;
        //build map of post parameters 
        Map&lt;String,String&gt; params = new HashMap&lt;String,String&gt;();
        params.put(&quot;From&quot;, &quot;14155992671&quot;);
        params.put(&quot;To&quot;, phone);
        params.put(&quot;Body&quot;, msg);
        TwilioRestResponse response;
        try {
            response = client.request(&quot;/&quot;+ApiVersion+&quot;/Accounts/&quot;+AccountSid+&quot;/SMS/Messages&quot;, &quot;POST&quot;, params);
&nbsp;
            if(response.isError())
                System.out.println(&quot;Error making outgoing call: &quot;+response.getHttpStatus()+&quot;\n&quot;+response.getResponseText());
            else {
                System.out.println(response.getResponseText());
&nbsp;
            }
        } catch (TwilioRestException e) {
            e.printStackTrace();
        }
&nbsp;
    }
&nbsp;
    private Job getJobById(String id) {
      Job job = null;
      for (Job j : jobs) {
        if (j.getId().equals(id)) {
          job = j;
          break;
        }
      }
      return job;
    }
&nbsp;
    @RequestMapping
    public String index() {
        return &quot;job/index&quot;;
    }
&nbsp;
}</pre></td></tr></table></div>

<p> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jeffdouglas.com/2010/12/17/salesforce-rest-api-demo-from-cloudstock/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>My VMforce and Facebook Demos Today at Dreamforce</title>
		<link>http://blog.jeffdouglas.com/2010/12/08/my-vmforce-and-facebook-demos-today-at-dreamforce/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=my-vmforce-and-facebook-demos-today-at-dreamforce</link>
		<comments>http://blog.jeffdouglas.com/2010/12/08/my-vmforce-and-facebook-demos-today-at-dreamforce/#comments</comments>
		<pubDate>Wed, 08 Dec 2010 15:28:40 +0000</pubDate>
		<dc:creator>Jeff Douglas</dc:creator>
				<category><![CDATA[Appirio]]></category>
		<category><![CDATA[Innovation]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Salesforce]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[VMforce]]></category>

		<guid isPermaLink="false">http://blog.jeffdouglas.com/?p=3333</guid>
		<description><![CDATA[If you are at Dreamforce today here are the sessions that I am speaking in. I&#8217;m really excited to be part of both of them as the topics (VMforce and the new Facebook toolkit) are really cool. Leveraging Public Social Networks &#8211; West 2005 @ 12:15 We&#8217;ll be showing off the new Facebook toolkit and [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.jeffdouglas.com%2F2010%2F12%2F08%2Fmy-vmforce-and-facebook-demos-today-at-dreamforce%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.jeffdouglas.com%2F2010%2F12%2F08%2Fmy-vmforce-and-facebook-demos-today-at-dreamforce%2F&amp;source=jeffdonthemic&amp;style=normal&amp;service=bit.ly&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>If you are at Dreamforce today here are the sessions that I am speaking in. I&#8217;m really excited to be part of both of them as the topics (VMforce and the new Facebook toolkit) are really cool.</p>
<p>
<h3>Leveraging Public Social Networks &#8211; West 2005 @ 12:15</h3>
</p>
<p>We&#8217;ll be showing off the new Facebook toolkit and building a few applications.</p>
<p><img title="df10-facebook.png" src="http://blog.jeffdouglas.com/wp-content/uploads/2010/12/df10-facebook.png" border="0" alt="df10-facebook.png" width="525" height="331" /></p>
<p><br/><br/></p>
<p>
<h3>VMforce: The Trusted Enterprise Platform as a Service - Force.com Theater @ 1:45</h3>
</p>
<p>I&#8217;ll be demoing an app built using Spring STS, Spring Roo and Spring MVC connecting to the Force.com Database using JPA and running on the VMforce servers. I&#8217;ll show you the code, pick it apart and talk about best practices.</p>
<p><img title="df10-vmforce.png" src="http://blog.jeffdouglas.com/wp-content/uploads/2010/12/df10-vmforce.png" border="0" alt="df10-vmforce.png" width="525" height="366" /></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jeffdouglas.com/2010/12/08/my-vmforce-and-facebook-demos-today-at-dreamforce/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Google Short Links</title>
		<link>http://blog.jeffdouglas.com/2009/09/20/google-short-links/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=google-short-links</link>
		<comments>http://blog.jeffdouglas.com/2009/09/20/google-short-links/#comments</comments>
		<pubDate>Sun, 20 Sep 2009 12:07:23 +0000</pubDate>
		<dc:creator>Jeff Douglas</dc:creator>
				<category><![CDATA[Google App Engine]]></category>
		<category><![CDATA[Innovation]]></category>

		<guid isPermaLink="false">http://blog.jeffdouglas.com/?p=1317</guid>
		<description><![CDATA[I found this tip on my buddy Kyle Roche&#8217;s blog this morning. It&#8217;s such a great service that I had to repost it (aka rip it off). Google has released an awesome new Labs feature called Google Short Links that allows you to easily create descriptive shortcuts to web URLs. The service (powered by App [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.jeffdouglas.com%2F2009%2F09%2F20%2Fgoogle-short-links%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.jeffdouglas.com%2F2009%2F09%2F20%2Fgoogle-short-links%2F&amp;source=jeffdonthemic&amp;style=normal&amp;service=bit.ly&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p><a href="http://blog.jeffdouglas.com/wp-content/uploads/2009/09/labs_logo2.png" rel="lightbox[1317]"><img class="alignleft size-full wp-image-1318" style="padding-right:15px;" title="labs_logo2" src="http://blog.jeffdouglas.com/wp-content/uploads/2009/09/labs_logo2.png" alt="labs_logo2" width="132" height="52" /></a>I found this tip on my buddy <a href="http://www.kyleroche.com/2009/09/google-labs-short-links.html" target="_blank">Kyle Roche&#8217;s blog</a> this morning. It&#8217;s such a great service that I had to repost it (aka rip it off).</p>
<p>Google has released an awesome new Labs feature called <a href="http://www.google.com/enterprise/marketplace/viewListing?productListingId=5143210+6352879591152674960" target="_blank">Google Short Links</a> that allows you to easily create descriptive shortcuts to web URLs. The service (powered by <a href="http://appengine.google.com" target="_blank">App Engine</a>!!) integrates with your Google Apps Control Panel and also the Firefox 3 &#8220;awesome bar&#8221;.</p>
<p>For example, I created a short link to the book that Kyle and I are writing on Java App Engine: <a href="http://links.jeffdouglas.com/book" target="_blank">http://links.jeffdouglas.com/book</a></p>
<p>You can have both public and private shortlinks. So you might create the following short links:</p>
<ul>
<li>http://work.jeffdouglas.com</li>
<li>http://family.jeffdouglas.com</li>
</ul>
<p>Then you could make a bookmarklet to your private Flickr photos (http://family.jeffdouglas.com/myphotos) that only you can access. You might make a series of work related bookmarklets (e.g., http://work.jeffdouglas.com/myproducts, http://work.jeffdouglas.com/linkedin) that you can give out to the general public and leave scattered around the interwebs.</p>
<p>You can sign up for the service <a href="http://www.google.com/enterprise/marketplace/viewListing?productListingId=5143210+6352879591152674960" target="_blank">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jeffdouglas.com/2009/09/20/google-short-links/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Chromium &#8211; Chrome for Mac</title>
		<link>http://blog.jeffdouglas.com/2009/07/16/chromium/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=chromium</link>
		<comments>http://blog.jeffdouglas.com/2009/07/16/chromium/#comments</comments>
		<pubDate>Thu, 16 Jul 2009 13:23:09 +0000</pubDate>
		<dc:creator>Jeff Douglas</dc:creator>
				<category><![CDATA[Innovation]]></category>
		<category><![CDATA[The Internet Business]]></category>

		<guid isPermaLink="false">http://blog.jeffdouglas.com/?p=1033</guid>
		<description><![CDATA[I started running Chromium (the Chrome browser for Mac) yesterday and it&#8217;s pretty nifty. It&#8217;s fast and functions alot like the Windows version. The only issue I&#8217;ve run into so far is its lack of support for Flash. For more info you can checkout the Chromium blog or download the latest build. TechCrunch also has [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.jeffdouglas.com%2F2009%2F07%2F16%2Fchromium%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.jeffdouglas.com%2F2009%2F07%2F16%2Fchromium%2F&amp;source=jeffdonthemic&amp;style=normal&amp;service=bit.ly&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>I started running Chromium (the Chrome browser for Mac) yesterday and it&#8217;s pretty nifty. It&#8217;s fast and functions alot like the Windows version. The only issue I&#8217;ve run into so far is its lack of support for Flash.</p>
<p>For more info you can checkout the <a href="http://blog.chromium.org/" target="_blank">Chromium blog</a> or <a href="http://build.chromium.org/buildbot/snapshots/chromium-rel-mac/" target="_blank">download the latest build</a>. TechCrunch also has a <a href="http://www.techcrunch.com/2009/07/16/chrome-for-mac-starting-to-look-polished/?awesm=tcrn.ch_60A&amp;utm_campaign=techcrunch&amp;utm_content=techcrunch-autopost&amp;utm_medium=tcrn.ch-twitter&amp;utm_source=direct-tcrn.ch" target="_blank">pretty good article</a> with a number of screenshots.</p>
<p><a href="http://blog.jeffdouglas.com/wp-content/uploads/2009/07/chromium-screenshot.png" rel="lightbox[1033]"><img class="alignnone size-full wp-image-1034" title="chromium-screenshot" src="http://blog.jeffdouglas.com/wp-content/uploads/2009/07/chromium-screenshot.png" alt="chromium-screenshot" width="544" height="410" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jeffdouglas.com/2009/07/16/chromium/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Skimmer &#8211; Streamline your social networks</title>
		<link>http://blog.jeffdouglas.com/2009/03/24/skimmer-streamline-your-social-networks/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=skimmer-streamline-your-social-networks</link>
		<comments>http://blog.jeffdouglas.com/2009/03/24/skimmer-streamline-your-social-networks/#comments</comments>
		<pubDate>Tue, 24 Mar 2009 11:59:08 +0000</pubDate>
		<dc:creator>Jeff Douglas</dc:creator>
				<category><![CDATA[Innovation]]></category>

		<guid isPermaLink="false">http://blog.jeffdouglas.com/?p=535</guid>
		<description><![CDATA[Skimmer was just released today and I&#8217;m impressed. It&#8217;s a really slick and visually appealing Air application that makes updating multiple social networks a breeze. &#8220;Skimmer℠ is an Adobe AIR desktop application designed to streamline, beautify, and enhance the experience of participating in your most frequently used social networking activities. It improves upon day-to-day interaction [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.jeffdouglas.com%2F2009%2F03%2F24%2Fskimmer-streamline-your-social-networks%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.jeffdouglas.com%2F2009%2F03%2F24%2Fskimmer-streamline-your-social-networks%2F&amp;source=jeffdonthemic&amp;style=normal&amp;service=bit.ly&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p><img class="size-medium wp-image-536 alignleft" title="skimmer" src="http://blog.jeffdouglas.com/wp-content/uploads/2009/03/skimmer.jpg?w=300" alt="skimmer" width="300" height="167" /><a href="http://www.fallon.com/skimmer" target="_blank">Skimmer</a> was just released today and I&#8217;m impressed. It&#8217;s a really slick and visually appealing Air application that makes updating multiple social networks a breeze.</p>
<p>&#8220;Skimmer℠ is an Adobe AIR desktop application designed to streamline, beautify, and enhance the experience of participating in your most frequently used social networking activities. It improves upon day-to-day interaction with multiple social networks, removing distractions and providing a rich content experience from Facebook, Twitter, Flickr, Blogger and YouTube. Skimmer’s spare, modern aesthetic sets it apart, creating a welcome, handsome social networking hub on your desktop that is particularly suited to multimedia content.&#8221;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jeffdouglas.com/2009/03/24/skimmer-streamline-your-social-networks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wow!</title>
		<link>http://blog.jeffdouglas.com/2008/12/18/wow/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=wow</link>
		<comments>http://blog.jeffdouglas.com/2008/12/18/wow/#comments</comments>
		<pubDate>Thu, 18 Dec 2008 16:13:19 +0000</pubDate>
		<dc:creator>Jeff Douglas</dc:creator>
				<category><![CDATA[Innovation]]></category>
		<category><![CDATA[Personal]]></category>

		<guid isPermaLink="false">http://blog.jeffdouglas.com/?p=338</guid>
		<description><![CDATA[A picture tells a thousand words. Wages, healthcare and legacy costs are killing the Big Three.]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.jeffdouglas.com%2F2008%2F12%2F18%2Fwow%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.jeffdouglas.com%2F2008%2F12%2F18%2Fwow%2F&amp;source=jeffdonthemic&amp;style=normal&amp;service=bit.ly&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>A picture tells a thousand words. Wages, healthcare and legacy costs are killing the Big Three.</p>
<p><img class="alignleft size-full wp-image-337" title="union-costs" src="http://blog.jeffdouglas.com/wp-content/uploads/2008/12/union-costs.png" alt="union-costs" width="500" height="513" /></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jeffdouglas.com/2008/12/18/wow/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>2008 CIO 100 Award</title>
		<link>http://blog.jeffdouglas.com/2008/08/21/2008-cio-100-award/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=2008-cio-100-award</link>
		<comments>http://blog.jeffdouglas.com/2008/08/21/2008-cio-100-award/#comments</comments>
		<pubDate>Thu, 21 Aug 2008 10:26:04 +0000</pubDate>
		<dc:creator>Jeff Douglas</dc:creator>
				<category><![CDATA[Innovation]]></category>

		<guid isPermaLink="false">http://blog.jeffdouglas.com/?p=423</guid>
		<description><![CDATA[Now in its 21st year, the CIO 100 Award is known worldwide as the most prestigious honor in the IT user community and is awarded to 100 companies and their CIOs for leadership in business, technology and innovation. For the third consecutive year, we have been honored by CIO Magazine with the coveted distinction . [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.jeffdouglas.com%2F2008%2F08%2F21%2F2008-cio-100-award%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.jeffdouglas.com%2F2008%2F08%2F21%2F2008-cio-100-award%2F&amp;source=jeffdonthemic&amp;style=normal&amp;service=bit.ly&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p><img class="alignleft size-full wp-image-424" style="margin-left:10px;margin-right:10px;" title="cio-2008-cover" src="http://blog.jeffdouglas.com/wp-content/uploads/2009/02/cio-2008-cover.jpg" alt="cio-2008-cover" width="125" height="164" />Now in its 21st year, the CIO 100 Award is known worldwide as the most prestigious honor in the IT user community and is awarded to 100 companies and their CIOs for leadership in business, technology and innovation. For the third consecutive year, we have been honored by CIO Magazine with the coveted distinction . This year we were recognized for applications developed to support operations and management of its biomedical technologies training and educational programs.</p>
<p>See our <a href="http://www.medisend.org/2008-cio-100-award.html" target="_blank">Press Release</a> and our <a href="http://www.cio.com/cio100/detail/1848" target="_blank">Profile at CIO Magazine</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jeffdouglas.com/2008/08/21/2008-cio-100-award/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Five Steps to Managing Innovation</title>
		<link>http://blog.jeffdouglas.com/2007/08/12/five-steps-to-managing-innovation/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=five-steps-to-managing-innovation</link>
		<comments>http://blog.jeffdouglas.com/2007/08/12/five-steps-to-managing-innovation/#comments</comments>
		<pubDate>Sun, 12 Aug 2007 12:58:20 +0000</pubDate>
		<dc:creator>Jeff Douglas</dc:creator>
				<category><![CDATA[Innovation]]></category>

		<guid isPermaLink="false">http://jeffdonthemic.wordpress.com/?p=181</guid>
		<description><![CDATA[CIO Magazine has a really good article on inspiring and managing the innovation process.]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.jeffdouglas.com%2F2007%2F08%2F12%2Ffive-steps-to-managing-innovation%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.jeffdouglas.com%2F2007%2F08%2F12%2Ffive-steps-to-managing-innovation%2F&amp;source=jeffdonthemic&amp;style=normal&amp;service=bit.ly&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>CIO Magazine has a <a href="http://www.cio.com/article/125700/Five_Steps_to_Managing_Innovation">really good article</a> on inspiring and managing the innovation process.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jeffdouglas.com/2007/08/12/five-steps-to-managing-innovation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>An Official Measure of Innovation</title>
		<link>http://blog.jeffdouglas.com/2007/04/20/an-official-measure-of-innovation/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=an-official-measure-of-innovation</link>
		<comments>http://blog.jeffdouglas.com/2007/04/20/an-official-measure-of-innovation/#comments</comments>
		<pubDate>Fri, 20 Apr 2007 13:52:13 +0000</pubDate>
		<dc:creator>Jeff Douglas</dc:creator>
				<category><![CDATA[Innovation]]></category>

		<guid isPermaLink="false">http://jeffdonthemic.wordpress.com/?p=195</guid>
		<description><![CDATA[BusinessWeek has an interesting analysis of a two page document produced by the US Department of Commerce on a series of innovation measurements it might use to drive public economic and innovation policy. The main thrust of the document seems to be how can the U.S.?and U.S. business?remain competitive? The Commerce department is looking for [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.jeffdouglas.com%2F2007%2F04%2F20%2Fan-official-measure-of-innovation%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.jeffdouglas.com%2F2007%2F04%2F20%2Fan-official-measure-of-innovation%2F&amp;source=jeffdonthemic&amp;style=normal&amp;service=bit.ly&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p><a href="http://www.businessweek.com/innovate/content/apr2007/id20070420_997596.htm?campaign_id=rss_innovate" target="_blank">BusinessWeek has an interesting analysis</a> of a two page document produced by the US Department of Commerce on a series of innovation measurements it might use to drive public economic and innovation policy.</p>
<p>The main thrust of the document seems to be how can the U.S.?and U.S. business?remain competitive? The Commerce department is looking for comments on this initiative as there are many nebulous concepts that they are looking for feedback on.</p>
<p>It was really interesting to see how they defined innovation: &#8220;The design, invention, development, and/or implementation of new or altered products, services, processes, systems, organizational structures, or business models for the purpose of creating new value for customers and financial returns for the firm.&#8221; This statement shows that they are looking beyond simpe new product development towards a more systematic view of innovation.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jeffdouglas.com/2007/04/20/an-official-measure-of-innovation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Forgetting, Borrowing &amp; Learning</title>
		<link>http://blog.jeffdouglas.com/2007/04/13/forgetting-borrowing-learning/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=forgetting-borrowing-learning</link>
		<comments>http://blog.jeffdouglas.com/2007/04/13/forgetting-borrowing-learning/#comments</comments>
		<pubDate>Fri, 13 Apr 2007 13:54:05 +0000</pubDate>
		<dc:creator>Jeff Douglas</dc:creator>
				<category><![CDATA[Innovation]]></category>

		<guid isPermaLink="false">http://jeffdonthemic.wordpress.com/?p=197</guid>
		<description><![CDATA[There is an interesting article in BusinessWeek with an interview of Dr. Vijay Govindarajan. Dr. Govindarajan is currently a Professor at Dartmouth&#8217;s Tuck School and a is world authority on strategic innovation. It was recently announced that he would become the Dean of the John H. Sykes College of Business at the University of Tampa. [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.jeffdouglas.com%2F2007%2F04%2F13%2Fforgetting-borrowing-learning%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.jeffdouglas.com%2F2007%2F04%2F13%2Fforgetting-borrowing-learning%2F&amp;source=jeffdonthemic&amp;style=normal&amp;service=bit.ly&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>There is an <a href="http://www.businessweek.com/careers/content/mar2007/ca20070328_966917.htm?chan=careers_careers_top+story&amp;chan=innovation_innovation+%2B+design_top+stories" target="_blank">interesting article in BusinessWeek</a> with an interview of Dr. Vijay Govindarajan. Dr. Govindarajan is currently a Professor at Dartmouth&#8217;s Tuck School and a is world authority on strategic innovation. It was recently announced that he would become the Dean of the John H. Sykes College of Business at the University of Tampa. I am currently enrolled in the Masters of Technology and Innovation Management at UT.</p>
<p>The article is essentially a high level overview of my TIM 730 class, &#8220;Leading Innovators&#8221;. The article focuses on how mature businesses can compete, innovate and spin off high growth companies to compete against nimble startups. The article (and the course itself) focuses on a number of case studies such as The New York Times Interactive, OnStar, Microsoft .NET, The Fate of the Vasa and Hasbro Interactive. It attempts to point out how companies can use assets like brands, customer relationships, expertise, manufacturing capacity, etc to compete against and even beat these startups.</p>
<p>The major focus of the article is that when established companies form a new business unit or organization, these new entities must:</p>
<ol>
<li><strong>Forget</strong> the parent company&#8217;s success formula</li>
<li><strong>Borrow</strong> the parent&#8217;s resources</li>
<li><strong>Learn</strong> how to succeed in a new environment</li>
</ol>
<p>Dr. Govindarajan states that the difference between innovation and strategic innovation is:</p>
<p>&#8220;An innovation is strategic when there is a substantial change to one or more of the fundamental questions that define a business: Who are the customers, what value do we provide, and by what processes, and through what areas of expertise do we provide that value?&#8221;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jeffdouglas.com/2007/04/13/forgetting-borrowing-learning/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

