<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://jasonkelly.net/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Jason Kelly&amp;#39;s blog</title><link>http://jasonkelly.net/default.aspx</link><description /><dc:language>en</dc:language><generator>CommunityServer 2007.1 (Build: 20917.1142)</generator><item><title>Portland Code Camp 2009 - Cloud Computing presentation</title><link>http://jasonkelly.net/archive/2009/05/30/portland-code-camp-2009-cloud-computing-presentation.aspx</link><pubDate>Sat, 30 May 2009 19:47:00 GMT</pubDate><guid isPermaLink="false">b8885663-6324-433c-9106-4dd13d716365:22</guid><dc:creator>Jason</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://jasonkelly.net/rsscomments.aspx?PostID=22</wfw:commentRss><comments>http://jasonkelly.net/archive/2009/05/30/portland-code-camp-2009-cloud-computing-presentation.aspx#comments</comments><description>&lt;p&gt;Here are the source files and slides from my presentation on Cloud Computing at &lt;a href="http://www.portlandcloudcamp.com/"&gt;Portland Code Camp&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;Presentation - &lt;a href="http://jasonkelly.net/files/folders/19/download.aspx"&gt;cloudpres.pptx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Azure - &lt;a href="http://jasonkelly.net/files/folders/20/download.aspx"&gt;Wall sample app&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Amazon Web Services - &lt;a href="http://jasonkelly.net/files/folders/21/download.aspx"&gt;Wall sample app&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Thanks for attending!&lt;/p&gt;&lt;img src="http://jasonkelly.net/aggbug.aspx?PostID=22" width="1" height="1"&gt;</description></item><item><title>Improve your offshore code quality: Use static analysis tools</title><link>http://jasonkelly.net/archive/2009/03/02/improve-your-offshore-code-quality-use-static-analysis-tools.aspx</link><pubDate>Tue, 03 Mar 2009 05:45:00 GMT</pubDate><guid isPermaLink="false">b8885663-6324-433c-9106-4dd13d716365:15</guid><dc:creator>Jason</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://jasonkelly.net/rsscomments.aspx?PostID=15</wfw:commentRss><comments>http://jasonkelly.net/archive/2009/03/02/improve-your-offshore-code-quality-use-static-analysis-tools.aspx#comments</comments><description>&lt;p&gt;Static analysis is a technique that analyzes the source code (or compiled object code) of your software. Static analysis tools can help you improve your code quality by alerting you to design issues, performance problems, and maintainability constraints.&lt;/p&gt;  &lt;p&gt;These tools are designed to be integrated into the development process, and we have baked it into ours.&amp;#160; Team Foundation Server even lets you enforce check-in policy so that code that fails FxCop cannot be checked in. We don’t go that far, but every developer is asked to run code analysis before checking in. It’s a key part of our code review process.&lt;/p&gt;  &lt;p&gt;My goal here is not to get developers to blindly change code to make the warnings go away. Rather, each warning that comes up is a change to learn something.&lt;/p&gt;  &lt;p&gt;Here is some C# code that will trigger a common warning: &lt;strong&gt;Do not cast unnecessarily.&lt;/strong&gt;&lt;/p&gt;  &lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;max-height:200px;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;"&gt;   &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;     &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; start_Click(&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; sender, EventArgs e)&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;    Size controlSize = ((Control)sender).Size;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt;    RightToLeft rightToLeftValue = ((Control)sender).RightToLeft;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt;    Control parent = (Control)sender;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt; }&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;This code casts the same&lt;font face="Courier New"&gt;&lt;font face="tahoma"&gt; &lt;/font&gt;object&lt;/font&gt; variable to &lt;font face="courier new"&gt;Control&lt;/font&gt; three times. Casting is slow, so this will have a small negative impact on performance. This can easily be fixed by casting the parameter once and storing it in a local variable. &lt;/p&gt;

&lt;p&gt;You may be thinking that this is going to be a negligible speed increase – and you would probably be right in most cases. However, it’s not just about saving those two unnecessary casts. By seeing this warning and learning how to fix it, the developer will think about this in the future as well. The performance boost lives forever!&lt;/p&gt;

&lt;p&gt;Here’s another one of my favorites: &lt;strong&gt;Do not catch general exception types.&lt;/strong&gt;&lt;/p&gt;

&lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;max-height:200px;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;"&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;try&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;     outStream = File.Open(outFile, FileMode.Open);&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt; }&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;catch&lt;/span&gt; (Exception e)&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt; {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt;     Console.WriteLine(&lt;span style="color:#006080;"&gt;&amp;quot;Unable to open {0}.&amp;quot;&lt;/span&gt;, outFile);&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt; }&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;This is in big bold letters in our coding guidelines document, but it still comes up frequently. The code as written here would catch any exception – even exceptions that have nothing to do with the file operation. It’s important to catch a more specialized exception class – in this case &lt;font face="courier new"&gt;IOException&lt;/font&gt; would be a good choice. Wherever this code is in your application, it should only be handling IO-related exceptions.&amp;#160; &lt;/p&gt;

&lt;p&gt;There is certainly a time and place to catch &lt;font face="courier new"&gt;Exception&lt;/font&gt; and other general types of exceptions – and that’s when it’s appropriate to ignore these messages. The important part is that you take the time to decide what is the right time, and discuss it with others on the team.&lt;/p&gt;

&lt;p&gt;The most frequent objection to using these tools is the noise level. Admittedly, these tools can produce a lot of warnings, especially when running them on pre-existing code. Make the investment! As you bake it into your process, you’ll build up a list of messages to mark as ignorable, and the signal-to-noise ratio will go up day by day. The payback is two-fold; not only do you get more robust code in the project you’re working on, but it’s another way for your team to learn good development practices.&lt;/p&gt;

&lt;p&gt;There are great static analysis tools out there for every platform.&amp;#160;&amp;#160; For .Net programmers, it’s built into Visual Studio Team System, or you can &lt;a href="http://go.microsoft.com/fwlink/?LinkId=70294" target="_blank"&gt;download FxCop for free&lt;/a&gt;. If you’re on a Java project, &lt;a href="http://checkstyle.sourceforge.net/" target="_blank"&gt;Checkstyle&lt;/a&gt; is a good place to start. Whichever platform you’re working on, at least give these tools a shot. &lt;/p&gt;&lt;img src="http://jasonkelly.net/aggbug.aspx?PostID=15" width="1" height="1"&gt;</description><category domain="http://jasonkelly.net/archive/tags/Offshore+Development/default.aspx">Offshore Development</category></item><item><title>Using jQuery &amp; JSONP for cross-domain AJAX with WCF services</title><link>http://jasonkelly.net/archive/2009/02/24/using-jquery-amp-jsonp-for-cross-domain-ajax-with-wcf-services.aspx</link><pubDate>Wed, 25 Feb 2009 04:00:15 GMT</pubDate><guid isPermaLink="false">b8885663-6324-433c-9106-4dd13d716365:14</guid><dc:creator>Jason</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://jasonkelly.net/rsscomments.aspx?PostID=14</wfw:commentRss><comments>http://jasonkelly.net/archive/2009/02/24/using-jquery-amp-jsonp-for-cross-domain-ajax-with-wcf-services.aspx#comments</comments><description>&lt;p&gt;I’m working on a Virtual Earth application that uses AJAX to retrieve points of interest and plot them on the map. The long term direction for this application is to move the data source into the cloud, while the front-end web page is hosted onto a customer site.&lt;/p&gt;  &lt;p&gt;For the front-end, I’ve been using &lt;a href="http://jquery.com" target="_blank"&gt;jQuery&lt;/a&gt;, which now supports cross-domain AJAX with &lt;em&gt;JSON&amp;#160; with Padding &lt;/em&gt;(JSONP). The back-end is a Windows server with SQL Server 2008. &lt;/p&gt;  &lt;p&gt;It’s a bit complicated to get JSONP working with a simple WCF service. Luckily, there’s some sample code on MSDN to do it for you; it’s just not obvious how to take advantage of it.&amp;#160; Here it is in 3 “easy” steps!&lt;/p&gt; 1. Implement and test the WCF service with JSON   &lt;br /&gt;2. Convert the WCF Service to support JSONP   &lt;br /&gt;3. Implement the front end with jQuery   &lt;p&gt;&lt;strong&gt;1. Implement and test the WCF service with&amp;#160; JSON&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Get that WCF service up and running, returning plain-vanilla JSON. This takes a whole host of variables out of the mix – the database connection, WCF endpoint configuration (ugh), etc. You want to end up with a working WCF service with an interface somewhat like this: &lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" size="2"&gt;public interface ILocationService      &lt;br /&gt;&lt;/font&gt;&lt;font face="Courier New" size="2"&gt;{&lt;/font&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font face="Courier New" size="2"&gt;[OperationContract]        &lt;br /&gt;&lt;/font&gt;&lt;font face="Courier New" size="2"&gt;[WebGet(ResponseFormat = WebMessageFormat.Json)]        &lt;br /&gt;&lt;/font&gt;&lt;font face="Courier New" size="2"&gt;Location GetLocation();&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font face="Courier New" size="2"&gt;}&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Test your service with &lt;a href="http://curl.haxx.se/"&gt;cURL&lt;/a&gt;, &lt;a href="http://www.fiddlertool.com/"&gt;Fiddler&lt;/a&gt;, or another suitable tool.&amp;#160; Before you start with JSONP, you want to be able to call this service on localhost with HTTP GET.&lt;/p&gt;  &lt;p&gt;My GetLocation web service returns a current location in JSON, like this:&lt;/p&gt;  &lt;p&gt;&lt;font face="courier new"&gt;{“Latitude”: 47.621389,”Longitude”:-122.356660}&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;2. Convert the WCF Service to support JSONP&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The MSDN article &lt;a href="http://msdn.microsoft.com/en-us/library/cc716898.aspx"&gt;JSON with Padding (AJAX)&lt;/a&gt; has a link to some sample code that will makes JSONP easy. You have to download the massive sample package (just do it, it’s worth it). Once you have the samples unzipped, find the JSONP project in WCFWFCardSpace\WCF\Extensibility\Ajax\JSONP\CS and grab these four files:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://jasonkelly.net/blogs/jason/clip_image002_09931471.jpg"&gt;&lt;img title="clip_image002" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="75" alt="clip_image002" src="http://jasonkelly.net/blogs/jason/clip_image002_thumb_3CEED7CD.jpg" width="194" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Add these files to your project. In a future post I’ll dive into how JSONP works and how these files implement it in WCF. For now, let’s just hook your WCF service up to the JSONP interface.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;The Interface&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The only thing do to in the code is to add the JSONPBehavior attribute to your interface. The example function GetLocation() above becomes the following:&lt;/p&gt; &lt;font face="Courier New" size="2"&gt;public interface ILocationService    &lt;br /&gt;&lt;/font&gt;&lt;font face="Courier New" size="2"&gt;{&lt;/font&gt;   &lt;blockquote&gt;   &lt;p&gt;&lt;font face="Courier New" size="2"&gt;[OperationContract]        &lt;br /&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font size="2"&gt;[WebGet(ResponseFormat = WebMessageFormat.Json)]          &lt;br /&gt;&lt;/font&gt;[JSONPBehavior(callback = &amp;quot;method&amp;quot;)]&lt;/font&gt;&lt;font size="2"&gt;        &lt;br /&gt;&lt;/font&gt;&lt;font face="Courier New" size="2"&gt;Location GetLocation();&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;font face="Courier New" size="2"&gt;}&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;The (callback = “method”) parameter dictates what query string parameter should be sent in the request URI. We’ll see more about that below.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;&lt;strong&gt;Configuration&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;This is where it gets a little hairy.&amp;#160; Getting the configuration right is always the most annoying part of implementing a WCF service. Here’s the system.serviceModel section from my Web.config:&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;pre style="border-right:#cecece 1px solid;padding-right:5px;border-top:#cecece 1px solid;padding-left:5px;min-height:40px;padding-bottom:5px;overflow:auto;border-left:#cecece 1px solid;width:650px;padding-top:5px;border-bottom:#cecece 1px solid;background-color:#fbfbfb;"&gt;&lt;pre style="font-size:10px;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#fbfbfb;"&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;system.serviceModel&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="font-size:10px;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#fbfbfb;"&gt;  &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;behaviors&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="font-size:10px;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#fbfbfb;"&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;endpointBehaviors&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="font-size:10px;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#fbfbfb;"&gt;      &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;behavior&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;name&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;LocationServiceBehavior&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="font-size:10px;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#fbfbfb;"&gt;        &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;webHttp&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="font-size:10px;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#fbfbfb;"&gt;      &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;behavior&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="font-size:10px;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#fbfbfb;"&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;endpointBehaviors&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;  
&lt;/pre&gt;&lt;pre style="font-size:10px;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#fbfbfb;"&gt;  &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;behaviors&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="font-size:10px;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#fbfbfb;"&gt;  
&lt;/pre&gt;&lt;pre style="font-size:10px;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#fbfbfb;"&gt;  &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;services&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="font-size:10px;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#fbfbfb;"&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;service&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;name&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;LocationServiceJSONP.LocationService&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="font-size:10px;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#fbfbfb;"&gt;	&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;endpoint&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;address&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;&amp;quot;&lt;/span&gt; 
&lt;/pre&gt;&lt;pre style="font-size:10px;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#fbfbfb;"&gt;                &lt;span style="color:#ff0000;"&gt;binding&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;customBinding&amp;quot;&lt;/span&gt; 
&lt;/pre&gt;&lt;pre style="font-size:10px;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#fbfbfb;"&gt;                &lt;span style="color:#ff0000;"&gt;bindingConfiguration&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;jsonpBinding&amp;quot;&lt;/span&gt; 
&lt;/pre&gt;&lt;pre style="font-size:10px;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#fbfbfb;"&gt;                &lt;span style="color:#ff0000;"&gt;behaviorConfiguration&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;LocationServiceBehavior&amp;quot;&lt;/span&gt; 
&lt;/pre&gt;&lt;pre style="font-size:10px;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#fbfbfb;"&gt;                &lt;span style="color:#ff0000;"&gt;contract&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;LocationServiceJSONP.ILocationService&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="font-size:10px;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#fbfbfb;"&gt;	&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;endpoint&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="font-size:10px;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#fbfbfb;"&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;service&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="font-size:10px;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#fbfbfb;"&gt;  &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;services&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="font-size:10px;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#fbfbfb;"&gt;&lt;/pre&gt;&lt;pre style="font-size:10px;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#fbfbfb;"&gt;  &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;bindings&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="font-size:10px;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#fbfbfb;"&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;customBinding&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="font-size:10px;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#fbfbfb;"&gt;      &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;binding&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;name&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;jsonpBinding&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="font-size:10px;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#fbfbfb;"&gt;        &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;jsonpMessageEncoding&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="font-size:10px;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#fbfbfb;"&gt;        &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;httpTransport&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;manualAddressing&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;true&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="font-size:10px;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#fbfbfb;"&gt;      &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;binding&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="font-size:10px;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#fbfbfb;"&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;customBinding&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="font-size:10px;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#fbfbfb;"&gt;  &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;bindings&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="font-size:10px;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#fbfbfb;"&gt;  
&lt;/pre&gt;&lt;pre style="font-size:10px;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#fbfbfb;"&gt;  &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;extensions&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="font-size:10px;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#fbfbfb;"&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;bindingElementExtensions&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="font-size:10px;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#fbfbfb;"&gt;      &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;add&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;name&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;jsonpMessageEncoding&amp;quot;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="font-size:10px;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#fbfbfb;"&gt;           &lt;span style="color:#ff0000;"&gt;type&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;Microsoft.Ajax.Samples.JsonpBindingExtension, LocationServiceJSONP,
&lt;/pre&gt;&lt;pre style="font-size:10px;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#fbfbfb;"&gt; Version=1.0.0.0, Culture=neutral, PublicKeyToken=null&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="font-size:10px;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#fbfbfb;"&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;bindingElementExtensions&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="font-size:10px;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#fbfbfb;"&gt;  &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;extensions&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="font-size:10px;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#fbfbfb;"&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;system.serviceModel&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="font-size:10px;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#fbfbfb;"&gt;&lt;/pre&gt;&lt;/pre&gt;

&lt;p&gt;&lt;font size="2"&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;Remember the (callback = “method”) parameter in the JSONPBehavior attribute? That’s the key to making sure this works.&amp;#160; To trigger the JSONP behavior, you must put a “method” parameter in the query string with the name of the callback method that will be used to wrap the JSON:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://yourserver.com/LocationService.svc/GetLocation?method=jsonpCallback"&gt;http://yourserver.com/LocationService.svc/GetLocation?method=jsonpCallback&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This causes the JSON returned by the service to be wrapped in the callback method you specified:&lt;/p&gt;

&lt;p&gt;&lt;font face="courier new"&gt;jsonpCallback( {“Latitude”: 47.621389,”Longitude”:-122.356660} );&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Implement the front end with jQuery&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Finally! It’s time to implement this on the front end. In your web page, make the web service call like this:&lt;/p&gt;

&lt;p&gt;&lt;font face="Courier New" size="2"&gt;$.getJSON(&amp;quot;http://yourserver.com/LocationService.svc/GetLocation?&lt;strong&gt;method=?&lt;/strong&gt;”, callback);&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font face="Courier New" size="2"&gt;function callback(data) {
    &lt;br /&gt;// data is the JSON returned – do whatever you want with it!

    &lt;br /&gt;}&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;method=? &lt;/strong&gt;syntax tells jQuery to fill in the “method” parameter with the JSONP callback it generates. The rest is transparent to you – your function gets the unwrapped JSON.&lt;/p&gt;

&lt;p&gt;There you go! JSONP lets you do cross-domain web service calls from any web page, as long as the target service supports JSONP. &lt;/p&gt;&lt;img src="http://jasonkelly.net/aggbug.aspx?PostID=14" width="1" height="1"&gt;</description><category domain="http://jasonkelly.net/archive/tags/Development_2F00_Tech/default.aspx">Development/Tech</category></item><item><title>Quote of the Day: Jetpack Safety</title><link>http://jasonkelly.net/archive/2008/07/29/quote-of-the-day-jetpack-safety.aspx</link><pubDate>Tue, 29 Jul 2008 17:01:00 GMT</pubDate><guid isPermaLink="false">b8885663-6324-433c-9106-4dd13d716365:13</guid><dc:creator>Jason</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://jasonkelly.net/rsscomments.aspx?PostID=13</wfw:commentRss><comments>http://jasonkelly.net/archive/2008/07/29/quote-of-the-day-jetpack-safety.aspx#comments</comments><description>&lt;p&gt;&amp;quot;We think we have done a lot to make this by far the safest jetpack ever built. But it&amp;#39;s not a high bar.&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;--&lt;/em&gt;Glenn Martin, in the New York Times, July 29, 2008, A13&lt;/p&gt;
&lt;p&gt;&lt;img height="358" alt="" src="http://msnbcmedia.msn.com/j/msnbc/Components/Photo/_new/080729-coslog-jetpack-vmed-930a.vlarge.jpg" width="239" border="0" /&gt;&lt;/p&gt;&lt;img src="http://jasonkelly.net/aggbug.aspx?PostID=13" width="1" height="1"&gt;</description></item><item><title>New Release: Windows Live Quick Applications</title><link>http://jasonkelly.net/archive/2008/07/24/new-release-windows-live-quick-applications.aspx</link><pubDate>Thu, 24 Jul 2008 19:38:00 GMT</pubDate><guid isPermaLink="false">b8885663-6324-433c-9106-4dd13d716365:12</guid><dc:creator>Jason</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://jasonkelly.net/rsscomments.aspx?PostID=12</wfw:commentRss><comments>http://jasonkelly.net/archive/2008/07/24/new-release-windows-live-quick-applications.aspx#comments</comments><description>&lt;p&gt;One of my jobs at &lt;a class="" href="http://www.akonaconsulting.com/" target="_blank"&gt;Akona Consulting&lt;/a&gt;&amp;nbsp;is to run the dev team that releases Microsoft&amp;#39;s &lt;a class="" href="http://codeplex.com/wlquickapps" target="_blank"&gt;Windows Live Quick Applications&lt;/a&gt;. That&amp;#39;s why I&amp;#39;m excited to announce that we&amp;#39;ve recently released a whole bunch of new Quick Applications - here&amp;#39;s the &amp;quot;&lt;a class="" href="http://dev.live.com/blogs/devlive/archive/2008/07/24/350.aspx" target="_blank"&gt;press release&lt;/a&gt;&amp;quot;.&lt;/p&gt;
&lt;p&gt;The Quick Applications are sample open-source web applications that show you how to build sites with the Windows Live Platform. Anyone can grab this source code and use it as the starting point for their own site - even if its a commercial site!&lt;/p&gt;
&lt;p&gt;Here&amp;#39;s a few money shots of some of the sites:&lt;/p&gt;
&lt;p&gt;&lt;img height="151" alt="" src="http://www.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=WLQuickApps&amp;amp;DownloadId=39736" width="208" border="0" /&gt;&lt;img height="151" alt="" src="http://www.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=WLQuickApps&amp;amp;DownloadId=34314" width="208" border="0" /&gt;&lt;img height="1" alt="" src="http://www.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=WLQuickApps&amp;amp;DownloadId=35493" width="1" border="0" /&gt;&lt;img height="151" alt="" src="http://www.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=WLQuickApps&amp;amp;DownloadId=36446" width="208" border="0" /&gt;&lt;img height="151" alt="" src="http://www.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=WLQuickApps&amp;amp;DownloadId=23983" width="208" border="0" /&gt;&lt;/p&gt;
&lt;p&gt;Check out the sites and the code.. and if you have any questions about what you can do with the &lt;a class="" href="http://dev.live.com/" target="_blank"&gt;Windows Live Platform&lt;/a&gt; just shoot me an email - jason at jasonkelly dot net.&lt;/p&gt;&lt;img src="http://jasonkelly.net/aggbug.aspx?PostID=12" width="1" height="1"&gt;</description></item><item><title>Zynga makes bank; Facebook apps still have VC potential</title><link>http://jasonkelly.net/archive/2008/07/22/zynga-makes-bank-facebook-apps-still-have-vc-potential.aspx</link><pubDate>Wed, 23 Jul 2008 05:05:00 GMT</pubDate><guid isPermaLink="false">b8885663-6324-433c-9106-4dd13d716365:11</guid><dc:creator>Jason</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://jasonkelly.net/rsscomments.aspx?PostID=11</wfw:commentRss><comments>http://jasonkelly.net/archive/2008/07/22/zynga-makes-bank-facebook-apps-still-have-vc-potential.aspx#comments</comments><description>&lt;p&gt;I read about &lt;a class="" href="http://online.wsj.com/article_email/SB121677837315476021-lMyQjAxMDI4MTI2MzcyNzM4Wj.html"&gt;Zynga&amp;#39;s $29 million round of VC funding&lt;/a&gt; [wsj.com] just after getting home from Bill Bryant&amp;#39;s StartPad presentation &amp;quot;Venture Capital - The Good, Bad and Ugly&amp;quot;.&amp;nbsp; Considering that just last week I was reading about &lt;a class="" href="http://valleywag.com/5025859/source-vc-for-facebook-widgetmakers-is-drying-up"&gt;VC&amp;#39;s going dry on Facebook apps&lt;/a&gt;, the timing couldn&amp;#39;t be better.&lt;/p&gt;
&lt;p&gt;Zynga seems to have found the magic formula - build a simple, immersive experience that Facebook is not likely to copy. Games are just the ticket - they are getting tons&amp;nbsp;of casual gamer&amp;nbsp;eyeballs and keeping those eyes glued to the game for long periods. There&amp;#39;s no better ad opportunity on Facebook.&lt;/p&gt;
&lt;p&gt;What about Zynga&amp;#39;s next step - are they going to really push their &lt;a class="" href="http://www.zynga.com/developer.php"&gt;developer platform&lt;/a&gt;?&amp;nbsp;They have the chance to be a huge casual gaming platform, but their big Series B round must be going chiefly to developing new first-party games. It&amp;#39;ll be interesting to see what happens with the third-party story.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://jasonkelly.net/aggbug.aspx?PostID=11" width="1" height="1"&gt;</description></item><item><title>"Venture Capital Unplugged" at StartPad in Seattle</title><link>http://jasonkelly.net/archive/2008/07/20/quot-venture-capital-unplugged-quot-at-startpad-in-seattle.aspx</link><pubDate>Sun, 20 Jul 2008 21:57:00 GMT</pubDate><guid isPermaLink="false">b8885663-6324-433c-9106-4dd13d716365:10</guid><dc:creator>Jason</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://jasonkelly.net/rsscomments.aspx?PostID=10</wfw:commentRss><comments>http://jasonkelly.net/archive/2008/07/20/quot-venture-capital-unplugged-quot-at-startpad-in-seattle.aspx#comments</comments><description>&lt;p&gt;I&amp;#39;ve trying to learn everything I can about starting up a new business. Along the way, I&amp;#39;d like to get acquainted with those who&amp;#39;ve done it and those who are in the business of funding it.&lt;/p&gt;
&lt;p&gt;Along those lines, there&amp;#39;s an interesting event coming up at &lt;a class="" href="http://startpad.org/" target="_blank"&gt;StartPad&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;Venture Capital Unplugged -&amp;nbsp;The Good, Bad, and Ugly&lt;br /&gt;&lt;a href="http://startpad.org/countdown/venture-capital-unplugged-the-good-bad-and-ugly"&gt;http://startpad.org/countdown/venture-capital-unplugged-the-good-bad-and-ugly&lt;/a&gt;&lt;br /&gt;When: 6:00 pm, Tuesday, July 22, 2008&lt;br /&gt;Where: StartPad offices, 811 First Avenue, Ste. 480, Seattle&lt;/p&gt;
&lt;p&gt;Hope to see you there if you&amp;#39;re interested too...&lt;/p&gt;&lt;img src="http://jasonkelly.net/aggbug.aspx?PostID=10" width="1" height="1"&gt;</description></item><item><title>SocialMediaCamp Presentation on Data Portability</title><link>http://jasonkelly.net/archive/2008/07/13/socialmediacamp-presentation-on-data-portability.aspx</link><pubDate>Mon, 14 Jul 2008 00:52:00 GMT</pubDate><guid isPermaLink="false">b8885663-6324-433c-9106-4dd13d716365:9</guid><dc:creator>Jason</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://jasonkelly.net/rsscomments.aspx?PostID=9</wfw:commentRss><comments>http://jasonkelly.net/archive/2008/07/13/socialmediacamp-presentation-on-data-portability.aspx#comments</comments><description>&lt;p&gt;Here are the &lt;a class="" href="http://www.slideshare.net/JasonKelly/data-portability-at-social-media-camp-seattle" target="_blank"&gt;slides from my presentation on Data Portability&lt;/a&gt; at &lt;a class="" href="http://barcamp.pbwiki.com/SocialMediaCamp" target="_blank"&gt;Social Media Camp Seattle&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;It was my first BarCamp presentation and I&amp;#39;m really glad I did it. It&amp;#39;s a great format, especially because it was so easy to get a conversation started.&amp;nbsp; Instead of the standard &amp;quot;presentation followed by Q&amp;amp;A&amp;quot;, it was more like as the presenter, I was spurring a discussion.&lt;/p&gt;
&lt;p&gt;Looking forward to the next one!&lt;/p&gt;&lt;img src="http://jasonkelly.net/aggbug.aspx?PostID=9" width="1" height="1"&gt;</description></item><item><title>Who's at Social Media Camp Seattle?</title><link>http://jasonkelly.net/archive/2008/07/12/who-s-at-social-media-camp-seattle.aspx</link><pubDate>Sat, 12 Jul 2008 20:28:00 GMT</pubDate><guid isPermaLink="false">b8885663-6324-433c-9106-4dd13d716365:8</guid><dc:creator>Jason</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://jasonkelly.net/rsscomments.aspx?PostID=8</wfw:commentRss><comments>http://jasonkelly.net/archive/2008/07/12/who-s-at-social-media-camp-seattle.aspx#comments</comments><description>&lt;p&gt;I&amp;#39;m sitting at &lt;a class="" href="http://barcamp.pbwiki.com/SocialMediaCamp" target="_blank"&gt;Social Media Camp&lt;/a&gt;&amp;nbsp;in Seattle.. It&amp;#39;s an approachable, intimate group of about 75 people, most wandering between the two presentation rooms and the open space in the middle. There&amp;#39;s a nice buzz going on about social media. It seems like everyone here is either working in a startup, revving up their own startup, or (like me) just about to make that commitment to get something started. &lt;/p&gt;
&lt;p&gt;The BarCamp format is ideal for this kind of gathering. Those who probably wouldn&amp;#39;t take the mantle of presenting at one of the big conferences are getting up and sharing what they&amp;#39;re working on and what they are passionate about. It&amp;#39;s just the kind of place for a recalcitrant presenter like me!&lt;/p&gt;
&lt;p&gt;I&amp;#39;m bummed that I already missed &lt;a class="" href="http://barcamp.org/BarCampSeattle"&gt;BarCamp Seattle 2008&lt;/a&gt;. I&amp;#39;d love to go to a more targeted BarCamp in Seattle later this year.. any pointers? Or do you want to set one up? Drop me a line.&lt;/p&gt;&lt;img src="http://jasonkelly.net/aggbug.aspx?PostID=8" width="1" height="1"&gt;</description></item><item><title>Social Media Camp - I'm presenting in Seattle</title><link>http://jasonkelly.net/archive/2008/07/11/social-media-camp-i-m-presenting-in-seattle.aspx</link><pubDate>Fri, 11 Jul 2008 19:10:00 GMT</pubDate><guid isPermaLink="false">b8885663-6324-433c-9106-4dd13d716365:7</guid><dc:creator>Jason</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://jasonkelly.net/rsscomments.aspx?PostID=7</wfw:commentRss><comments>http://jasonkelly.net/archive/2008/07/11/social-media-camp-i-m-presenting-in-seattle.aspx#comments</comments><description>&lt;p&gt;Tomorrow (Saturday, July 12, 2008) is &lt;a class="" title="Social Media Camp" href="http://barcamp.pbwiki.com/SocialMediaCamp" target="_blank"&gt;Social Media Camp&lt;/a&gt; in Seattle. Social Media Camp is a &lt;a class="" href="http://barcamp.pbwiki.com/" target="_blank"&gt;BarCamp&lt;/a&gt;&amp;nbsp;targeted to those interested in Social Media and community-based marketing.&lt;/p&gt;
&lt;p&gt;&lt;img height="206" alt="Social Media Camp Seattle" src="http://barcamp.pbwiki.com/f/seattle_logo-1.gif" width="242" border="0" /&gt;&lt;/p&gt;
&lt;p&gt;I&amp;#39;ve never even attended a BarCamp, but I figured I should just go boldly into it... So I&amp;#39;m presenting a session on Data Portability. I&amp;#39;ve recently started singing the praises of Data Portability, because I&amp;#39;m feeling a growing sense of ownership of my social data. The tools being built out there to create and share social data are changing the world, for sure. But they&amp;#39;re just tools, after all. The data we create has a life of its own beyond those tools - and we should be able to do with it as we please.&lt;/p&gt;
&lt;p&gt;The benefits of Data Portability go far beyond the ideals of freedom and ownership - it presents great business opportunities as well. &lt;a class="" href="http://www.yoono.com/" target="_blank"&gt;Yoono&lt;/a&gt; is the primary sponsor of Social Media Camp, and they probably wouldn&amp;#39;t even exist if it weren&amp;#39;t for the fledgling efforts the big social media companies have made toward portability. &lt;/p&gt;
&lt;p&gt;The most passionate supporters of Data Portability put together a working group - &lt;a class="" href="http://www.dataportability.org/" target="_blank"&gt;The DataPortability Project&lt;/a&gt;&amp;nbsp;- to encourage services to use open standards. Many of the big companies in this space have joined the group (deep breath... LinkedIn, Twitter, Flickr, SixApart, Google, Facebook, Microsoft, et al). So if you care about Data Portability, throw a little support behind The DataPortability Project; they have the attention of the big guys.&lt;/p&gt;&lt;img src="http://jasonkelly.net/aggbug.aspx?PostID=7" width="1" height="1"&gt;</description></item><item><title>Time for Visual Studio 2008</title><link>http://jasonkelly.net/archive/2007/10/29/time-for-visual-studio-2008.aspx</link><pubDate>Tue, 30 Oct 2007 06:04:00 GMT</pubDate><guid isPermaLink="false">b8885663-6324-433c-9106-4dd13d716365:4</guid><dc:creator>Jason</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://jasonkelly.net/rsscomments.aspx?PostID=4</wfw:commentRss><comments>http://jasonkelly.net/archive/2007/10/29/time-for-visual-studio-2008.aspx#comments</comments><description>&lt;p&gt;It&amp;#39;s time to download &lt;a class="" href="http://weblogs.asp.net/scottgu/archive/2007/07/26/vs-2008-and-net-3-5-beta-2-released.aspx"&gt;VS2008 Beta 2&lt;/a&gt;.&amp;nbsp; While I&amp;#39;ve done plenty of coding in .Net 2.0, for the past couple of years I&amp;#39;ve been heads-down on a project that is a little bit stuck in the past.&amp;nbsp; We have millions of lines of code targeting version 1.1 of the framework, running 24x7 in our production datacenter&amp;nbsp;- which means much of my day-to-day work has been in VS2003.&amp;nbsp; After VS2008 releases we&amp;#39;re going to make the big upgrade to v3.5 and VS2008.&lt;/p&gt;
&lt;p&gt;Here&amp;#39;s what I&amp;#39;m looking forward to trying out tonight:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div&gt;&lt;a class="" href="http://weblogs.asp.net/scottgu/archive/2007/06/20/vs-2008-multi-targeting-support.aspx"&gt;Multi-targeting support&lt;/a&gt;&amp;nbsp;- not having to start up a completely different toolset just because I&amp;#39;m maintaining an older app will save so much time.&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&lt;a class="" href="http://weblogs.asp.net/scottgu/archive/2007/06/21/vs-2008-javascript-intellisense.aspx"&gt;JavaScript Intellisense and Debugging&lt;/a&gt;&amp;nbsp;- it&amp;#39;s about time!&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&lt;a class="" href="http://weblogs.asp.net/scottgu/archive/2007/05/19/using-linq-to-sql-part-1.aspx"&gt;LINQ&lt;/a&gt;&amp;nbsp;- we have a great solution for generating stored-procedure wrappers, but I look forward to be able to concisely express data logic in my applications.&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Let&amp;#39;s give it a run!&lt;/p&gt;&lt;img src="http://jasonkelly.net/aggbug.aspx?PostID=4" width="1" height="1"&gt;</description><category domain="http://jasonkelly.net/archive/tags/Development_2F00_Tech/default.aspx">Development/Tech</category></item></channel></rss>