<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-5069773377440884070</atom:id><lastBuildDate>Wed, 29 May 2013 18:19:02 +0000</lastBuildDate><category>linux</category><category>kindle</category><category>install</category><category>jquery</category><category>tech</category><category>iphone</category><category>truestory</category><category>photography</category><category>ajax</category><category>rss</category><category>twitter</category><category>programming</category><category>development</category><category>internet</category><category>tmpl</category><category>asp.net</category><category>.net</category><category>gsa</category><category>writing</category><category>service</category><category>blog</category><category>nba</category><category>vb.net</category><category>backup</category><title>jonwear.com</title><description>Jon Wear's personal website.</description><link>http://www.jonwear.com/</link><managingEditor>noreply@blogger.com (Jon Wear)</managingEditor><generator>Blogger</generator><openSearch:totalResults>24</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/Jonwearcom" /><feedburner:info uri="jonwearcom" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5069773377440884070.post-6962136586522677607</guid><pubDate>Tue, 21 Feb 2012 16:24:00 +0000</pubDate><atom:updated>2012-02-21T11:24:35.644-05:00</atom:updated><title>Trouble with the jQuery-tmpl plugin</title><description>I used the jquery-tmpl plugin extensively on the&lt;a href="https://www.docphin.com/" target="_blank"&gt; Docphin&lt;/a&gt; website. &amp;nbsp;It is a great tool and allowed me to do some &amp;nbsp;things without all the normal asp.net web form bloat. &amp;nbsp;However, there was one small (make that large) problem. &amp;nbsp;The site didn't work from inside any VA hospital. &amp;nbsp;Well, the site worked but the parts of the site that relied on the jquery tmpl plugin didn't work and it just so happened that most of the content of the site relied on it. &amp;nbsp;No good. &lt;br /&gt;
&lt;br /&gt;
It was baffling. &amp;nbsp;The site worked fine across all browsers but at two different VA hospitals, the site would fail when it tried to apply the jquery template to the returned data context. &amp;nbsp;I could see through firebug that the data had returned and that it was correct, but when it hit the .appendTo method I would get:&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;Object doesn’t support this property or method&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
Drove me crazy. &amp;nbsp;I setup a demo page that did a very simple call to the plugin, but that&amp;nbsp;didn't work either. &amp;nbsp;I tried updating my jQuery include thinking that maybe there was something about an older version that&amp;nbsp;didn't work well. &amp;nbsp;I'd read on &lt;a href="http://www.borismoore.com/2010/10/jquery-templates-is-now-official-jquery.html" target="_blank"&gt;Boris Moore's&lt;/a&gt; blog (he's the author of the plugin) that tmpl was being depreciated and that JsView and JsRender were taking over. &amp;nbsp;I wrote demo pages for those newer plugins as well. &amp;nbsp;They all worked fine except at the VA. &amp;nbsp;They all returned the same error those locations.&lt;br /&gt;
&lt;br /&gt;
I tried a few other things but I decided to work on something else and come back to the problem later. &amp;nbsp;One of those other things was to give the docphin website an SSL certificate. &amp;nbsp;I installed it and made sure&amp;nbsp;everything&amp;nbsp;on the pages were calling outside resources through SSL so that I wouldn't get those annoying "not everything on the page is encrypted" notifications. &amp;nbsp;Once that was set, I had someone test the site again from the VA hospital, just to see if SSL made any difference. &amp;nbsp;It did. &amp;nbsp;No more problems. The tmpl worked fine.&lt;br /&gt;
&lt;br /&gt;
So my guess is that the network security rules at the VA hospitals prevents non&amp;nbsp;encrypted&amp;nbsp;ajax calls that make use of non standard script types(in this case the&amp;nbsp;&lt;span style="color: red; font-size: 14px; line-height: 22px; text-align: left;"&gt;type&lt;/span&gt;&lt;span style="color: #333333; font-size: 14px; line-height: 22px; text-align: left;"&gt;="&lt;/span&gt;&lt;span style="color: blue; font-size: 14px; line-height: 22px; text-align: left;"&gt;text/x-jquery-tmpl)&lt;/span&gt;. &amp;nbsp;That's a mouthful, but that appears to be it. &amp;nbsp;I haven't tried it with JsView and JsRender yet, but I assume it will work.&lt;br /&gt;
&lt;br /&gt;
So, if you are using the jQuery tmpl plugin on a website and it keeps failing on the .appendTo() method at a specific location but it works everywhere else, try making the site SSL. &amp;nbsp;It works if you are at the VA.&lt;img src="http://feeds.feedburner.com/~r/Jonwearcom/~4/RBsuGOdRg0I" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Jonwearcom/~3/RBsuGOdRg0I/trouble-with-jquery-tmpl-plugin.html</link><author>noreply@blogger.com (Jon Wear)</author><thr:total>0</thr:total><feedburner:origLink>http://www.jonwear.com/2012/02/trouble-with-jquery-tmpl-plugin.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5069773377440884070.post-1386890140836654415</guid><pubDate>Mon, 04 Jul 2011 04:35:00 +0000</pubDate><atom:updated>2011-07-11T22:32:23.971-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">jquery</category><category domain="http://www.blogger.com/atom/ns#">asp.net</category><title>jQuery tmpl page size vs. asp.net server control page size.</title><description>My &lt;a href="http://www.jonwear.com/2011/07/jquery-tmpl-plugin-example-for-aspnet.html"&gt;previous post&lt;/a&gt; went over how to do a simple data bind using client side data binding with the &lt;a href="http://api.jquery.com/jquery.tmpl/"&gt;jQuery tmpl plugin&lt;/a&gt; as opposed to data source objects and grid server controls that are often used with asp.net. &amp;nbsp;I think it's better way to go when possible. &amp;nbsp;One of the benefits of the tmpl plugin is that the page size is &lt;i&gt;much&lt;/i&gt;&amp;nbsp;smaller and you get to do away with all that &lt;a href="http://msdn.microsoft.com/en-us/library/bb386448.aspx"&gt;view state&lt;/a&gt;. &lt;br /&gt;
&lt;br /&gt;
I created a new project that does the same thing as the &lt;a href="https://docs.google.com/leaf?id=0B6Wwk39_GwMaMDRmNTU0NDgtZGQ3OC00MDI1LWJiYzgtYTMwYTI2ODI3NjRk&amp;amp;hl=en_US"&gt;project&lt;/a&gt; from my previous post, only it uses asp.net UI server controls as well as the &lt;a href="http://msdn.microsoft.com/en-us/magazine/cc163354.aspx"&gt;script manager&lt;/a&gt; and &lt;a href="http://msdn.microsoft.com/en-us/magazine/cc163354.aspx"&gt;update panel&lt;/a&gt;&amp;nbsp;controls. &amp;nbsp;You can download the new project&amp;nbsp;&lt;a href="https://docs.google.com/leaf?id=0B6Wwk39_GwMaMTQ2YWNkYjEtMWFhZS00OWI3LTg4OTQtMDFkNGIwODM0MjU0&amp;amp;hl=en_US"&gt;here&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Figures&amp;nbsp;1,2 and 3 are&amp;nbsp;screen shots&amp;nbsp;of &amp;nbsp;web page properties from the new project along with a description of what you are looking at. &amp;nbsp;The main thing we care about is page size.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-jnBeJCB22TM/ThuoDYSdtuI/AAAAAAAAE9k/jn1n8s0Awn4/s1600/normaljoajax.png" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="320" id=":current_picnik_image" src="http://4.bp.blogspot.com/-jnBeJCB22TM/ThuoDYSdtuI/AAAAAAAAE9k/jn1n8s0Awn4/s320/normaljoajax.png" width="261" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Figure 1&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
Have a look at figure 1. &amp;nbsp;This is just a plain asp.net page that has no ajax on it. &amp;nbsp;Just regular&amp;nbsp;post backs. &amp;nbsp;Notice the page size is 4,766 bytes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-YtO1c9zTP_o/Thuos1j0qKI/AAAAAAAAE9o/RJqiAmHP_vI/s1600/withsm.png" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/-YtO1c9zTP_o/Thuos1j0qKI/AAAAAAAAE9o/RJqiAmHP_vI/s320/withsm.png" width="259" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Figure 2&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
In figure 2 the same project, but we added a script manager tag which is required for a .net page that's going to use the ajax control tool kit or any of the ajax controls like the update panel. &amp;nbsp;Notice the size has jumped to 6,433 bytes and we haven't even added any update panels yet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-gXb3M0vTFqk/ThupHwVNkJI/AAAAAAAAE9s/i0efUCv34Qs/s1600/withup.png" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/-gXb3M0vTFqk/ThupHwVNkJI/AAAAAAAAE9s/i0efUCv34Qs/s320/withup.png" width="262" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Figure 3&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
Here in figure three we have added the update panel, so that now our application mimics the jQuery application from the previous post. &amp;nbsp;Notice the size of the page is now 6,562 bytes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-HN3Vbj6dmBU/ThurB6KvSzI/AAAAAAAAE9w/f_QKg3KNy9I/s1600/tmpl.png" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/-HN3Vbj6dmBU/ThurB6KvSzI/AAAAAAAAE9w/f_QKg3KNy9I/s320/tmpl.png" width="260" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Figure 4&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
Now in figure 4 I'm running the jQuery tmpl demo application from the previous post. &amp;nbsp;Notice the page size is 2,037 bytes. &amp;nbsp;That's less than 1/3 the size of the server control version using the script manager and the update panel. &amp;nbsp;No big deal you say? &amp;nbsp;In the world if 3G, it is a big deal. &amp;nbsp;On a network with lots of traffic, it is a big deal. &amp;nbsp; I think it's a more elegant solution. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Note: The property pages are from Internet Explorer 8, but the type is Chrome HTML Document because Chrome is my default browser.&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/Jonwearcom/~4/0wOd6NuBAIk" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Jonwearcom/~3/0wOd6NuBAIk/jquery-tmpl-page-size-vs-aspnet-server.html</link><author>noreply@blogger.com (Jon Wear)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-jnBeJCB22TM/ThuoDYSdtuI/AAAAAAAAE9k/jn1n8s0Awn4/s72-c/normaljoajax.png" height="72" width="72" /><thr:total>0</thr:total><georss:featurename>Philadelphia, PA, USA</georss:featurename><georss:point>39.952335 -75.16378900000001</georss:point><georss:box>39.816841 -75.32605900000001 40.087829 -75.001519</georss:box><feedburner:origLink>http://www.jonwear.com/2011/07/jquery-tmpl-page-size-vs-aspnet-server.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5069773377440884070.post-5488324394052639919</guid><pubDate>Sun, 03 Jul 2011 01:45:00 +0000</pubDate><atom:updated>2011-07-04T00:34:47.591-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">development</category><category domain="http://www.blogger.com/atom/ns#">.net</category><category domain="http://www.blogger.com/atom/ns#">jquery</category><category domain="http://www.blogger.com/atom/ns#">tmpl</category><title>jQuery tmpl plugin example for ASP.Net</title><description>Originally I was going to call this post, "Look Ma! &amp;nbsp;No view state!" but view state isn't really what I to talk about it. &amp;nbsp;This example will have no view state, but that's a side benefit.&lt;br /&gt;
&lt;br /&gt;
What I want to talk about is client side data binding with jQuery. &amp;nbsp;The &lt;a href="http://api.jquery.com/jquery.tmpl/"&gt;jQuery tmpl plugin&lt;/a&gt; has been documented in a number of places and I'm not going to show anything new here. &amp;nbsp;This post is intended to be a simple example for people still using data grids and heavy .Net server controls. &amp;nbsp;This example won't use any server controls. &amp;nbsp;We won't have a &lt;b&gt;form&lt;/b&gt; tag and there will be no code behind. &amp;nbsp;Let's get to it.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Step 1: Create a web service&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Here's our simple web service. &amp;nbsp;I called it "wsPlayers". &amp;nbsp;It has one method and returns a list of custom objects based on a simple NBAPlayer class. &amp;nbsp;Be sure to uncomment the line...&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;[System.Web.Script.Services.ScriptService]&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
...so that the web methods in the service can be called from client side JavaScript.  We will also want to add a reference to the Script.Services namespace at the top of the file...&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;using System.Web.Script.Services;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
...so that we can change the format of our web method to JSON (it's XML by default).&lt;br /&gt;
&lt;br /&gt;
So here is the full &amp;nbsp;text of our web service method:&lt;br /&gt;
&lt;br /&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
 font-size: 13.3333px;
 font-width: 400;
 color: black;
 font-family: "Courier New";
}
.csharpcode pre { margin: 0px; }
.csharpcode .comment { color: #008000; }
.csharpcode .comment2 { color: #808080; }
.csharpcode .type { color: #2B91AF; }
.csharpcode .keyword { color: #0000FF; }
.csharpcode .string { color: #A31515; }
.csharpcode .preproc { color: #0000FF; }
&lt;/style&gt;&lt;br /&gt;
&lt;div class="csharpcode"&gt;Code:&lt;br /&gt;
&lt;pre style="background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; color: black; overflow-x: auto; overflow-y: hidden; padding: 0px; text-align: left; word-wrap: normal;"&gt;&lt;span class="keyword"&gt;using&lt;/span&gt; System;
&lt;span class="keyword"&gt;using&lt;/span&gt; System.Collections.Generic;
&lt;span class="keyword"&gt;using&lt;/span&gt; System.Linq;
&lt;span class="keyword"&gt;using&lt;/span&gt; System.Web;
&lt;span class="keyword"&gt;using&lt;/span&gt; System.Web.Services;
&lt;span class="keyword"&gt;using&lt;/span&gt; System.Web.Script.Services; &lt;span class="comment"&gt;//Have to add this namespace for the ResponseFormat on the webmethod).&lt;/span&gt;
   
&lt;span class="keyword"&gt;namespace&lt;/span&gt; tmplDemo
{
 &lt;span class="comment2"&gt;///&lt;/span&gt;&lt;span class="comment"&gt; &lt;/span&gt;&lt;span class="comment2"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span class="comment"&gt;&lt;/span&gt;
 &lt;span class="comment2"&gt;///&lt;/span&gt;&lt;span class="comment"&gt; Summary description for wsPlayers&lt;/span&gt;
 &lt;span class="comment2"&gt;///&lt;/span&gt;&lt;span class="comment"&gt; &lt;/span&gt;&lt;span class="comment2"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span class="comment"&gt;&lt;/span&gt;
 [&lt;span class="type"&gt;WebService&lt;/span&gt;(&lt;span class="type"&gt;Namespace&lt;/span&gt; = &lt;span class="string"&gt;"http://tmplDemo/"&lt;/span&gt;)]
 [&lt;span class="type"&gt;WebServiceBinding&lt;/span&gt;(ConformsTo = WsiProfiles.BasicProfile1_1)]
 [&lt;span class="type"&gt;System&lt;/span&gt;.ComponentModel.&lt;span class="type"&gt;ToolboxItem&lt;/span&gt;(&lt;span class="keyword"&gt;false&lt;/span&gt;)]
 &lt;span class="comment"&gt;// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. &lt;/span&gt;
 [&lt;span class="type"&gt;System&lt;/span&gt;.&lt;span class="type"&gt;Web&lt;/span&gt;.Script.&lt;span class="type"&gt;Services&lt;/span&gt;.ScriptService]
 &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;class&lt;/span&gt; &lt;span class="type"&gt;wsContacts&lt;/span&gt; : &lt;span class="type"&gt;System&lt;/span&gt;.&lt;span class="type"&gt;Web&lt;/span&gt;.&lt;span class="type"&gt;Services&lt;/span&gt;.&lt;span class="type"&gt;WebService&lt;/span&gt;
 {

  [WebMethod]
  &lt;span class="comment"&gt;//***The ResponseFormat has to be added to the method, not the WebService Class (above).&lt;/span&gt;
  [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
  &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="type"&gt;List&lt;/span&gt;&amp;lt;&lt;span class="type"&gt;NBAPlayer&lt;/span&gt;&amp;gt; GetPlayers(&lt;span class="keyword"&gt;int&lt;/span&gt; paramMinChampionships)
  {
   &lt;span class="type"&gt;List&lt;/span&gt;&amp;lt;&lt;span class="type"&gt;NBAPlayer&lt;/span&gt;&amp;gt; tempPlayers=&lt;span class="keyword"&gt;new&lt;/span&gt; &lt;span class="type"&gt;List&lt;/span&gt;&amp;lt;&lt;span class="type"&gt;NBAPlayer&lt;/span&gt;&amp;gt;();
   
   &lt;span class="type"&gt;NBAPlayer&lt;/span&gt; temp1 = &lt;span class="keyword"&gt;new&lt;/span&gt; &lt;span class="type"&gt;NBAPlayer&lt;/span&gt;(&lt;span class="string"&gt;"Nowitzki"&lt;/span&gt;,&lt;span class="string"&gt;"Dirk"&lt;/span&gt;,1);
   &lt;span class="type"&gt;NBAPlayer&lt;/span&gt; temp2 = &lt;span class="keyword"&gt;new&lt;/span&gt; &lt;span class="type"&gt;NBAPlayer&lt;/span&gt;(&lt;span class="string"&gt;"James"&lt;/span&gt;, &lt;span class="string"&gt;"LeBron"&lt;/span&gt;, 0);
   &lt;span class="type"&gt;NBAPlayer&lt;/span&gt; temp3 = &lt;span class="keyword"&gt;new&lt;/span&gt; &lt;span class="type"&gt;NBAPlayer&lt;/span&gt;(&lt;span class="string"&gt;"Wade"&lt;/span&gt;, &lt;span class="string"&gt;"Dywane"&lt;/span&gt;, 1);
   &lt;span class="type"&gt;NBAPlayer&lt;/span&gt; temp4 = &lt;span class="keyword"&gt;new&lt;/span&gt; &lt;span class="type"&gt;NBAPlayer&lt;/span&gt;(&lt;span class="string"&gt;"Bryant"&lt;/span&gt;, &lt;span class="string"&gt;"Kobe"&lt;/span&gt;, 5);
   &lt;span class="type"&gt;NBAPlayer&lt;/span&gt; temp5 = &lt;span class="keyword"&gt;new&lt;/span&gt; &lt;span class="type"&gt;NBAPlayer&lt;/span&gt;(&lt;span class="string"&gt;"Paul"&lt;/span&gt;, &lt;span class="string"&gt;"Chris"&lt;/span&gt;, 0);
   
   tempPlayers.Add(temp1);
   tempPlayers.Add(temp2);
   tempPlayers.Add(temp3);
   tempPlayers.Add(temp4);
   tempPlayers.Add(temp5);

   &lt;span class="keyword"&gt;return&lt;/span&gt; (&lt;span class="type"&gt;from&lt;/span&gt; p &lt;span class="keyword"&gt;in&lt;/span&gt; tempPlayers 
     &lt;span class="keyword"&gt;where&lt;/span&gt; p.championships&amp;gt;=paramMinChampionships 
     &lt;span class="type"&gt;orderby&lt;/span&gt; p.lastname,p.firstname
     &lt;span class="type"&gt;select&lt;/span&gt; p).ToList&amp;lt;&lt;span class="type"&gt;NBAPlayer&lt;/span&gt;&amp;gt;();
  }
 }
 &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;class&lt;/span&gt; &lt;span class="type"&gt;NBAPlayer&lt;/span&gt;{
   &lt;span class="keyword"&gt;public&lt;/span&gt; NBAPlayer(&lt;span class="keyword"&gt;string&lt;/span&gt; lname,&lt;span class="keyword"&gt;string&lt;/span&gt; fname,&lt;span class="keyword"&gt;int&lt;/span&gt; chmps){
   lastname=lname;
   firstname=fname;
   championships=chmps;
  }

  &lt;span class="keyword"&gt;public&lt;/span&gt; NBAPlayer()
  {

  }

  &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;string&lt;/span&gt; lastname { &lt;span class="keyword"&gt;get&lt;/span&gt;; &lt;span class="keyword"&gt;set&lt;/span&gt;; }
  &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;string&lt;/span&gt; firstname { &lt;span class="keyword"&gt;get&lt;/span&gt;; &lt;span class="keyword"&gt;set&lt;/span&gt;; }
  &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;int&lt;/span&gt; championships { &lt;span class="keyword"&gt;get&lt;/span&gt;; &lt;span class="keyword"&gt;set&lt;/span&gt;; }
 }
}
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;
As you can see from the code, the web service has a method called &lt;b&gt;GetPlayers&lt;/b&gt; and it accepts one parameter of type&lt;b&gt; int &lt;/b&gt;called &lt;b&gt;paramMinChampionships&lt;/b&gt;. &amp;nbsp;It then returns a list of type NBAPlayer where each NBAPlayer object has a championship property equal to or greater than the &lt;b&gt;paramMinChampionships&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
Now, I've made a custom class and hard coded a few elements for the example but this is where you'd put your database calls or Linq objects and build your return set that way. &amp;nbsp;We're done with the web service.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Step 2: Download jQuery files.&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
Create a directory in your project called jQuery. &amp;nbsp;Download these two jQuery files:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://blog.jquery.com/2011/05/12/jquery-1-6-1-released/"&gt;jquery-1.6.1.min.js&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/jquery/jquery-tmpl"&gt;jquery-tmpl-min.js&lt;/a&gt;&amp;nbsp;(there are several files in the zip link. &amp;nbsp;You only need this one for our project).&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
Add these files to the jQuery directory you made at the beginning of this step.&lt;br /&gt;
&lt;br /&gt;
&lt;b style="font-family: Ubuntu, UbuntuBeta !important;"&gt;&lt;span class="Apple-style-span" style="font-family: Ubuntu, UbuntuBeta; font-size: large;"&gt;Step 3: Create a default.aspx page.&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;span class="Apple-style-span"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-kndw1krug3w/Tg5refcTFuI/AAAAAAAAE8E/iHd_FHVltTM/s1600/projexplore.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://4.bp.blogspot.com/-kndw1krug3w/Tg5refcTFuI/AAAAAAAAE8E/iHd_FHVltTM/s200/projexplore.png" width="182" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
Add a new file called &lt;b&gt;default.aspx&lt;/b&gt;. &amp;nbsp;Once you've done that, your solution explorer should look something like the image at left.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now the fun part. &amp;nbsp;First we're going to create some javascript that will do our Ajax call for us:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="font-family: Courier New;"&gt;&amp;lt;script&amp;nbsp;type=&lt;span style="color: maroon;"&gt;"text/javascript"&lt;/span&gt;&amp;gt; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;function&lt;/span&gt;&amp;nbsp;GetPlayers()&amp;nbsp;{ &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$.ajax({ &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;url:&amp;nbsp;&lt;span style="color: maroon;"&gt;"wsPlayers.asmx/GetPlayers"&lt;/span&gt;, &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dataType:&amp;nbsp;&lt;span style="color: maroon;"&gt;"json"&lt;/span&gt;, &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;type:&amp;nbsp;&lt;span style="color: maroon;"&gt;"POST"&lt;/span&gt;, &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;contentType:&amp;nbsp;&lt;span style="color: maroon;"&gt;"application/json;&amp;nbsp;charset=utf-8"&lt;/span&gt;, &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;data:&amp;nbsp;(&lt;span style="color: maroon;"&gt;"{paramMinChampionships:&amp;nbsp;"&lt;/span&gt;&amp;nbsp;+&amp;nbsp;$(&lt;span style="color: maroon;"&gt;"#selChamps"&lt;/span&gt;).val()&amp;nbsp;+&amp;nbsp;&lt;span style="color: maroon;"&gt;"}"&lt;/span&gt;), &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;error:&amp;nbsp;&lt;span style="color: blue;"&gt;function&lt;/span&gt;&amp;nbsp;(err)&amp;nbsp;{ &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;alert(&lt;span style="color: maroon;"&gt;"Error:"&lt;/span&gt;&amp;nbsp;+&amp;nbsp;err.responseText); &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}, &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;success:&amp;nbsp;&lt;span style="color: blue;"&gt;function&lt;/span&gt;&amp;nbsp;(results)&amp;nbsp;{&amp;nbsp;OnComplete(results.d)&amp;nbsp;} &lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}); &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;function&lt;/span&gt;&amp;nbsp;OnComplete(results)&amp;nbsp;{ &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(&lt;span style="color: maroon;"&gt;"#tbodyPlayers"&lt;/span&gt;).empty();&amp;nbsp;&amp;nbsp;&lt;span style="color: green;"&gt;//We&amp;nbsp;want&amp;nbsp;to&amp;nbsp;clear&amp;nbsp;the&amp;nbsp;body&amp;nbsp;of&amp;nbsp;the&amp;nbsp;table&amp;nbsp;first.&lt;/span&gt; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(&lt;span style="color: maroon;"&gt;"#playerDataTemplate"&lt;/span&gt;).tmpl(results).appendTo(&lt;span style="color: maroon;"&gt;"#tbodyPlayers"&lt;/span&gt;); &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/script&amp;gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
If that doesn't make sense, then stop right here and read about the&lt;a href="http://api.jquery.com/jQuery.ajax/"&gt; jQuery Ajax method&lt;/a&gt;. &amp;nbsp;What we're doing is calling our web service and passing it a numeric value so that it will give us back our list of players. &amp;nbsp;Before we do that lets add the rest of the HTML to our default.aspx page.&lt;br /&gt;
&lt;br /&gt;
We want a select element that looks like this:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;Players with at least 
    &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;select&lt;/span&gt; &lt;span style="color: red;"&gt;id&lt;/span&gt;="&lt;span style="color: blue;"&gt;selChamps&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt; 
        &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;option&lt;/span&gt; &lt;span style="color: red;"&gt;value&lt;/span&gt;="&lt;span style="color: blue;"&gt;0&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;0&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon;"&gt;option&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt; 
        &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;option&lt;/span&gt; &lt;span style="color: red;"&gt;value&lt;/span&gt;="&lt;span style="color: blue;"&gt;1&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;1&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon;"&gt;option&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt; 
        &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;option&lt;/span&gt; &lt;span style="color: red;"&gt;value&lt;/span&gt;="&lt;span style="color: blue;"&gt;2&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;2&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon;"&gt;option&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt; 
        &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;option&lt;/span&gt; &lt;span style="color: red;"&gt;value&lt;/span&gt;="&lt;span style="color: blue;"&gt;3&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;3&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon;"&gt;option&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt; 
    &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon;"&gt;select&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt; 
    championships.&lt;/pre&gt;&lt;br /&gt;
We'll want a button to fire off our ajax web service call:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;button&lt;/span&gt; &lt;span style="color: red;"&gt;id&lt;/span&gt;="&lt;span style="color: blue;"&gt;btnSubmit&lt;/span&gt;" &lt;span style="color: red;"&gt;onclick&lt;/span&gt;="&lt;span style="color: blue;"&gt;GetPlayers();&lt;/span&gt;" &lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;Submit&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon;"&gt;button&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;
We'll also want a table to display our data:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;table&lt;/span&gt; &lt;span style="color: red;"&gt;border&lt;/span&gt;="&lt;span style="color: blue;"&gt;1&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt; 
        &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;thead&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt; 
            &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;tr&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt; 
                &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;td&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;First Name&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon;"&gt;td&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt; 
                &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;td&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;Last Name&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon;"&gt;td&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt; 
                &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;td&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;Championships&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon;"&gt;td&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt; 
                &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;td&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;Bing&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon;"&gt;td&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt; 
            &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon;"&gt;tr&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt; 
        &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon;"&gt;thead&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt; 
        &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;tbody&lt;/span&gt; &lt;span style="color: red;"&gt;id&lt;/span&gt;="&lt;span style="color: blue;"&gt;tbodyPlayers&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt; 
         
        &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon;"&gt;tbody&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt; 
    &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon;"&gt;table&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;
Lastly, and most importantly, we add the data template:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;script&lt;/span&gt; &lt;span style="color: red;"&gt;id&lt;/span&gt;="&lt;span style="color: blue;"&gt;playerDataTemplate&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;text/x-jquery-tmpl&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt; 
    &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;tr&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt; 
        &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;td&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;${firstname}&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon;"&gt;td&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt; 
        &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;td&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;${lastname}&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon;"&gt;td&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt; 
        {{if championships&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;0}} 
        &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;td&lt;/span&gt; &lt;span style="color: red;"&gt;align&lt;/span&gt;="&lt;span style="color: blue;"&gt;center&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;span&lt;/span&gt; &lt;span style="color: red;"&gt;style&lt;/span&gt;="&lt;span style="color: blue;"&gt;color:green;font-weight:bold;&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;${championships}&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon;"&gt;span&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon;"&gt;td&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt; 
        {{else}} 
        &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;td&lt;/span&gt; &lt;span style="color: red;"&gt;align&lt;/span&gt;="&lt;span style="color: blue;"&gt;center&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;${championships}&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon;"&gt;td&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt; 
        {{/if}} 
        &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;td&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;a &lt;span style="color: red;"&gt;target&lt;/span&gt;="&lt;span style="color: blue;"&gt;_blank&lt;/span&gt;" &lt;span style="color: red;"&gt;href="http://www.bing.com/search?q&lt;/span&gt;=${firstname}+${lastname}"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;search&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon;"&gt;a&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon;"&gt;td&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt; 
    &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon;"&gt;tr&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt; 
&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon;"&gt;script&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
That's right, we're putting HTML markup directly inside our &amp;lt;script&amp;gt; tag in the example above. &amp;nbsp;Notice that the &lt;b&gt;type &lt;/b&gt;is &lt;span class="Apple-style-span" style="white-space: pre;"&gt; &lt;/span&gt;&lt;span class="Apple-style-span" style="white-space: pre;"&gt;&lt;span style="color: red; font-family: Ubuntu, UbuntuBeta;"&gt;type&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="white-space: pre;"&gt;="&lt;/span&gt;&lt;span class="Apple-style-span" style="white-space: pre;"&gt;&lt;span style="color: blue; font-family: Ubuntu, UbuntuBeta;"&gt;text/x-jquery-tmpl&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="white-space: pre;"&gt;" and not &lt;/span&gt;&lt;span class="Apple-style-span" style="white-space: pre;"&gt; &lt;span style="color: red; font-family: Ubuntu, UbuntuBeta;"&gt;type&lt;/span&gt;="&lt;span style="color: blue; font-family: Ubuntu, UbuntuBeta;"&gt;text/javascript&lt;/span&gt;".  &lt;/span&gt;This is a different kind of script that works with the&lt;b&gt; tmpl&lt;/b&gt; plugin.  The magic is in the &lt;b&gt;OnComplete&lt;/b&gt; method and the data template we created. &amp;nbsp;Pay special attention to this line of&amp;nbsp;JavaScript&amp;nbsp;code:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;$(&lt;span style="color: maroon;"&gt;"#playerDataTemplate"&lt;/span&gt;).tmpl(results).appendTo(&lt;span style="color: maroon;"&gt;"#tbodyPlayers"&lt;/span&gt;);&lt;/b&gt;&lt;/pre&gt;&lt;pre&gt;&lt;b&gt;
&lt;/b&gt;&lt;/pre&gt;What this means is, we're going to take the value of results, which is the JSON object that contains our list of player data, pass it to the &lt;b&gt;tmpl&lt;/b&gt; function of the &lt;b&gt;playerDataTemplate &lt;/b&gt;selector and append the output to the &lt;br /&gt;
&lt;b&gt;tbodyPlayers&lt;/b&gt; selector.  The playerDataTemplate will apply what's inside for each element in the results variable.  As you can see, by using the {} brackets we can drop the values of the properties whereever we want. &amp;nbsp;We can apply&amp;nbsp;conditional&amp;nbsp;&lt;b&gt;if/else &lt;/b&gt;and we can put our property values inside HTML markup. And we can do it all without asp.net server controls or a code behind. &amp;nbsp;Well,we do have a code behind of sorts but that is&amp;nbsp;encapsulated&amp;nbsp;in the web service. &amp;nbsp;So if we have an iPhone app that wants to call our web service, no problem. &amp;nbsp;Windows forms wants to use it? &amp;nbsp;No problem. &amp;nbsp;Another thing about this approach is that we are getting away from all the custom .net control styling markup and back to straight up css. &amp;nbsp;Now when a designer looks at our source and wants to make some tweaks, they don't see a buch of &amp;lt;asp:textbox id="txtFirstName" runat="server" text="Johnny" /&amp;gt;. &amp;nbsp;The see regular HTML that they should be able to update without breaking anything. &lt;br /&gt;
&lt;br /&gt;
Another advantage to this approach is that we are doing an Ajax call but since we're not using an asp.net update panel and things like that, we're only sending and&amp;nbsp;receiving&amp;nbsp;the JSON objects. &amp;nbsp;That's a really light payload compared to all the view state stuff we'd get if we used update panels. &amp;nbsp;We also aren't using an asp.net script manager, we're just referencing our jQuery libraries normally so we don't have that overhead either. &amp;nbsp;I may do a follow up post to this one where I use update panels, script managers and a datagrid to show the difference in page size and network traffic. &amp;nbsp;It makes a huge difference.&lt;br /&gt;
&lt;br /&gt;
So, that's the &lt;b&gt;tmpl&lt;/b&gt;&amp;nbsp;plugin for jQuery and that's why I love it. &amp;nbsp;If you want to play around with this project yourself, you can download the whole thing &lt;a href="https://docs.google.com/leaf?id=0B6Wwk39_GwMaMDRmNTU0NDgtZGQ3OC00MDI1LWJiYzgtYTMwYTI2ODI3NjRk&amp;hl=en_US"&gt;here&lt;/a&gt;.&lt;img src="http://feeds.feedburner.com/~r/Jonwearcom/~4/6hOTSrnFXUQ" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Jonwearcom/~3/6hOTSrnFXUQ/jquery-tmpl-plugin-example-for-aspnet.html</link><author>noreply@blogger.com (Jon Wear)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-kndw1krug3w/Tg5refcTFuI/AAAAAAAAE8E/iHd_FHVltTM/s72-c/projexplore.png" height="72" width="72" /><thr:total>0</thr:total><georss:featurename>Philadelphia, PA, USA</georss:featurename><georss:point>39.952335 -75.16378900000001</georss:point><georss:box>39.816841 -75.32605900000001 40.087829 -75.001519</georss:box><feedburner:origLink>http://www.jonwear.com/2011/07/jquery-tmpl-plugin-example-for-aspnet.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5069773377440884070.post-5199009929839905625</guid><pubDate>Fri, 08 Apr 2011 01:52:00 +0000</pubDate><atom:updated>2011-04-09T11:15:55.585-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">development</category><title>Web Service Minutiae</title><description>Sometimes, as part of a web project, I'll make a web service that will be called by a front end .aspx page elsewhere in the project. &amp;nbsp;Inevitably, I will forget to do two things:&lt;br /&gt;
&lt;br /&gt;
One, I'll forget to uncomment the script service line above the web method, even though Visual Studio puts a comment above it that says the following:&lt;br /&gt;
&lt;br /&gt;
'To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.&lt;br /&gt;
&amp;nbsp;'&amp;lt;System.Web.Script.Services.ScriptService()&amp;gt; _&lt;br /&gt;
&lt;pre&gt;&lt;/pre&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;And two, I'll forget to set the InlineScript property of the service&amp;nbsp;reference&amp;nbsp;to true. &amp;nbsp;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Then I'll trouble shoot for an hour before I remember, &lt;i&gt;oh yeah, I have to do those two things&lt;/i&gt;. &amp;nbsp;Hopefully by writing this on my blog, I'll remember. &amp;nbsp;Anyway, those to two tidbits are things that I forgot, but I did know at one time. &amp;nbsp;This week I learned some new things regarding web services. &amp;nbsp;I'm sure many developers out there will say, "well duh...I can't believe you didn't know that! &amp;nbsp;Dunce!" &amp;nbsp;In response to such barbs, I will quote Clark Gable in Gone With the Wind, "I apologize again for all my short comings." &amp;nbsp;Moving on...&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Here are the two, &lt;i&gt;new&lt;/i&gt;, things I learn about web services. &amp;nbsp;One, you can change the format of the SOAP data that gets passed back and forth from the verbose (but useful) XML format to the more concise Json format. &amp;nbsp; Did you know that? &amp;nbsp;I sure didn't. &amp;nbsp;You just change the property in the web method:&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;lt;WebMethod()&amp;gt; _&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;ScriptMethod(ResponseFormat:=ResponseFormat.Json)&amp;gt; _&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;Public Function DoSomething() ...&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;i&gt;Please note that the above code snippet assumes the import of the&amp;nbsp;System.Web.Script.Services namespace. &amp;nbsp;&lt;u&gt;I hate it when demo code doesn't include what namespaces are involved&lt;/u&gt;.&lt;/i&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;The second thing I learned is that there is a size limit on how big the Json object can be. &amp;nbsp;I was all happy until I quit getting results back because I &lt;i&gt;knew&lt;/i&gt;&amp;nbsp;there were lots of the results that were coming back and that was the problem. &amp;nbsp;You can set it manually in the web.config, like this:&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;lt;jsonSerialization maxJsonLength="Big ol' number"/&amp;gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;...but I wouldn't&amp;nbsp;recommend&amp;nbsp;that. &amp;nbsp;Why? &amp;nbsp;Because the whole point of Json is to have light weight markup text so you can pass data around web services with less bandwidth. &amp;nbsp;If your Json is so big that the default size of the object isn't big enough to handle it, then maybe there's just too much data in there and it needs to be broken up some other way. &amp;nbsp;But hey, do what you want. &amp;nbsp;Pass multi gig Json objects around, set the IIS timeout to 120 minutes and put all your asp.net applications in their own app pools. &amp;nbsp;See what happens.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;G'night.&lt;/div&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Jonwearcom/~4/GPoxNVX-9QA" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Jonwearcom/~3/GPoxNVX-9QA/web-service-minutiae.html</link><author>noreply@blogger.com (Jon Wear)</author><thr:total>0</thr:total><feedburner:origLink>http://www.jonwear.com/2011/04/web-service-minutiae.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5069773377440884070.post-3852068645420899629</guid><pubDate>Tue, 25 Jan 2011 02:15:00 +0000</pubDate><atom:updated>2011-01-26T09:01:13.229-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">tech</category><category domain="http://www.blogger.com/atom/ns#">backup</category><title>B is for Backup</title><description>&amp;nbsp;&amp;nbsp; &amp;nbsp; In the old days of the 20th century, computer users relied on floppy disks to move information from one computer to another.&amp;nbsp; Pre-web, pre-broadband, pre-dialup...it was all floppy disks.&amp;nbsp; Now, it really wasn't as bad as it sounds because we didn't have that much information to move around.&amp;nbsp; It was conceivable that you would do &lt;i&gt;all &lt;/i&gt;of your computing on one computer.&amp;nbsp; That is until you got another machine and moved all your stuff over to the smokin' hot 486.&amp;nbsp; Again, it didn't matter because there wasn't that much stuff to move.&amp;nbsp; A floppy disk might not have a enough space on it to save one mp3 track but you could still store &lt;i&gt;lots&lt;/i&gt; of text and that's mostly what we had.&amp;nbsp; You made a backup copy of all your papers or saved games of Flight Simulator and that was it. &amp;nbsp;Everything else was loaded from stacks of floppy disks or maybe a dual speed CD-Rom. &amp;nbsp;Not so any more.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; Now we have lots and lots more data.&amp;nbsp; My daughter is not even a year old yet but I bet she's had more pictures taken of her than I had in the first ten years of my existence.&amp;nbsp; They are all digital. &amp;nbsp;In addition to those photos I have movies, music, family videos, gobs and gobs of photos, lots of source code and database scripts. &amp;nbsp;Lots of people have this problem and they don't have a backup of that data because...it's impossible. &amp;nbsp;Households can easily have a 1 terabyte of data spread across phones, laptops, desktops, digital cameras and mp3 players. &amp;nbsp;It would take 728,177 floppy disks to back up one terabyte. &amp;nbsp;And you'd have to label them too...&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; Now imagine that your hard drive crashed(they all have a&lt;span id="goog_355609300"&gt;&lt;/span&gt; &lt;a href="http://www.t-cubed.com/faq_mtbf.htm"&gt;MTB&lt;span id="goog_355609301"&gt;&lt;/span&gt;F&lt;/a&gt; rating), or your laptop got stolen. &amp;nbsp;What then? &amp;nbsp;All that music, all those movies you bought on iTunes are gone. &amp;nbsp;All those photos...&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; Here's what I recommend.&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Get a big external hard drive. &amp;nbsp;I use a two terabyte external drive from Western Digital. &amp;nbsp;You can buy it off Amazon for a little over $100. &amp;nbsp;Here's the &lt;a href="http://www.amazon.com/gp/product/B002QEBMCI?ie=UTF8&amp;amp;tag=theinksmudge-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=B002QEBMCI"&gt;link&lt;/a&gt;.&lt;/li&gt;
&lt;ol&gt;&lt;li&gt;Make a folder on it called "Backup".&lt;/li&gt;
&lt;li&gt;Under that you can make folders for music, videos, photos, office documents...whatever you want.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Put everything that's important in there. &amp;nbsp;&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Point your iTunes library to that location if you have one.&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;I suggest connecting the external drive to a desktop or some machine that's usually on or at the very least, doesn't move around much.&lt;/li&gt;
&lt;/ol&gt;&lt;li&gt;Get an account with an online backup company. &amp;nbsp;There are several out there. &amp;nbsp;I use &lt;a href="http://mozy.com/"&gt;Mozy.com&lt;/a&gt;. &amp;nbsp;For $4.95/month you get unlimited backups.&lt;/li&gt;
&lt;ol&gt;&lt;li&gt;After you've downloaded the Mozy client, you can set it to backup certain&amp;nbsp;directories. &amp;nbsp; Set it to backup the "Backup" directory on your big external drive. &amp;nbsp;It'll take a long time (as in days) to do the first backup, but once that first one is done, you are set. &amp;nbsp;Leave your computer on over night and it will backup all the new things you add.&lt;/li&gt;
&lt;li&gt;I&amp;nbsp;recommend Mozy because on two different occasions I've had hardware crashes and I did not lose a thing. &amp;nbsp;It took a while to copy all that stuff back down to a new machine, but that's way better than losing everything.&lt;/li&gt;
&lt;/ol&gt;&lt;li&gt;For Office type files or things that are mostly text, I suggest using a free account from &lt;a href="http://www.dropbox.com/"&gt;DropBox&lt;/a&gt;&amp;nbsp;in addition to having an online backup. &amp;nbsp;Dropbox is incredibly&amp;nbsp;convenient&amp;nbsp;and it serves as a quick and easy way to keep things backed up and accessible. &amp;nbsp;&lt;/li&gt;
&lt;ol&gt;&lt;/ol&gt;&lt;/ol&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; You may be saying to yourself, "Jon, I'm not going to spend $100 for a big hard drive and $60 a year for online backups." &amp;nbsp;Well, okay, but think about this. If you lost all your data, how much would you be willing to pay to get it back? &amp;nbsp;Sure it's another bill to pay. &amp;nbsp;I don't like adding bills to my monthly payment list, but it provides peace of mind. &amp;nbsp;I sound like an insurance salesperson but that's exactly what this is. Except this is insurance you will need because, while your house might not flood or burn down, your hard drive &lt;i&gt;will&lt;/i&gt;&amp;nbsp;crash one day. &amp;nbsp;That day might bring a momentary&amp;nbsp;inconvenience&amp;nbsp;or a&amp;nbsp;catastrophe. &amp;nbsp;And by the way, if you are a freelancer of any kind, you &lt;i&gt;have &lt;/i&gt;to have an offsite backup. &amp;nbsp;If people are paying you to produce something, &amp;nbsp;you can't just turn around and say you lost all the work because your Mac Book&amp;nbsp;crashed and you don't have a backup. &amp;nbsp;It's a cost of doing business.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; So that's my online backup rant. &amp;nbsp;Now let's talk about saving a little money. &amp;nbsp;Are you still using the anti-virus software that came with your computer? &amp;nbsp;Norton Anti-Virus or MacAfee or something like that? &amp;nbsp;Well, those things expire and if you don't pay up each year, you quit getting the latest virus signatures which is what allows anti-virus&amp;nbsp;software&amp;nbsp;to protect your machine. &amp;nbsp;Without the latest updates, you're are not getting any protection. &amp;nbsp;Those full disk scans that slow your computer down are all for naught because they won't know if a new virus is there or not. &amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; In the past I have&amp;nbsp;recommended&amp;nbsp;the&lt;a href="http://free.avg.com/us-en/download-free-antivirus"&gt; free anti-virus software&lt;/a&gt; from AVG. &amp;nbsp;I still think they provide a great product, but they really want you to sign up for their pay service. &amp;nbsp;Every so often you have to download a new client and install and it's a headache. &amp;nbsp;It's easy to click ignore or to mistake it for an annoying popup from some web page and you can wind up back in the same boat. &amp;nbsp;I have a new&amp;nbsp;recommendation. &amp;nbsp;It's only for the Microsoft platform but I really like it. &amp;nbsp;It'll work with anything from XP service pack 2 all the way up to &amp;nbsp;Windows 7 Ultimate 64-bit. &amp;nbsp;It's called Microsoft Security Essentials. &amp;nbsp;&lt;a href="http://www.microsoft.com/security_essentials/default.aspx?mkt=en-us#dlbutton"&gt;Download it&lt;/a&gt;, install it and uninstall all that useless, out of date, anti-virus software that's just taking up system resources.&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; Lastly, if you hate the&amp;nbsp;bloat ware&amp;nbsp;that is Adobe Acrobat Reader but you still need to be able to read PDF files, then download &lt;a href="http://www.visagesoft.com/products/pdfreader/"&gt;Expert PDF Reader&lt;/a&gt; from Visagesoft. &amp;nbsp;Great PDF viewer, nowhere near the headaches of Adobe Acrobat REader. &amp;nbsp;It's free.&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Jonwearcom/~4/56xTnVqWiHA" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Jonwearcom/~3/56xTnVqWiHA/b-is-for-backup.html</link><author>noreply@blogger.com (Jon Wear)</author><thr:total>0</thr:total><georss:featurename>Philadelphia, PA, USA</georss:featurename><georss:point>39.952335 -75.163789</georss:point><georss:box>39.6891495 -75.630708 40.2155205 -74.69686999999999</georss:box><feedburner:origLink>http://www.jonwear.com/2011/01/b-is-for-backup.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5069773377440884070.post-1487080712243514856</guid><pubDate>Wed, 29 Dec 2010 03:55:00 +0000</pubDate><atom:updated>2010-12-29T13:05:27.089-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">linux</category><category domain="http://www.blogger.com/atom/ns#">tech</category><title>A new laptop</title><description>My Dell M1530 went kerput on me for the 2nd time. &amp;nbsp;The first time the &lt;abbr title="hard drive"&gt;HDD&lt;/abbr&gt; died.  That wasn't so bad because it was still under warranty and Dell sent me a new one.  The second time it went, it was the motherboard.  This time I was out of warranty.  The cost would have been around $500 to replace it so I got an &lt;a href="http://www.bestbuy.com/site/Asus+-+Laptop+/+AMD+Turion%26%23153%3B+II+Processor+/+15.6%22+Display+/+6GB+Memory+-+Dark+Gray/1572108.p?id=1218270199430&amp;amp;skuId=1572108"&gt;Asus laptop&lt;/a&gt; from Best Buy for $550. &amp;nbsp;So far so good. &amp;nbsp;I guess when it comes to laptops, I need to just budget money for a new one every two years. &amp;nbsp;Every single laptop I've owned has gone out with in three years. &amp;nbsp;Gateway, IBM (pre-Lenovo), and two Dells. &amp;nbsp;They usually just sit in a room. &amp;nbsp;They don't get dusty. &amp;nbsp;They don't get too hot. &amp;nbsp;I'm very mindful of them when I travel. &amp;nbsp;My Dell desktop had several problems as well. &amp;nbsp;It still runs but it needs some TLC to stay running. &amp;nbsp;Why am I boring you with all this talk of busted machines? &lt;br /&gt;
&lt;br /&gt;
Well, I used to build custom machines. &amp;nbsp;I say build but really it was assembling about a dozen&amp;nbsp;components&amp;nbsp;inside a case. &amp;nbsp;"Building" sounds cooler, like you are magnetizing each sector of the drive and etching the circuits on the CPU. &amp;nbsp;Anyway, those beige boxes lasted a long time. &amp;nbsp;They lasted for several different customers that kept them in a variety of work spaces and to my&amp;nbsp;knowledge&amp;nbsp;none of them ever broken down. &amp;nbsp;I'm not saying I had any great workmanship (I didn't, my wire organization was awful). &amp;nbsp;What I am saying is that the corners that get cut in a large company's assembly line seem to make the difference between real PC longevity and two years of use before the machines goes dark. &amp;nbsp;It's hard to make a profit on a computer. &amp;nbsp;The big PC manufacturers have to make them as cheaply as possible. &amp;nbsp;When you build your own, you build it slower and with (a little) more attention to detail. &amp;nbsp;Most cases these days are spacious enough to have good air flow to keep things from getting too hot inside. &amp;nbsp;That's probably the biggest difference right there. &amp;nbsp;I have a custom machine from 1998 in my basement and when I went down and turned it on, it booted right up to Windows 2000. &amp;nbsp;But enough about desktops.&lt;br /&gt;
&lt;br /&gt;
I got the new laptop and erased the drive. &amp;nbsp;I made a large Windows 7, &lt;a href="http://www.ntfs.com/"&gt;NTFS&lt;/a&gt; partition and two partitions that are around 100 GB each. &amp;nbsp;I loaded &lt;a href="http://www.ubuntu.com/"&gt;Ubuntu 10&lt;/a&gt; on one of those and &lt;a href="http://fedoraproject.org/"&gt;Fedora 14&lt;/a&gt; on the other (Ubuntu and Fedora are different flavors, &lt;i&gt;distros&lt;/i&gt;, of &lt;a href="http://www.linux.org/"&gt;Linux&lt;/a&gt;). &amp;nbsp;It took a while to configure each OS and get all the software loaded. &amp;nbsp;I still don't have the Linux partitions like I want them but I know so little about Linux that I'm happy that I got the laptop to triple boot at all. &amp;nbsp;All in good time. &lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://mozy.com/"&gt;Mozy.com&lt;/a&gt; has been my backup provider for a while and I have been pleased with them so far. $5 a month for unlimited backup. &amp;nbsp;I bought a 2TB external drive where I'm going to store iTunes data and other files. &amp;nbsp;I'll point Mozy at that and have it back up a few folders on the actual Windows 7 partition. &amp;nbsp;I think I can have the Linux partitions write to a shared location that I can have backed up as well. &amp;nbsp;I'll figure it out.&lt;br /&gt;
&lt;br /&gt;
That is all for now. &amp;nbsp;I'm not going to do any die rolls for the next several posts because I have some ideas about what I want to write about. &amp;nbsp;Mostly they will have to do with a Microsoft developer learning how to develop on the Linux platform. &amp;nbsp;There will be some writing related posts as well as a recap of my second semester at UPenn. &amp;nbsp;All in good time.&lt;img src="http://feeds.feedburner.com/~r/Jonwearcom/~4/pC6jFH4PiJw" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Jonwearcom/~3/pC6jFH4PiJw/new-laptop.html</link><author>noreply@blogger.com (Jon Wear)</author><thr:total>0</thr:total><georss:featurename>Philadelphia, PA, USA</georss:featurename><georss:point>39.952335 -75.163789</georss:point><georss:box>39.6891495 -75.630708 40.2155205 -74.69686999999999</georss:box><feedburner:origLink>http://www.jonwear.com/2010/12/new-laptop.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5069773377440884070.post-6461950074040423447</guid><pubDate>Fri, 29 Oct 2010 01:06:00 +0000</pubDate><atom:updated>2010-10-28T21:06:00.468-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">development</category><category domain="http://www.blogger.com/atom/ns#">tech</category><title>Looking forward</title><description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://upload.wikimedia.org/wikipedia/commons/thumb/b/bd/Julia_set_(indigo).png/220px-Julia_set_(indigo).png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://upload.wikimedia.org/wikipedia/commons/thumb/b/bd/Julia_set_(indigo).png/220px-Julia_set_(indigo).png" /&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; I almost wrote another post on how and why I got into software development. &amp;nbsp;I was thinking a lot about that after I downloaded a Texas Instruments 99/4A &lt;a href="http://www.99er.net/win994a.shtml"&gt;emulator&lt;/a&gt;. &amp;nbsp;I was amazed at how much my fingers remembered. &amp;nbsp;Double tap the 1 key and start typing line numbers and commands. &amp;nbsp;Anyway, I'm not going to do that. &amp;nbsp;I'm going to talk about what's ahead for me in software development.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; Mobile development. &amp;nbsp;That's what I see when I look forward. &amp;nbsp;The place where I work is getting into &lt;a href="http://developer.apple.com/devcenter/ios/index.action"&gt;iPhone development&lt;/a&gt;. &amp;nbsp;I tried to get my department to give the windows mobile platform a shot but even I couldn't take WinMo 6.x after a while. &amp;nbsp;Maybe &lt;a href="http://www.microsoft.com/windowsphone/en-us/default.aspx"&gt;Windows Mobile 7&lt;/a&gt; will be better but for now it's the iPhone. &amp;nbsp;People like using their iPhones. &amp;nbsp;People love it when you write an application that gives them yet another reason to whip out the iPhone and start two finger tapping. &lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; So far I've been writing the back end web services that handle the data part of our iPhone applications and my co-worker, &lt;a href="http://www.kotarofujita.com/Kotaro_Fujita/Home.html"&gt;Kotaro&lt;/a&gt;, has been writing the front ends on his Mac in Objective C. &amp;nbsp;The web services part is great because since it's just XML/Soap, any platform could connect to it and make use of the services, with proper&amp;nbsp;authentication&amp;nbsp;of course. &amp;nbsp;What I'm trying to do now is expand my skill set to include actual iPhone&amp;nbsp;development&amp;nbsp;using tools from&lt;a href="http://monotouch.net/"&gt; Mono Touch&lt;/a&gt; by Novell. &amp;nbsp;The &lt;a href="http://mono-project.com/Main_Page"&gt;Mono Project&lt;/a&gt; is an open source .Net framework that allows a developer to write .Net code and target Windows, Mac and Linux. &amp;nbsp;I want to do iPhone/iPad development with it but it'd be great to get familiar with those other platforms as well by writing code for them. &lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; Why learn a new development platform? &amp;nbsp;Same reason I learned the first one, because it's fun.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; I've also been thinking about the gaps in my skill set. &amp;nbsp;One of the problems that comes from being a self taught developer is that I've wasted many hours writing something that has already been written. &amp;nbsp;Also, there's this&amp;nbsp;gnawing&amp;nbsp;concern that there is so much about development, even on the Microsoft platform, that I don't know that...I don't know what I don't know. &amp;nbsp;Sometimes I come across posts like &lt;a href="http://www.hanselman.com/blog/WhatGreatNETDevelopersOughtToKnowMoreNETInterviewQuestions.aspx"&gt;this&lt;/a&gt; and &lt;a href="http://www.hanselman.com/blog/ASPNETInterviewQuestions.aspx"&gt;this&lt;/a&gt; and think, "Dangit! &amp;nbsp;I've been doing this over a decade and I've never even heard of some of this stuff!" &amp;nbsp;At first I tried to tell myself that it was just one guy's opinion (it is) and that there's lots I know that isn't on those lists (also true) and I've been doing this for years so I must be doing something right (right?). &amp;nbsp;But the more I thought about it, the more I realized that I was just a few Google searches and test projects away from being able to answer all of the questions in those two posts. &amp;nbsp;Just another visit from the binary thought system 0 (I'll never figure all this out) and 1 (Why shouldn't I be able to figure it out?).&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; Still reading? Even after that 0 and 1 nonsense? &amp;nbsp;Okay. &amp;nbsp;I'm trying to go deeper. &amp;nbsp;In &lt;a href="http://thisdeveloperslife.com/post/1361199493/1-0-6-abstraction"&gt;episode 6&lt;/a&gt; of This Developers Life, &lt;a href="http://www.hanselman.com/blog/"&gt;Scott Hanselman&lt;/a&gt; and &lt;a href="http://blog.wekeroad.com/"&gt;Rob Conery&lt;/a&gt; talk about "The Stack" and how much a developer should know about it. &amp;nbsp;Professional developers &amp;nbsp;are&amp;nbsp;constantly&amp;nbsp;running into things they don't know how to fix (at first). &amp;nbsp;Take a look at this &lt;a href="http://www.google.com/search?q=c%23+OR+vb.net+-hire&amp;amp;hl=en&amp;amp;rlz=1C1CHFX_enUS375US375&amp;amp;tbs=mbl:1&amp;amp;num=10&amp;amp;lr=&amp;amp;ft=i&amp;amp;cr=&amp;amp;safe=images#sclient=psy&amp;amp;hl=en&amp;amp;lr=&amp;amp;rlz=1C1CHFX_enUS375US375&amp;amp;tbs=mbl:1&amp;amp;q=vb.net+&amp;amp;aq=o&amp;amp;aqi=&amp;amp;aql=&amp;amp;oq=&amp;amp;gs_rfai=&amp;amp;pbx=1&amp;amp;fp=bc5898e4c38479fd"&gt;Twitter stream&lt;/a&gt; and you will see. &amp;nbsp;The Stack is all the stuff between what a developer types and the 1s and 0s the system actually works with (sort of). &amp;nbsp;For example, when I write code in a high level language like &lt;a href="http://msdn.microsoft.com/en-us/vbasic/default.aspx"&gt;Visual Basic .Net&lt;/a&gt; or &lt;a href="http://msdn.microsoft.com/en-us/vcsharp/default.aspx"&gt;C#&lt;/a&gt;, it looks something like this:&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
string firstname = "John";&lt;br /&gt;
string lastname = "Smith";&lt;br /&gt;
string fullname = firstname + " " + lastname;&lt;br /&gt;
Console.WriteLine(fullname);&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; Not beautiful code, but you get the idea. &amp;nbsp;I click "Build" and several steps later it's processed into something like 10011010010101110001010...and the machine does something. &amp;nbsp;The point is, I don't &lt;i&gt;really&lt;/i&gt;&amp;nbsp;know how to program a computer at all. &amp;nbsp;I stand on the&amp;nbsp;shoulders&amp;nbsp;of giants standing on the shoulder of giants so I can reach high enough to pull the lever and make the computer spin. &amp;nbsp;I only know how to write descriptions of what a program should do and then I let the magic of MSIL and various compilers actually write the program for me. &amp;nbsp;So when I say I want to get deeper into the Stack, I mean that I want to learn more about what goes on after I type up all my C# or VB code and hit Build. &amp;nbsp;That means getting into things like C++ and Assembly.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; Now it's possible I'm going to get into the Stack and run screaming from what I find there. &amp;nbsp;There is a part of me that says I'm 36, I am what I am and it's hard enough to learn all the new stuff let alone all the &lt;i&gt;old stuff. &amp;nbsp;&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;/i&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; Maybe. &lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; But thinking about this stuff reminds me of a story I read about a modern boat that ran aground several years back because of a GPS error. &amp;nbsp;The crew on board could have used their map or just looked out the window but the GPS said everything was fine so they went full speed ahead until the hull split open.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; So I'm going to write a program in C++ that does something useful but simple. &amp;nbsp;Then I'm going to write a program in&amp;nbsp;Assembly.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; If you made it all the way to the end of this post and you want more, I suggest:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://james-iry.blogspot.com/2009/05/brief-incomplete-and-mostly-wrong.html"&gt;A Brief, Incomplete, and Mostly Wrong History of Programming Languages&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://artlung.com/smorgasborg/C_R_Y_P_T_O_N_O_M_I_C_O_N.shtml"&gt;In the Beginning was the Command Line&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; The next post will be...a true life entry.&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Jonwearcom/~4/dUfYc_X9QUc" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Jonwearcom/~3/dUfYc_X9QUc/looking-forward.html</link><author>noreply@blogger.com (Jon Wear)</author><thr:total>0</thr:total><georss:featurename>Philadelphia, PA, USA</georss:featurename><georss:point>39.952335 -75.163789</georss:point><georss:box>39.6891495 -75.630708 40.2155205 -74.69686999999999</georss:box><feedburner:origLink>http://www.jonwear.com/2010/10/looking-forward.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5069773377440884070.post-6250261065810746043</guid><pubDate>Sat, 16 Oct 2010 18:33:00 +0000</pubDate><atom:updated>2010-10-16T16:00:01.451-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">tech</category><category domain="http://www.blogger.com/atom/ns#">kindle</category><title>Try the Kindle</title><description>Last week I wrote a long post about how I use Amazon's Kindle and how freaking great it is. &amp;nbsp;I had all these great little stories and use cases. &amp;nbsp;Then I read over it and&amp;nbsp;decided&amp;nbsp;to scrap the whole thing. &amp;nbsp;Why write about how I use it when you could just try it yourself? &amp;nbsp;So like I said, I chucked that post and wrote this, much shorter one, instead.&lt;br /&gt;
&lt;br /&gt;
You don't have to spend money to get books in the Kindle format. &amp;nbsp;You don't have have to buy a Kindle at all. &amp;nbsp;If you have a Windows PC, Mac, iPhone, iPod Touch, iPad, Android phone or Blackberry you can get Kindle stuff without buying the device itself. &amp;nbsp;All you need is an Amazon account. &amp;nbsp;Download one of the free software applications for your device and start using Kindle stuff right away. &amp;nbsp;Lots of great classics are free or .99. &amp;nbsp;You can get sample chapters of dang near everything to try before you buy. &amp;nbsp;The built in dictionary is great for when you're reading &lt;a href="http://www.amazon.com/gp/product/B003XF228C?ie=UTF8&amp;amp;tag=theinksmudge-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=B003XF228C"&gt;David Copperfield&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=theinksmudge-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=B003XF228C" style="border: none !important; margin: 0px !important;" width="1" /&gt;&amp;nbsp;and you come across words like&amp;nbsp;&lt;i&gt;blandishment&lt;/i&gt;&amp;nbsp;or &lt;i&gt;scapegrace&lt;/i&gt;. &amp;nbsp; You can&amp;nbsp;highlight passages, add notes and they'll sync across all devices. &lt;br /&gt;
&lt;br /&gt;
Maybe you'll hate reading books in an electronic format. &amp;nbsp;I thought I would. &amp;nbsp;Just try it out. &amp;nbsp;It'll cost you nothing.&lt;br /&gt;
&lt;br /&gt;
You can download the software free from Amazon&amp;nbsp;&lt;a href="http://www.amazon.com/gp/help/customer/display.html/ref=hp_lnav_dyn?ie=UTF8&amp;amp;nodeId=200127470"&gt;here&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Once you are set up, here's a sample of some books you can read for free:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/Adventures-Sherlock-Holmes-ebook/dp/B000JQU1VS/ref=pd_ts_zgc_kinc_154606011-f_9?ie=UTF8&amp;amp;s=digital-text&amp;amp;pf_rd_p=1276270382&amp;amp;pf_rd_s=right-3&amp;amp;pf_rd_t=101&amp;amp;pf_rd_i=1286228011&amp;amp;pf_rd_m=ATVPDKIKX0DER&amp;amp;pf_rd_r=04BTXJNK0NY1RD61RM85"&gt;The Adventures of Sherlock Holmes&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.amazon.com/Treasure-Island-ebook/dp/B000JML7EC/ref=pd_ts_kinc-f_19?ie=UTF8&amp;amp;s=digital-text"&gt;Treasure Island&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.amazon.com/Dracula-ebook/dp/B000JQUBRM/ref=pd_ts_kinc-f_21?ie=UTF8&amp;amp;s=digital-text"&gt;Dracula&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.amazon.com/Little-Women-ebook/dp/B000JQUMPI/ref=pd_ts_kinc-f_54?ie=UTF8&amp;amp;s=digital-text"&gt;Little Women&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;br /&gt;
The die roll says another tech post.&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Jonwearcom/~4/K8oH6JaVDcA" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Jonwearcom/~3/K8oH6JaVDcA/try-kindle.html</link><author>noreply@blogger.com (Jon Wear)</author><thr:total>0</thr:total><feedburner:origLink>http://www.jonwear.com/2010/10/try-kindle.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5069773377440884070.post-6567022041723853898</guid><pubDate>Sat, 09 Oct 2010 16:36:00 +0000</pubDate><atom:updated>2010-10-09T15:12:12.654-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">truestory</category><title>Wrong Major</title><description>&amp;nbsp;&amp;nbsp; &amp;nbsp; "You are in the wrong major."&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; It was the spring of 1992. &amp;nbsp;I was attending &lt;a href="http://www.lmu.edu/"&gt;Loyola&amp;nbsp;Marymount&amp;nbsp;University&lt;/a&gt; in Los Angeles and &amp;nbsp;I was sitting in the office of&amp;nbsp;my Human Genetics professor. &amp;nbsp;I&amp;nbsp;had demonstrated some software I had written that simulated the random generation of&amp;nbsp;nucleotides&amp;nbsp;and then told you if any interesting amino acids would form as a result. &amp;nbsp;That may sound impressive but it really wasn't much of a program. &amp;nbsp;It generated some random numbers and told the user if a certain set of numbers occurred. &amp;nbsp;Only instead of showing the user random numbers, the program displayed words like "guanine" and "cytosine" and some other terms that I cannot remember.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; Anyway this was in 1992-1993 when it was rare for a non-engineering freshman to have a computer in his dorm room let alone be able to write programs on it. &amp;nbsp;The program was nothing big, just odd, given the circumstances. &amp;nbsp;It wasn't an&amp;nbsp;assignment, I just thought it would be a fun way to implement some of what I had learned in class.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; "You're a film major?" the professor asked.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; "Yes. &amp;nbsp;I've always wanted to be a film maker," I said.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; The&amp;nbsp;professor&amp;nbsp;shook her head. &amp;nbsp;"You are in the wrong major."&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; Of course I blew it off. &amp;nbsp;It was flattering that she liked the program but there was no way no how I was going to switch majors away from film. &amp;nbsp;Certainly nothing to do with &lt;i&gt;computers&lt;/i&gt;. &amp;nbsp;Film was/is cool. &amp;nbsp;Computers were not cool then and, Apple products aside, they are not cool now. &amp;nbsp;I was finally free of the computer nerd stench that clung to me all through junior high (where I won two programming contests) and&amp;nbsp;high school(where I always did well in science fair by writing software). &amp;nbsp;I was going to be an auteur. &amp;nbsp;Truth be told, I felt like I already was one. &amp;nbsp;Did you see my 8th video project called Tenja the Teenage Ninja? &lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; But the film career never got going. &amp;nbsp;I decided, for a number of reasons, to drop the film degree but I sure was not going to do anything related to computers. &amp;nbsp;That was for dorks. &amp;nbsp;Did I ever stop writing code though? &amp;nbsp;Nope. &amp;nbsp;I wrote code for my employers. &amp;nbsp;I wrote code for friends who were still in school (I dropped out of college altogether). &amp;nbsp;The bulk of what I wrote was just for me, just to see if I could make the computer do something. &amp;nbsp;I bought books on PC hardware and software development and read them cover to cover. &amp;nbsp;I eventually ended up working in the tech shop for Best Buy (this was pre-Geek Squad). &amp;nbsp;I worked tech support for Intuit where I finally finagled my way into doing &lt;i&gt;some&lt;/i&gt; software development. &amp;nbsp;Five years of unmet expectations had finally gotten through to me. &amp;nbsp;Life had given me a mountain of software development lemons...it was time to make some software development lemonade. &lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; I thought about this the other day as I was reading &lt;a href="http://www.amazon.com/gp/product/0316017922?ie=UTF8&amp;amp;tag=theinksmudge-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0316017922"&gt;Outliers: The Story of Success&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=theinksmudge-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=0316017922" style="border: none !important; margin: 0px !important;" width="1" /&gt;&amp;nbsp;by Malcolm Gladwell. &amp;nbsp;He talks a lot about the Rule of 10,000 which says that if a person devotes 10,000 hours or more to a certain interest they will become very, very good at it. &amp;nbsp;I set the book aside, did some quick&amp;nbsp;calculations&amp;nbsp;and realized that I had cleared the 10,000 hours of software development &lt;i&gt;before&lt;/i&gt;&amp;nbsp;I ever got paid a dime for doing it. &amp;nbsp;My parents tell stories of my early teenage years where they would be sitting in the den and have a conversation that went something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; "Where's Jon?" asked my mother.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; "In his room I guess," said my dad.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; "He's been in there for hours. &amp;nbsp;What's he doing?" asked my mom.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; They got up and knocked on my door. &amp;nbsp;No answer. &amp;nbsp;My dad cracked open the door and there I was sitting in front of my &lt;a href="http://www.web8bits.com/Marcas/Texas_Instruments/English/TI-994A.html"&gt;TI 99/4A&lt;/a&gt; complete with b/w TV as a monitor, coding a way. &amp;nbsp;I had the headphones on with the&amp;nbsp;&lt;a href="http://deconstructingproductdesign.com/sony-walkman-tps-l2/"&gt;Walkman&lt;/a&gt;&amp;nbsp;blaring &lt;a href="http://www.amazon.com/gp/redirect.html?ie=UTF8&amp;amp;location=http%3A%2F%2Fwww.amazon.com%2Fs%3Fie%3DUTF8%26x%3D0%26ref_%3Dnb_sb_ss_i_0_22%26y%3D0%26field-keywords%3Dvan%2520halen%2520fair%2520warning%26url%3Dsearch-alias%253Ddigital-music%26sprefix%3Dvan%2520halen%2520fair%2520warning&amp;amp;tag=theinksmudge-20&amp;amp;linkCode=ur2&amp;amp;camp=1789&amp;amp;creative=390957"&gt;Van Halen&lt;/a&gt;&lt;img alt="" border="0" height="1" src="https://www.assoc-amazon.com/e/ir?t=theinksmudge-20&amp;amp;l=ur2&amp;amp;o=1" style="border: none !important; margin: 0px !important;" width="1" /&gt; or &lt;a href="http://www.amazon.com/gp/product/B000W23H8S?ie=UTF8&amp;amp;tag=theinksmudge-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=B000W23H8S"&gt;The Police&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=theinksmudge-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=B000W23H8S" style="border: none !important; margin: 0px !important;" width="1" /&gt;. &amp;nbsp;My dad would come back around 11:30pm and if I was still awake he would make me go to bed, where I would read &lt;a href="http://www.amazon.com/gp/product/0786926813?ie=UTF8&amp;amp;tag=theinksmudge-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0786926813"&gt;Dragonlance Chronicles&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=theinksmudge-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=0786926813" style="border: none !important; margin: 0px !important;" width="1" /&gt;&amp;nbsp; by flash light until I fell asleep around 1am. &amp;nbsp;I nodded off in class a lot.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; Anyway, I'm thirty six years old now and finally back in school. &amp;nbsp;However, I still haven't decided on a technology related degree. &amp;nbsp;I'm really digging the English courses I'm taking now, but &lt;a href="http://www.ircs.upenn.edu/education/ba-cogsci.shtml"&gt;Cognitive Science&lt;/a&gt; is looking pretty interesting. &amp;nbsp;It does not really matter since I plan to be in school for a long, long time.&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; Sorry for the disjointed post. &amp;nbsp;I'll do better next time.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; Next up, a tech post!&lt;img src="http://feeds.feedburner.com/~r/Jonwearcom/~4/FSEbAzfKPV4" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Jonwearcom/~3/FSEbAzfKPV4/wrong-major.html</link><author>noreply@blogger.com (Jon Wear)</author><thr:total>1</thr:total><georss:featurename>Philadelphia, PA, USA</georss:featurename><georss:point>39.952335 -75.163789</georss:point><georss:box>39.6891495 -75.630708 40.2155205 -74.69686999999999</georss:box><feedburner:origLink>http://www.jonwear.com/2010/10/wrong-major.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5069773377440884070.post-8280961161671397902</guid><pubDate>Sun, 29 Aug 2010 22:47:00 +0000</pubDate><atom:updated>2010-08-29T18:47:10.529-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">nba</category><title>Time keeps on slippin'</title><description>&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; In the August 26th Sports section of the WSJ, there is a side-bar on page D8 that discusses the practice of fouling late in close NBA games. &amp;nbsp;In particular, the article talks about whether or not a team that is up by three should foul the opposition in order to keep them from launching a three pointer and tying the game. &amp;nbsp;According to John Ezekowitz at the Harvard Sports Analysis Collective,&lt;a href="http://harvardsportsanalysis.wordpress.com/2010/08/24/intentionally-fouling-up-3-points-the-first-comprehensive-cbb-analysis/"&gt; it doesn’t really matter&lt;/a&gt;. &amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; Clock management will continue to be a metric on which coaches and players are judged. &amp;nbsp;Several of the major NBA statistics sites have a category for "crunch time" shooting percentage, which is, how well does a player shoot in the waining seconds of a close game. &amp;nbsp;Of course, baskets scored in the first quarter count just as much as baskets late in the game, but the excitement isn’t the same. &amp;nbsp;It makes sense to take clock management in the waning seconds of a game seriously, but it was not always so. &amp;nbsp;At one time, end game clock management started a lot sooner. &amp;nbsp;Sometimes at the beginning of the 4th quarter. &amp;nbsp;Sometimes midway through the third. &amp;nbsp;Let me take you back to a time when the game moved...a...whole...lot...(wait for it)...slower.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; On &lt;a href="http://www.basketball-reference.com/boxscores/index.cgi?month=11&amp;amp;day=22&amp;amp;year=1950"&gt;November 22nd, 1950&lt;/a&gt; fans of the NBA were treated to the lowest scoring game in the history of the league. &amp;nbsp;Final score: 19-18. &amp;nbsp;That's four full periods of professional basketball. &amp;nbsp;The record still stands. &amp;nbsp;The court was narrower than it is today, the players were bigger and there was little finesse to the game. &amp;nbsp;Conservative coaching styles made it worse. &amp;nbsp;Players such as Bob Cousy of the Boston Celtics were masters at holding the ball and dribbling out minute after mind numbing minute. &amp;nbsp;During that futile game, each team scored four baskets (the rest of the points came from the free throw line). &amp;nbsp;Four total points were scored in the final twelve minutes. &amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; Enter Danny Biasone, the owner of the Syracuse Nationals. &amp;nbsp;In addition to having the perfect last name for an NBA owner, Mr. Biasone knew that something needed to change. &amp;nbsp;If things kept up, parents were going to start sending their kids to NBA games as punishment. &amp;nbsp;Groups of Zen students started showing up to games for Zazen in the gym nights (notice the thought, return to the game, notice the thought, return to the game...) He felt the game needed to be sped up. &amp;nbsp;A lot. &amp;nbsp;So, rather than allowing a team to hold onto the ball for as long as it literally could hold onto it, he decided a team had to attempt a shot within a predetermined amount time. &amp;nbsp;The device he came up with that tracked how many seconds remained before a team had to take a shot was called the Secondary Horologicaly Optimal Timepiece or S.H.O.T. clock. &amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; According to the article History of the Shot Clock on NBA.com, Mr. Biasone came up with 24 seconds as the magical, league saving interval, by taking the total number of seconds in an NBA game and dividing that by the average number shots attempted by both teams. &amp;nbsp;This is incorrect. &amp;nbsp;What Mr. Biasone did was look through the box scores of games that he had enjoyed immensely, and took the average number of shots attempted in those games. &amp;nbsp;Masochist disasters like the like the one that happened on November 22nd, 1950 were not used. &amp;nbsp;Mr. Biasone calculated that exciting games that people enjoyed watching were ones where each team attempted about sixty shots each. &amp;nbsp;That came to one hundred twenty shots per game. &amp;nbsp;Take 2,880 seconds and divide by 120 and you get...24 seconds. &amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; Twenty four. &amp;nbsp;It was perfect. &amp;nbsp;It was the number of hours in day, the number of carats in pure gold, the number major and minor keys in Western tonal music. &amp;nbsp;It was the number that saved the game of professional basketball.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; By the end of the 1958-1959 season, every team in the league was averaging at least one hundred points. &amp;nbsp; The NBA never looked back. &amp;nbsp;It was not long before NCAA basketball games had shot clocks as well.&lt;/div&gt;&lt;div&gt;Had it not been for the genius of Mr. Biasone, we would not have the excellent game we have today. Without the shot clock the NBA would have probably died out somewhere in the 60s with the final few games resembling the movement of tectonic plates. &amp;nbsp;Thanks to Mr. Biasone we no longer confuse the final score of basketball games with baseball and hockey final scores. &amp;nbsp;The history of the shot clock everyone. &amp;nbsp;I hope you’ve enjoyed this week’s article. &amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; What will we have next time? &amp;nbsp;The die roll is a...10. &amp;nbsp;Coming up, a short fiction piece.&lt;/div&gt;&lt;/span&gt;&lt;/span&gt;&lt;img src="http://feeds.feedburner.com/~r/Jonwearcom/~4/1uzpQ2TbnyQ" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Jonwearcom/~3/1uzpQ2TbnyQ/time-keeps-on-slippin.html</link><author>noreply@blogger.com (Jon Wear)</author><thr:total>0</thr:total><feedburner:origLink>http://www.jonwear.com/2010/08/time-keeps-on-slippin.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5069773377440884070.post-6608395363980114619</guid><pubDate>Wed, 21 Jul 2010 23:06:00 +0000</pubDate><atom:updated>2010-07-21T19:06:03.071-04:00</atom:updated><title>Facebook Value</title><description>Just a quick one question poll. &amp;nbsp;Just pretend it's radio buttons instead of check boxes. &amp;nbsp;I only meant to allow one answer. &amp;nbsp;That's what you get for making a poll on an iPhone.&lt;br /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;script src="http://twtpoll.com/js/badge.js" type="text/javascript"&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;script src="http://twtpoll.com/badge/?twt=d4euki&amp;amp;b=1" type="text/javascript"&gt;
&lt;/script&gt;&lt;img src="http://feeds.feedburner.com/~r/Jonwearcom/~4/Kn5MmUfTBjc" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Jonwearcom/~3/Kn5MmUfTBjc/facebook-value.html</link><author>noreply@blogger.com (Jon Wear)</author><thr:total>0</thr:total><feedburner:origLink>http://www.jonwear.com/2010/07/facebook-value.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5069773377440884070.post-1294594041884821264</guid><pubDate>Fri, 02 Jul 2010 19:49:00 +0000</pubDate><atom:updated>2010-11-10T11:06:07.594-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">service</category><category domain="http://www.blogger.com/atom/ns#">install</category><category domain="http://www.blogger.com/atom/ns#">vb.net</category><title>Installing a Windows Service</title><description>There are already numerous posts on the web that explain how to do parts of this. &amp;nbsp;Unfortunately, few of them have all of the steps in one post. &amp;nbsp;Windows services are great, but they ain't all that easy to install once you are done developing them.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;The following assumes Visual Studio 2008.&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
To create a windows service:&lt;br /&gt;
&lt;br /&gt;
Start a New VB Project&lt;br /&gt;
&lt;br /&gt;
Select &lt;b&gt;Windows&lt;/b&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_H4F5AXk21cU/TC4WgdKZgyI/AAAAAAAAE4E/LUrzetB57N4/s1600/img1.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_H4F5AXk21cU/TC4WgdKZgyI/AAAAAAAAE4E/LUrzetB57N4/s1600/img1.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;&lt;/ol&gt;&lt;br /&gt;
&lt;br /&gt;
Select Windows Service&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_H4F5AXk21cU/TC4WiGol-uI/AAAAAAAAE4I/p5UR0VB8AnM/s1600/img2.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_H4F5AXk21cU/TC4WiGol-uI/AAAAAAAAE4I/p5UR0VB8AnM/s1600/img2.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The once it's created, double click the service1.vb file in the project explorer (or whatever you want to name it). &lt;br /&gt;
&lt;br /&gt;
There are only two sub routines in this file, &lt;i&gt;OnStart() &lt;/i&gt;and &lt;i&gt;OnStop()&lt;/i&gt;. &amp;nbsp;There are comments inside each subroutine telling you how they should be used.&lt;br /&gt;
&lt;br /&gt;
In order to debug this service, you need to add the following sub routine to the file:&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
Public Sub New()&lt;br /&gt;
&lt;br /&gt;
' This call is required by the Windows Form Designer.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; InitializeComponent()&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; ' Add any initialization after the InitializeComponent() call.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; If Debugger.IsAttached = True Then&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Dim tempargs() As String&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Me.OnStart(tempargs)&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;System.Threading.Thread.Sleep(System.Threading.Timeout.Infinite)&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; End If&lt;br /&gt;
&lt;br /&gt;
End Sub&lt;br /&gt;
&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
When you debug your service, you’ll actually be able to debug it like a regular console/winforms application. &amp;nbsp;You can leave this code in the application when you release it, since it won’t run if there is no debugger attached.&lt;br /&gt;
&lt;br /&gt;
Now comes the fun part. &amp;nbsp;Services don’t install the regular way: &amp;nbsp;Once you are done with your project, you need to add an Installer to your windows service project &amp;nbsp;Open the designer for the service class. &amp;nbsp;It will look something like this:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_H4F5AXk21cU/TC5ADz0xzaI/AAAAAAAAE4M/DUGbB-CBm1c/s1600/addcomp.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="133" src="http://1.bp.blogspot.com/_H4F5AXk21cU/TC5ADz0xzaI/AAAAAAAAE4M/DUGbB-CBm1c/s320/addcomp.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Right click somewhere in the gray area and select Add Installer:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_H4F5AXk21cU/TC5ANQUK8pI/AAAAAAAAE4Q/bv3lDRPn15E/s1600/addinstall.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_H4F5AXk21cU/TC5ANQUK8pI/AAAAAAAAE4Q/bv3lDRPn15E/s1600/addinstall.PNG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Give it a NAME! &amp;nbsp;Don’t leave it as Installer1.vb. &amp;nbsp;Call it Install&lt;project&gt;.vb or something like that. &amp;nbsp;&lt;/project&gt;Double click your new install file (it’s in the solution explorer) and look at the designer view. &amp;nbsp;You should see a message stating that you should add components. &amp;nbsp;Right click the tool box and select “Choose Items”&lt;br /&gt;
&lt;br /&gt;
Wait a while so that VS can come up with the list of components. &amp;nbsp;This make take a bit. &amp;nbsp;There’s no progress bar so you’ll just have to wait.&lt;br /&gt;
&lt;br /&gt;
Once the list comes up, scroll down to the S’es and select ServiceInstaller and ServiceProcessInstaller. &amp;nbsp;Click okay and you should see them in your tool box.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Drag a ServiceInstaller to the&amp;nbsp;Designer&lt;/li&gt;
&lt;li&gt;Drag a ServiceProcessInstaller to the&amp;nbsp;Designer&lt;/li&gt;
&lt;li&gt;Click on the ServiceProcessInstaller1 control&lt;/li&gt;
&lt;ol&gt;&lt;li&gt;Make sure the Parent Property is set to the name of your Installer Class (It’s the installer file you added to the solution explorer). &amp;nbsp;If you click Parent you should see a drop down list of classes. &amp;nbsp;Choose the installer class you added.&lt;/li&gt;
&lt;/ol&gt;&lt;li&gt;Click the ServiceInstaller1 control&lt;/li&gt;
&lt;li&gt;Make sure the Parent Property is set to the name of your Installer Class (It’s the installer file you added to the solution explorer). &amp;nbsp;If you click Parent you should see a drop down list of classes. &amp;nbsp;Choose the installer class you added.&lt;/li&gt;
&lt;li&gt;Type the description of the service. (This will show up in the Services MMC window with all the other installed services).&lt;/li&gt;
&lt;li&gt;Type the DisplayName. (This will show up in the Services MMC window with all the other installed services).&lt;/li&gt;
&lt;li&gt;Type the ServiceName. (I believe this is the name of the process that will show up in Task Manager)&lt;/li&gt;
&lt;li&gt;Set the Startup Type (Automatic, Manual or Disabled) &amp;nbsp;You’ll probably want Automatic.&lt;/li&gt;
&lt;li&gt;Change the compile option from Debug to Release.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Now&lt;/i&gt;&amp;nbsp;you are ready to compile and install.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Build&lt;/b&gt; the application. &amp;nbsp;Do no publish it.&lt;/li&gt;
&lt;ol&gt;&lt;li&gt;Make sure that the server you will run this on has .NET 3.5 SP1. &amp;nbsp;If it does not, you’ll have to install it on that server before continuing.&lt;/li&gt;
&lt;/ol&gt;&lt;li&gt;Copy your release directory to that server.&lt;/li&gt;
&lt;li&gt;RDP to that server and open a command prompt.&lt;/li&gt;
&lt;li&gt;Change directory to C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727&lt;/li&gt;
&lt;li&gt;That is not a mistake, it should be the v2 directory.&lt;/li&gt;
&lt;li&gt;Run the following command:&lt;/li&gt;
&lt;li&gt;Installutil.exe (followed by the path to the exe you setup in step 13).&lt;/li&gt;
&lt;li&gt;If you selected the service to run as a User you’ll get a pop up asking for the user credentials.&lt;/li&gt;
&lt;/ol&gt;If everything installed correctly, you should see a bunch of text that ends with this:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_H4F5AXk21cU/TC5BtYd_bgI/AAAAAAAAE4U/D3oupimPexg/s1600/cmd.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="115" src="http://4.bp.blogspot.com/_H4F5AXk21cU/TC5BtYd_bgI/AAAAAAAAE4U/D3oupimPexg/s640/cmd.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Open up the Services MMC and you should see your service installed.&lt;br /&gt;
&lt;br /&gt;
Be sure to start it.&lt;br /&gt;
&lt;br /&gt;
There you go. &amp;nbsp;Now you can run windows services instead of constantly writing console applications that are fired off every five minutes from the Windows Task Scheduler.&lt;img src="http://feeds.feedburner.com/~r/Jonwearcom/~4/A37o7bNmA3U" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Jonwearcom/~3/A37o7bNmA3U/installing-windows-service.html</link><author>noreply@blogger.com (Jon Wear)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_H4F5AXk21cU/TC4WgdKZgyI/AAAAAAAAE4E/LUrzetB57N4/s72-c/img1.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.jonwear.com/2010/07/installing-windows-service.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5069773377440884070.post-1249035460907094263</guid><pubDate>Wed, 12 May 2010 14:20:00 +0000</pubDate><atom:updated>2010-05-12T10:20:10.781-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">photography</category><category domain="http://www.blogger.com/atom/ns#">iphone</category><title>I'm on iPhonegraphy today!</title><description>Just a quick note: &amp;nbsp;I've really gotten into the iPhone photography thing here lately. &amp;nbsp;The good folks at iPhoneography were kind enough to show my stuff in one of their reader showcases. &amp;nbsp;You can find their site &lt;a href="http://www.iphoneography.com/journal/2010/5/12/the-iphoneography-showcase-of-jon-wear.html"&gt;here&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
I do have lots of software related posts to do, but they take a while to prepare. &amp;nbsp;I'll get back to the main mission soon.&lt;img src="http://feeds.feedburner.com/~r/Jonwearcom/~4/RPCaDEGxDu0" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Jonwearcom/~3/RPCaDEGxDu0/im-on-iphonegraphy-today.html</link><author>noreply@blogger.com (Jon Wear)</author><thr:total>0</thr:total><feedburner:origLink>http://www.jonwear.com/2010/05/im-on-iphonegraphy-today.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5069773377440884070.post-7217368995363381300</guid><pubDate>Fri, 07 May 2010 16:39:00 +0000</pubDate><atom:updated>2010-05-07T15:38:00.152-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">twitter</category><title>Learning about Twitter</title><description>I was going to write a long post about Twitter and how useful it is.  I've spoken to several people who think it's all celebs and teenagers.  There's a fair amount of that, but there is so much more. Lots of people are using it for very useful purposes. &amp;nbsp;Twitter demographic&amp;nbsp;statistics&amp;nbsp;can be found &lt;a href="http://www.quantcast.com/twitter.com/lifestyle#demographics"&gt;here&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Anyway, like I said, I &lt;i&gt;was&lt;/i&gt;&amp;nbsp;going to write a post about Twitter, but the post I wanted to write has already been written by Scott Hanselman. &amp;nbsp;If you aren't on Twitter or don't know much about it, I highly&amp;nbsp;recommend&amp;nbsp;you &lt;a href="http://www.hanselman.com/blog/HowToTwitterFirstStepsAndATwitterGlossary.aspx"&gt;read this post&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Interested? &amp;nbsp;Sign up &lt;a href="https://twitter.com/signup"&gt;here&lt;/a&gt;. &amp;nbsp;If you do, then &lt;a href="http://twitter.com/genghisjahn"&gt;follow me&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Also check out his video about Life with&amp;nbsp;Diabetes&amp;nbsp;and find out how you can make a contribution to help find a cure.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;object height="295" style="background-image: url(http://i3.ytimg.com/vi/jsxFbDIvQRw/hqdefault.jpg);" width="480"&gt;&lt;param name="movie" value="http://www.youtube.com/v/jsxFbDIvQRw&amp;amp;hl=en_US&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/jsxFbDIvQRw&amp;amp;hl=en_US&amp;amp;fs=1" width="480" height="295" allowscriptaccess="never" allowfullscreen="true" wmode="transparent" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;img src="http://feeds.feedburner.com/~r/Jonwearcom/~4/rFwbxAdN-Ec" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Jonwearcom/~3/rFwbxAdN-Ec/learning-about-twitter.html</link><author>noreply@blogger.com (Jon Wear)</author><thr:total>0</thr:total><feedburner:origLink>http://www.jonwear.com/2010/05/learning-about-twitter.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5069773377440884070.post-1640636803807376516</guid><pubDate>Tue, 04 May 2010 17:48:00 +0000</pubDate><atom:updated>2010-05-04T13:48:31.955-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">blog</category><category domain="http://www.blogger.com/atom/ns#">internet</category><title>Starting a blog</title><description>Starting a blog is easy. &amp;nbsp;Making sure you always have new (and somewhat interesting) content is hard. &amp;nbsp;I'll make you a deal, I'll give you some pointers on how to make a blog and leave the content up to you. &amp;nbsp;I do the easy part and you can do the hard part. &amp;nbsp;Fair enough? &lt;br /&gt;
&lt;br /&gt;
Actually, there can be lots to just starting a blog. &amp;nbsp;There are many different ways of doing this and there are multiple companies that provide similar services. &amp;nbsp;I have no strong feeling one way or the other for most of these. &amp;nbsp;This just happens to be what i use. &amp;nbsp;One more thing, you don't need any of this stuff to have fun blogging (other than the first step...creating a blog). &amp;nbsp;Let's begin.&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Create a blog on &lt;a href="http://www.blogger.com/"&gt;Blogger&lt;/a&gt;&amp;nbsp;(owned by Google).&lt;/li&gt;

&lt;ul&gt;&lt;li&gt;I suggest Blogger but only because I'm &amp;nbsp;used to it. &amp;nbsp;&lt;a href="http://wordpress.com/"&gt;WordPress&lt;/a&gt; is also one of the better known services. &amp;nbsp;&lt;/li&gt;
&lt;li&gt;There are lots of settings within blogger that you can mess around with. &amp;nbsp;I'm not going to go into detail on each of these but Blogger is well documented. &lt;a href="http://www.google.com/support/blogger/?hl=en"&gt;&amp;nbsp;Help pages&lt;/a&gt; abound.&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;&lt;a href="http://www.google.com/analytics"&gt;Google Analytics&lt;/a&gt;&amp;nbsp;(owned by Google)&lt;/li&gt;
&lt;ul&gt;&lt;li&gt;Google Analytics is a free service provided by Google that tracks your blog's visitors. &amp;nbsp;You can get their location down to the city, what browser they are using, screen size, what pages they visited on your site, how long they stayed there, what operating system they were using...it's all there. &amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;&lt;a href="http://feedburner.google.com/"&gt;Feed Burner&lt;/a&gt;&amp;nbsp;(owned by Google)&lt;/li&gt;
&lt;ul&gt;&lt;li&gt;Lots of people use &lt;a href="http://www.whatisrss.com/"&gt;RSS&lt;/a&gt; readers instead of visiting&amp;nbsp;individual&amp;nbsp;sites. &amp;nbsp;You should enable the RSS feed for your blog. &amp;nbsp;The only problem is, RSS readers don't register as site visitors since they are only reading the RSS feed, not the site itself. &amp;nbsp;Enter FeedBurner. &amp;nbsp;It's like Google Analytics for RSS feeds. &amp;nbsp;You don't have to do this to have an RSS feed. &amp;nbsp;All blogs provide one. &amp;nbsp;But you can use FeedBurner to track RSS subscribes so you can have a better idea of your true audience.&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;&lt;a href="http://twitterfeed.com/"&gt;TwiterFeed&lt;/a&gt;&lt;/li&gt;
&lt;ul&gt;&lt;li&gt;I could write an entire post on &lt;a href="http://www.twitter.com/"&gt;Twitter&lt;/a&gt; alone (and I probably will). &amp;nbsp;Even if you don't use Twitter, you want to link your blog to a Twitter account. &amp;nbsp;Why? &amp;nbsp;Because people who use Twitter share things they find with other people on Twitter. &amp;nbsp;So if they like your content, it's like free advertising. &amp;nbsp;So create a Twitter account that sounds something like your blog. &amp;nbsp;Fill in the blog's web address in the Twitter profile. &amp;nbsp;Then go over to TwitterFeed and link your blog's RSS feed to the Twitter account. &amp;nbsp;Once you have done this, each time you create a new blog post, it will&amp;nbsp;automatically&amp;nbsp;show up with in your Twitter feed. &amp;nbsp;It'll put the title and a bit.ly link back to the full page. &amp;nbsp;What is bit.ly? &amp;nbsp;Read on...&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;&lt;a href="http://bit.ly/"&gt;Bit.ly&lt;/a&gt;&lt;/li&gt;
&lt;ul&gt;&lt;li&gt;There are many different URL&amp;nbsp;shorteners&amp;nbsp;(&lt;a href="http://en.wikipedia.org/wiki/URL_shortening"&gt;more info&lt;/a&gt;). &amp;nbsp;Bit.ly just happens to be the one I use. &amp;nbsp;Bit.ly kind of builds off TwitterFeed and Twitter. &amp;nbsp;Since Twitter is limited to 140 characters, often times your entire Tweet is taken up by the URL alone. &amp;nbsp;Bit.ly takes the long URL and gives it a short one. &amp;nbsp;And...if you create a bit.ly account and then link it to your TwitterFeed account, you'll be able to track who,what, where, when people are clicking your bit.ly links from tweets&amp;nbsp;auto generated&amp;nbsp;by TwitterFeed. &amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;&lt;a href="http://addthis.com/"&gt;Addthis.com&lt;/a&gt;&lt;/li&gt;
&lt;ul&gt;&lt;li&gt;Addthis provides a handy little snippet of&amp;nbsp;JavaScript&amp;nbsp;(don't be afraid, the directions are easy to follow) that puts group of links at the bottom of your posts that allow people to share the link on Twitter, Facebook, Myspace, and several other social networking sites. &amp;nbsp;This is huge. &amp;nbsp;Why? &amp;nbsp;Because people who search for content like yours and find it often know other people who are interested in the same thing and if you make it easy for them to share what they found on your site, they will probably get more eyeballs on your content.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://sharethis.com/"&gt;Sharethis.com&lt;/a&gt; provides a similar service.&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;&lt;a href="http://www.facebook.com/advertising/?pages"&gt;Facebook Page&lt;/a&gt;&lt;/li&gt;
&lt;ul&gt;&lt;li&gt;If you're on Facebook, I would consider making a Facebook Page that imports it's wall content directly from your blog's RSS feed (a la Twitterfeed). &amp;nbsp;This allows people on Face Book to become a fan of it and then their friends see it an potentially join and so on. &amp;nbsp;You can also add a few other things to the page, like a calendar for events and a link back to the main blog.&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;Custom URL&lt;/li&gt;
&lt;ul&gt;&lt;li&gt;You can register a URL that links to your blog so that, for example, the address bar says, "http://www.jonwear.com" instead of "http://jonwear.blogspot.com". &amp;nbsp;It makes you look a little more stable. &amp;nbsp;This is the only thing in this lists that costs money. &amp;nbsp;Usually you can get a URL for around $10 a year. This involves a little know how&amp;nbsp;involving&amp;nbsp;things like &lt;a href="http://en.wikipedia.org/wiki/Domain_Name_System"&gt;DNS&lt;/a&gt; and &lt;a href="http://wiki.answers.com/Q/What_is_an_a_name_record_in_dns"&gt;A Name records&lt;/a&gt; and the like. &amp;nbsp;There's lots of documentation on the web on how to get this done, but you might want to bring &amp;nbsp;in a&amp;nbsp;knowledgeable&amp;nbsp;friend to get this setup. &amp;nbsp;I'm sure you know one.&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;Money!&lt;/li&gt;
&lt;ul&gt;&lt;li&gt;First off...you probably aren't going to make much (or any) money with your blog. &amp;nbsp;But you might, who knows...you might make pennies from the masses and retire. &amp;nbsp;Both of these services &amp;nbsp;integrate&amp;nbsp;well with Blogger. &amp;nbsp;I suggest:&lt;/li&gt;
&lt;ul&gt;&lt;li&gt;Google's &lt;a href="https://www.google.com/adsense/login/en_US/"&gt;Adsense&lt;/a&gt;&amp;nbsp;(You get very small amounts of money when people click ads on your site)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://associates.amazon.com/"&gt;Amazon Associates&lt;/a&gt;&amp;nbsp;(You get a cut of purchases that people make through your site)&lt;/li&gt;
&lt;/ul&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/Jonwearcom/~4/WJxzU6Z0j-c" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Jonwearcom/~3/WJxzU6Z0j-c/starting-blog.html</link><author>noreply@blogger.com (Jon Wear)</author><thr:total>0</thr:total><feedburner:origLink>http://www.jonwear.com/2010/05/starting-blog.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5069773377440884070.post-8711427071165387988</guid><pubDate>Thu, 29 Apr 2010 03:45:00 +0000</pubDate><atom:updated>2010-05-04T22:48:39.538-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">photography</category><category domain="http://www.blogger.com/atom/ns#">iphone</category><title>iPhone Images</title><description>I'm experimenting with the iPhone camera and some of the little photo apps that you can get for it. &amp;nbsp;I'm not sure if I'm taking good photographs or not, but I'm having a fun time with it. &amp;nbsp;Hard to believe that it has all these imaging capabilities...and it's a phone too.&lt;br /&gt;
&lt;br /&gt;
As is my usual MO, I setup a whole other blog devoted to just my iPhone masterpieces. &amp;nbsp;Common sense finally took over and I decided to do just a post about it instead. &amp;nbsp;I may do others and if I'm &lt;i&gt;still&lt;/i&gt;&amp;nbsp;into this several months from now then maybe I'll spin off another blog then. &lt;br /&gt;
&lt;br /&gt;
I've enjoyed working with the limitations of the iPhone. &amp;nbsp;I have to look for places with good lighting or else trick them up some way with the editing software. &amp;nbsp;The&amp;nbsp;constraints&amp;nbsp;are quite liberating so far. &amp;nbsp;Anyway...here they are. &amp;nbsp;I'll keep uploading new images to this Flickr album (&lt;a href="http://api.flickr.com/services/feeds/photoset.gne?set=72157623979917862&amp;nsid=32202994@N00&amp;lang=en-us"&gt;&lt;span class="goog-spellcheck-word" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial;"&gt;RSS&lt;/span&gt;&lt;/a&gt;):&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;object width="400" height="300"&gt; &lt;param name="flashvars" value="offsite=true&amp;lang=en-us&amp;page_show_url=%2Fphotos%2F32202994%40N00%2Fsets%2F72157623979917862%2Fshow%2F&amp;page_show_back_url=%2Fphotos%2F32202994%40N00%2Fsets%2F72157623979917862%2F&amp;set_id=72157623979917862&amp;jump_to="&gt;&lt;/param&gt;&lt;param name="movie" value="http://www.flickr.com/apps/slideshow/show.swf?v=71649"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;embed type="application/x-shockwave-flash" src="http://www.flickr.com/apps/slideshow/show.swf?v=71649" allowFullScreen="true" flashvars="offsite=true&amp;lang=en-us&amp;page_show_url=%2Fphotos%2F32202994%40N00%2Fsets%2F72157623979917862%2Fshow%2F&amp;page_show_back_url=%2Fphotos%2F32202994%40N00%2Fsets%2F72157623979917862%2F&amp;set_id=72157623979917862&amp;jump_to=" width="400" height="300"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;img src="http://feeds.feedburner.com/~r/Jonwearcom/~4/RovdQGVFfyU" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Jonwearcom/~3/RovdQGVFfyU/iphone-images.html</link><author>noreply@blogger.com (Jon Wear)</author><thr:total>0</thr:total><feedburner:origLink>http://www.jonwear.com/2010/04/iphone-images.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5069773377440884070.post-1524949212233604117</guid><pubDate>Wed, 21 Apr 2010 19:21:00 +0000</pubDate><atom:updated>2010-06-09T16:02:35.347-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">development</category><category domain="http://www.blogger.com/atom/ns#">.net</category><title>Time to learn</title><description>Several years ago I worked with a developer that did all of his development with classic ASP pages. It didn't matter what the task was, a classic ASP page was the answer. Instead of writing a console app or writing a .bat file to run an automated file manipulation task, he would reference COM objects from within the ASP page and run it under an account that had access to the file system and then schedule IE to run with that page as a command line argument. And it ran...most of the time. This guy was very comfortable with his classic ASP. During the time I knew him I never saw him write a windows application or a .net application of any kind. Classic ASP uber alles!&lt;br /&gt;
&lt;br /&gt;
I am not like that. &amp;nbsp;I certainly have my comfort zones. &amp;nbsp;I stayed with classic ASP during the initial days of ASP.Net. &amp;nbsp;I didn't fully leave my&amp;nbsp;spaghetti&amp;nbsp;code ways behind until version 2.0 of the framework came out. &amp;nbsp;Then I left it behind for good. &amp;nbsp;But VB6? &amp;nbsp;I dropped it as soon as I tried my first .Net WinForms application. &amp;nbsp;I cannot quite explain why. &amp;nbsp;It was different enough that I found myself spending a lot of time relearning old tasks (like adding items to a drop down box and actually seeing the text). &amp;nbsp;But I could see the potential. &amp;nbsp;You'd think I would have seen it in ASP.Net from the get go but I've always been a console/backend/windows developer first and a web developer by&amp;nbsp;necessity. &lt;br /&gt;
&lt;br /&gt;
Anyway, version 2.0 of the framework came along and that got me excited about web development. &amp;nbsp;It seemed like there were a dozen new technologies to learn. &amp;nbsp;Right about the time I got up to speed on the relevant (to me) parts of framework 2.0, version 3.0 came out. &amp;nbsp;Then version 3.5...the version 3.5 sp1...and SQL Server 2008. &amp;nbsp;I threw up my hands and gave up trying to learn it all. &amp;nbsp;I picked a few things here and there and learned what I could. &amp;nbsp;When I found something really useful, like Linq-to-SQL, I would talk it up with the other developers in my department and try to get them using the new better ways. &amp;nbsp;Some took to the&amp;nbsp;new ways, some kept on slogging the .Net 1.1 way. &amp;nbsp;You can bring a developer to water but you can't make him Linq. &lt;br /&gt;
&lt;br /&gt;
For me, I usualkly&amp;nbsp;learn so much about new technologies while working on a project&amp;nbsp;that by the time&amp;nbsp;it's finished, I want to rewrite the entire thing in the stuff I was learning while coding with the old stuff.&lt;br /&gt;
&lt;br /&gt;
What is this post about?&lt;br /&gt;
&lt;br /&gt;
This post is about all the new stuff that's come out recently(and somewhat recently) from Microsoft. &amp;nbsp;I was making a list of books I need to buy to get current on things and realized I was going to be spending a fortune. &amp;nbsp;Here are the technologies that I want to learn about:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;MVC 2.0&lt;/li&gt;
&lt;li&gt;WPF&lt;/li&gt;
&lt;li&gt;Silverlight 4.0&lt;/li&gt;
&lt;li&gt;.Net Framework 4.0&lt;/li&gt;
&lt;li&gt;Powershell (So hard to leave my cmd ways behind, but I need to)&lt;/li&gt;
&lt;li&gt;JQuery (I'm way behind on this)&lt;/li&gt;
&lt;li&gt;IIS 7.0&lt;/li&gt;
&lt;li&gt;SQL Server 2008 (somewhat advanced)&lt;/li&gt;
&lt;li&gt;Windows 7 (It's cool, I like it, but I'm still stumbling around some)&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;That's a full year's worth of reading right there. &amp;nbsp;I'm going to have to go back to doing it like I did in the old days when I ways trying as hard as I could to get out of the technical support department and into development. &amp;nbsp;I'll buy a book (or two) about each technology and read them from start to finish. &amp;nbsp;I won't remember all of what I read, but general concepts and terms will stick. &amp;nbsp;Later, I'll be thinking about a problem and think, "Wait a second....I read something about this..." and I'll flip through a book or Google a certain term and find my solution. &amp;nbsp;The fun parts of reading these 800+ page behemoths is when I come across a better way to do something I do all the time. &amp;nbsp;I know that sounds strange but, yes, those are the fun parts. &amp;nbsp;If it wasn't fun I wouldn't be able to do this for a living.&lt;br /&gt;
&lt;br /&gt;
Anyway, time to get reading.&amp;nbsp; &lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Jonwearcom/~4/eDomcsfkywI" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Jonwearcom/~3/eDomcsfkywI/time-to-learn.html</link><author>noreply@blogger.com (Jon Wear)</author><thr:total>0</thr:total><feedburner:origLink>http://www.jonwear.com/2010/04/time-to-learn.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5069773377440884070.post-552065040421872827</guid><pubDate>Thu, 01 Apr 2010 16:31:00 +0000</pubDate><atom:updated>2010-04-01T12:31:53.584-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">twitter</category><category domain="http://www.blogger.com/atom/ns#">rss</category><title>Twitter Feeds For Websites That Don't Have Twitter Feeds</title><description>How many times have you come across a website and thought, "Hey! &amp;nbsp;I'd like to follow this on Twitter!" but when you looked around for a "Follow Me" button on the website, you can't find one. &amp;nbsp;Not very often right? &amp;nbsp;I mean, most places have a Twitter feed now. &amp;nbsp;But not everyone. &amp;nbsp;So what do you do?&lt;br /&gt;
&lt;br /&gt;
Well, almost every single website that publishes content on at least a semi-regular basis has an &lt;a href="http://en.wikipedia.org/wiki/RSS"&gt;RSS feed&lt;/a&gt;. &amp;nbsp;That's your ticket. &amp;nbsp;You can use the RSS feed to create a Twitter feed. &amp;nbsp;Here's how:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Open a &lt;a href="https://twitter.com/signup"&gt;new Twitter account&lt;/a&gt; and give it a name and a unique email address.&lt;/li&gt;
&lt;ul&gt;&lt;li&gt;Gmail makes this easy by &lt;a href="http://labnol.blogspot.com/2007/08/gmail-plus-smart-trick-to-find-block.html"&gt;allowing you to add&lt;/a&gt; "+somename" to the account part of your email address. &amp;nbsp;So if your gmail address is "myname@gmail.com" you can use the email address "myname+something@gmail.com" and it will still go to your regular Gmail account but you can register it as a unique email address elsewhere.&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;Open an account at&amp;nbsp;&lt;a href="http://www.twitterfeed.com/"&gt;www.twitterfeed.com&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Click Create A New Feed&lt;/li&gt;
&lt;li&gt;Paste in the URL of the RSS feed.&lt;/li&gt;
&lt;ul&gt;&lt;li&gt;Click Advanced if you want to look through the other options.&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;Click Next and link the feed to your newly created Twitter account.&lt;/li&gt;
&lt;li&gt;Now go back to your REAL twitter account.&lt;/li&gt;
&lt;li&gt;Follow the Twitter account you just created.&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;For instance, I'm&amp;nbsp;interested&amp;nbsp;in player trades and roster changes in the NBA. &amp;nbsp;There is an RSS feed for this but no Twitter feed. &amp;nbsp;At least there was no Twitter feed. &amp;nbsp;Now there is and you can follow it at:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.twitter.com/nbaxact"&gt;http://www.twitter.com/nbaxact&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Jonwearcom/~4/k4Hvmc0Yvg8" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Jonwearcom/~3/k4Hvmc0Yvg8/twitter-feeds-for-websites-that-dont.html</link><author>noreply@blogger.com (Jon Wear)</author><thr:total>0</thr:total><feedburner:origLink>http://www.jonwear.com/2010/04/twitter-feeds-for-websites-that-dont.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5069773377440884070.post-4443678450717489958</guid><pubDate>Sat, 27 Mar 2010 20:20:00 +0000</pubDate><atom:updated>2010-06-09T16:02:16.124-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">vb.net</category><category domain="http://www.blogger.com/atom/ns#">development</category><title>Numlock Morse Code</title><description>In Neal&amp;nbsp;Stephenson's&amp;nbsp;novel Cryptonomicon, Randy Waterhouse finds himself in a prison in the Philippines. &amp;nbsp;Randy has a laptop with some very valuable information on it that some bad guys want, but since the information is encrypted, they can't get to it. &amp;nbsp;So they allow Randy to keep his laptop in his jail cell but the only place he can put it is on top of a short, locked, file cabinet that has been chained to the floor. &amp;nbsp;The battery has been removed so the only way to get power is to leave it plugged in on top of the filing&amp;nbsp;cabinet. &amp;nbsp;The thing is, Randy doesn't even know what the information is yet, because it's encrypted too. He needs to decrypt the information, but not let the bad guys know he is decrypting it, or rather, he wants them to think he's doing it but give them the wrong information.&lt;br /&gt;
&lt;br /&gt;
He can't show the real decrypted info on the laptop display because he is afraid that the bad guys are trying to use a&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/Van_Eck_phreaking"&gt;Van Eck Phreaking&lt;/a&gt;&amp;nbsp;antenna&amp;nbsp;that is inside the filing cabinet&amp;nbsp;so they can eavesdrop on his laptop screen (he's already made sure there are no&amp;nbsp;hidden&amp;nbsp;cameras). &amp;nbsp; So he comes up with some fake decryption that he shows on the screen, but the real info has to be displayed another way. &amp;nbsp;He writes a program that takes text and translates it into Morse Code. &amp;nbsp;The program turns the the scroll lock light on and off to simulate dots and dashes. &amp;nbsp;Now he knows the real info from the blinking light, and the bad guys get the fake info he showed on the screen.&lt;br /&gt;
&lt;br /&gt;
I thought that was kind of cool so I wrote a program that does just that. &amp;nbsp;The only difference is my program blinks the num lock key instead of the scroll lock key (my keyboard doesn't have a scroll lock key).&lt;br /&gt;
&lt;br /&gt;
If you were to load this application on your windows PC and run the following from the command line:&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;c:\waterhouse\waterhouse.exe /T:"sos"&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
You would get this:&lt;br /&gt;
&lt;br /&gt;
&lt;object height="385" width="480"&gt;&lt;param name="movie" value="http://www.youtube.com/v/9WejibNeoU0&amp;hl=en_US&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/9WejibNeoU0&amp;hl=en_US&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Notice the &lt;b&gt;/T:"sos" &lt;/b&gt;that comes after the name of the application. &amp;nbsp;The /T: switch says, "turn this text into&amp;nbsp;Morse&amp;nbsp;code."&lt;br /&gt;
&lt;br /&gt;
You could also type this:&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;c:\waterhouse\waterhouse.exe /F:c:\morse.txt&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;/F: &lt;/b&gt;says to load a file and turn that into Morse code. &amp;nbsp;It can be a file on your computer, a UNC path or a file on the web (just prepend it with &lt;b&gt;http://&lt;/b&gt;). &amp;nbsp;The contents of the file &lt;b&gt;c:\morse.txt&lt;/b&gt;&amp;nbsp;on my computer happens to be my name. &amp;nbsp;So when you hit enter, you see this:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;object height="385" width="480"&gt;&lt;param name="movie" value="http://www.youtube.com/v/GrcOx6zS1r8&amp;hl=en_US&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/GrcOx6zS1r8&amp;hl=en_US&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;
&lt;br /&gt;
Help is available by typing the /? or /help switches.&lt;br /&gt;
&lt;br /&gt;
You can download the compiled application &lt;a href="http://docs.google.com/leaf?id=0B6Wwk39_GwMaN2U5YzgyNjQtMjlmOC00Y2I3LTk2NWUtYjhhYWVlMmI3MWJl&amp;amp;hl=en"&gt;here&lt;/a&gt;. (Windows only)&lt;br /&gt;
&lt;br /&gt;
You can download the source code &lt;a href="http://docs.google.com/leaf?id=0B6Wwk39_GwMaNjZjY2NmYmMtMjE1Zi00MTRlLWE2MTMtMWNmODJlZWYzMTdl&amp;amp;hl=en"&gt;here&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
You can download Microsoft's free Visual Basic 2008 Express development environment &lt;a href="http://www.microsoft.com/express/downloads/#2008-Visual-Basic"&gt;here&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Wikipedia: &lt;a href="http://en.wikipedia.org/wiki/Morse_code"&gt;Morse code&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/Jonwearcom/~4/1CW2WcrXTKQ" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Jonwearcom/~3/1CW2WcrXTKQ/numlock-morse-code.html</link><author>noreply@blogger.com (Jon Wear)</author><thr:total>0</thr:total><feedburner:origLink>http://www.jonwear.com/2010/03/numlock-morse-code.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5069773377440884070.post-9151657731761195540</guid><pubDate>Mon, 18 May 2009 01:59:00 +0000</pubDate><atom:updated>2010-06-09T16:00:05.452-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">development</category><category domain="http://www.blogger.com/atom/ns#">asp.net</category><category domain="http://www.blogger.com/atom/ns#">ajax</category><title>Auto Complete Example Project</title><description>I've written an ASP.Net project that shows how to configure the &lt;a href="http://www.asp.net/AJAX/AjaxControlToolkit/Samples/AutoComplete/AutoComplete.aspx"&gt;Auto Complete Extender&lt;/a&gt;(ACE), get back the text and the ID, and pull data to show in a details view.  If this is your first time using the ACE, pay special attention to the web service files and the javascript in the default.aspx page.&lt;br /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;To run this project you'll need &lt;a href="http://www.microsoft.com/express/vwd/"&gt;Visual Web Developer 2008 Express&lt;/a&gt;, &lt;a href="http://www.microsoft.com/express/sql/Default.aspx"&gt;MS SQL Express 2008&lt;/a&gt;, and the &lt;a href="http://www.codeplex.com/MSFTDBProdSamples/Release/ProjectReleases.aspx?ReleaseId=4004"&gt;Adventure Works&lt;/a&gt; demo database(AdventureWorksDB.msi).  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;In addition to the ACE I also used an &lt;a href="http://ajax.net-tutorials.com/controls/updatepanel-control/"&gt;ASP Update Panel&lt;/a&gt; and some basic &lt;a href="http://weblogs.asp.net/scottgu/archive/2007/05/19/using-linq-to-sql-part-1.aspx"&gt;Linq To SQL&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;You can download my example project &lt;a href="http://sites.google.com/site/inksmudgefiles/Home/AutoCompleteDemo.zip?attredirects=0"&gt;here&lt;/a&gt;.  You'll need to set the correct connection string in the web.config file to connect to your copy of the AdventureWorks database.  If you need help with connection strings, try &lt;a href="http://www.connectionstrings.com/"&gt;this site&lt;/a&gt;.&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Jonwearcom/~4/c2TGQKvM-94" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Jonwearcom/~3/c2TGQKvM-94/auto-complete-example-project.html</link><author>noreply@blogger.com (Jon Wear)</author><thr:total>0</thr:total><feedburner:origLink>http://www.jonwear.com/2009/05/auto-complete-example-project.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5069773377440884070.post-290131998810498717</guid><pubDate>Sun, 17 May 2009 01:58:00 +0000</pubDate><atom:updated>2010-06-09T16:00:19.739-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">development</category><category domain="http://www.blogger.com/atom/ns#">asp.net</category><category domain="http://www.blogger.com/atom/ns#">ajax</category><title>More AutoComplete</title><description>I have been getting a lot of hits on the Google Search Appliance Auto Complete &lt;a href="http://theinksmudge.blogspot.com/2009/02/auto-complete-on-google-search.html"&gt;post&lt;/a&gt;.  I thought I would add a few more notes concerning the Auto Complete control in the &lt;a href="http://www.asp.net/AJAX/AjaxControlToolkit/Samples/Default.aspx"&gt;ajax.net toolkit&lt;/a&gt;.  Let's say you have a &lt;i&gt;long&lt;/i&gt; list of items in a drop down list.  Wouldn't it be better to filter that list based on what the user types?  Yeah, of course!  That's why we have that functionality all over the web now.  The only probelm is that the Auto Complete control isn't as easy to use as the other controls in the Ajax control toolkit..  For instance:&lt;br /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;You have to write a web service to handle the back in call to the data source.  So if all of your data is in an MS SQL database, or Access, or XML, you have to write the query for that and put it in a web service and tag it with a WebMethod attribute.  Read more about web services &lt;a href="http://msdn.microsoft.com/en-us/library/8wbhsy70.aspx"&gt;here&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;The webservice that the Auto Complete calls can have any name but it &lt;i&gt;must &lt;/i&gt;have the following paramter signature:  &lt;b&gt;Public Function GetItemName(ByVal prefixText As String, ByVal count As Integer) As String()&lt;/b&gt;.   The first variable must be a string and it has to be called prefixText.  The second one must be called count and it has to be an Integer.  Read more about the Auto Complete extender &lt;a href="http://www.asp.net/AJAX/AjaxControlToolkit/Samples/AutoComplete/AutoComplete.aspx"&gt;here&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;One final thing you need to know about the Auto Complete extender is that most of the examples you'll find online show how to get back the text that the user selected, but they don't show you how to get back the ID.  Let's say you have a dropdown list of car parts.  There could be thousands of them.  The user types in a few letters, sees the part, arrows down to it and hits enter.  What you need now in order to do look ups in your related tables is the ID of that item, not the text itself.  How do you get that?  Inside my webMethod function I do something like this:  tempResult.Add(AjaxControlToolkit.AutoCompleteExtender.CreateAutoCompleteItem(itemname), itemID))&lt;br /&gt;
In this example tempResult is List( Of String). By using this CreateAutoCompleteItem function I can create an item that the Auto Complete Extender knows should be split into a text value to display and an ID value that will actually be used.  Now, the return type has to be a string array, so the last line of my function is "Return tempResult.toArray()".  I like working with generic lists but you could just as easliy dimension a string array with the size based on the count paramter.&lt;/li&gt;
&lt;li&gt;Now, how do I get the value back from the ajax call?  In the markup for the AutoComplete Extender, you need to specify a javascript function to be called after the user selects an item.  Something like this: &lt;b&gt;OnClientItemSelected="showItem"&lt;/b&gt;.  The &lt;b&gt;showItem&lt;/b&gt;&lt;b&gt; &lt;/b&gt;function will look something like this:&lt;br /&gt;
function ShowItem( source, eventArgs ) {&lt;br /&gt;
alert( " Key : "+ eventArgs.get_text() +"  Value :  "+eventArgs.get_value());&lt;br /&gt;
} &lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;What's that?  You don't want the value in a javascript alert, you want to assign it to an ASP.net control, like an asp:HiddenField or something like that?  Then do a getElementById('hiddencontrolID').value = eventArgs.get_value(); somewhere in your javascript function.&lt;/li&gt;
&lt;li&gt;Now you are probably going to ask...what if it's in a User Control and there are lots of them on the page and I don't know what the ID is going to be for each asp:Hidden control? That's an answer for another blog post.  If this one generates lots of hits I'll write it up.&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Jonwearcom/~4/OAHy1zD-ESM" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Jonwearcom/~3/OAHy1zD-ESM/more-autocomplete.html</link><author>noreply@blogger.com (Jon Wear)</author><thr:total>0</thr:total><feedburner:origLink>http://www.jonwear.com/2009/05/more-autocomplete.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5069773377440884070.post-5317214477793731031</guid><pubDate>Fri, 13 Feb 2009 02:53:00 +0000</pubDate><atom:updated>2011-07-15T17:20:30.743-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">development</category><category domain="http://www.blogger.com/atom/ns#">ajax</category><category domain="http://www.blogger.com/atom/ns#">gsa</category><title>Auto Complete on the Google Search Appliance</title><description>At my job we have an .aspx page that displays search results from a &lt;a href="http://www.google.com/enterprise/gsa/"&gt;Google Search Appliance&lt;/a&gt;. Nothing too fancy. The page passes the query,  gets the  XML results from the GSA, we pair that with an XSLT and sha-zam, search results. It was brought to my attention that some one higher up the chain wanted to know if we could have that "cool google suggest drop down thing" on our search page. &lt;a href="http://www.google.com/"&gt;Google&lt;/a&gt; has it. &lt;a href="http://www.amazon.com/"&gt;Amazon&lt;/a&gt; has it. Dang near &lt;em&gt;every &lt;/em&gt;text box on &lt;a href="http://www.facebook.com/"&gt;FaceBook&lt;/a&gt; has it. Why don't we? Seveal people told me that there must be a way to enable it, because it's a GSA and Google runs it on their site. Now, I'm as guilty as the next guy when it comes to assuming how hard/easy something is going to be. I'm not pointing fingers. As with most things, there's a little more to it.&lt;br /&gt;
&lt;br /&gt;
First off, the &lt;a href="http://www.asp.net/ajax/ajaxcontroltoolkit/samples/Default.aspx"&gt;Ajax toolkit &lt;/a&gt;from Microsoft has an &lt;a href="http://www.asp.net/AJAX/AjaxControlToolkit/Samples/AutoComplete/AutoComplete.aspx"&gt;auto complete extender&lt;/a&gt;. It's great for running against SQL tables, or XML files or just about any data source. You can get back the ID of the record that the user selected and really make things snazzy. The question is, how do I use a GSA as a data source?&lt;br /&gt;
&lt;br /&gt;
The GSA does return results in XML, but it doesn't do wild card queries. You can't do a search for "hea*" and get back &lt;em&gt;head, hearing, heart&lt;/em&gt; and things like that. You get &lt;em&gt;Dr.Hea&lt;/em&gt; and some mis-spellings and that's it. I did some looking on the &lt;a href="http://code.google.com/"&gt;Google Code&lt;/a&gt; site and found a "&lt;a href="http://code.google.com/p/search-as-you-type/"&gt;Search as you Type&lt;/a&gt;" project that seemed to do just what I wanted. It said in the documentation that you could turn any text box into a Google suggest box. It was written in PHP but I figured I could download it and convert the page to .Net. Most of it was in javascript files anyway so no biggie. Except that the page doesn't connect to a GSA. It has a pipe delimited text file that it uses as the demo source for the drop down. I looked through the readme.txt looking for some way to magically refernce the GSA. Nothing. What I had found was a Google Base code project that did the same thing as the ajax toolkit from Microsoft. I was right back where I started.&lt;br /&gt;
&lt;br /&gt;
I fumed for a little bit. I drummed my fingers on my desk. I went back to Google's site and looked over their page source and javascript files. Then, as I was taking a swig of &lt;a href="http://www.redbull.com/"&gt;Red Bull&lt;/a&gt;, I realized what Google was doing. They weren't running against their index either.&lt;br /&gt;
&lt;br /&gt;
Google is fast but not so fast that they can ajax call from your browser back to their index and back to your browser with search results each time you press a key (&lt;i&gt;Update 7/12/2011: &amp;nbsp;Actually, they are that fast now. &amp;nbsp;Most of my speculations about Google in this post are obsolete&lt;/i&gt;). They have been in the search business for quite a while so there is no doubt that they know the top 1,000 search terms for words that start with each letter of the alphabet. The top 1000 As, the top 1000 Bs and so forth. Google had compiled a list of the Top 26,000 key words (something like that, I'm gusessing) and that's what they are running against when they do the Google suggest ajax call.. That's why when you do an obscure search it doesn't show anything but when you hit "search" you get results.&lt;br /&gt;
&lt;br /&gt;
Now, back to my problem. It's not a problem anymore. I can run a report against our GSA, get back the top 10,000 or so search results, filter out the trash, and have everything I need in a nice and tidy XML document. I can put it in a SQL table or leave it in XML.  I'll b able to sort it either way.  Now I can use the ajax toolkit Auto Compete extender and in a short amount of time I have the same functionality as Google Suggest for our GSA.  Only I'll be using .Net.&lt;br /&gt;
&lt;br /&gt;
I'll post the code and link to the search page when I'm done. Shouldn't be long (will I ever learn to stop saying that).&lt;img src="http://feeds.feedburner.com/~r/Jonwearcom/~4/uMIIiQZX7X0" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Jonwearcom/~3/uMIIiQZX7X0/auto-complete-on-google-search.html</link><author>noreply@blogger.com (Jon Wear)</author><thr:total>0</thr:total><feedburner:origLink>http://www.jonwear.com/2009/02/auto-complete-on-google-search.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5069773377440884070.post-3373014533550003482</guid><pubDate>Thu, 12 Feb 2009 02:54:00 +0000</pubDate><atom:updated>2010-06-09T16:01:07.640-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">vb.net</category><category domain="http://www.blogger.com/atom/ns#">development</category><title>Debugging and Windows Service in VB.Net</title><description>Perhaps this is helpful, perhaps not. &amp;nbsp;I've spent the last 45 min looking over various blog posts and .Net sites trying to find an easy way to debug an NT service. &amp;nbsp;I kept coming across, install the serivce, start it, attached &amp;nbsp;a debugger to a process...etc. &amp;nbsp;I know there is an easy way to do it because I've used it several years ago in .Net 1.1. &amp;nbsp;I gave up searching and went looking through old source code and found it. 'Tis below:&lt;br /&gt;
&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
'****Modified by JWear on 4/12/2006****&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;Private Sub New()&lt;br /&gt;
If Debugger.IsAttached = True Then&lt;br /&gt;
' debug code: allows the process to run as a non-service&lt;br /&gt;
' will kick off the service start point, but never kill it.&lt;br /&gt;
' shut down the debugger to exit&lt;br /&gt;
'Open this page for help '                   'http://www.codeproject.com/dotnet/DebugWinServices.asp&lt;br /&gt;
Dim service As New YourService&lt;br /&gt;
Dim tempargs() As String&lt;br /&gt;
service.OnStart(tempargs)&lt;br /&gt;
System.Threading.Thread.Sleep(System.Threading.Timeout.Infinite)&lt;br /&gt;
Else&lt;br /&gt;
'Original Code Below&lt;br /&gt;
ServicesToRun = New System.ServiceProcess.ServiceBase() {New YourService}&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt; &lt;/code&gt;&lt;code&gt;System.ServiceProcess.ServiceBase.Run(ServicesToRun)&lt;br /&gt;
'Original Code Above&lt;br /&gt;
End If&lt;br /&gt;
'**************&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;End Sub&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;I left the page where I got it in the comments, a hat tip to the original site.  The page is no longer available.&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Jonwearcom/~4/IoQDw0oHzwg" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Jonwearcom/~3/IoQDw0oHzwg/debugging-and-windows-service-in-vbnet.html</link><author>noreply@blogger.com (Jon Wear)</author><thr:total>0</thr:total><feedburner:origLink>http://www.jonwear.com/2009/02/debugging-and-windows-service-in-vbnet.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5069773377440884070.post-8381869331344715851</guid><pubDate>Fri, 20 May 2005 04:10:00 +0000</pubDate><atom:updated>2010-04-21T00:13:02.251-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">programming</category><category domain="http://www.blogger.com/atom/ns#">writing</category><title>DOOMed</title><description>&lt;b&gt;&lt;i&gt;This is an old post from my first blog, the Ink Smudge.  I felt like including it here.  I wrote this in May of 2005.&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
&lt;p class="pe"&gt;So I work at a software company.  There are many topics that come up in conversation over and over again.  The Star Wars Prequels, the Simpsons, South Park, what's really wrong/right with the government, comic books, obscure movie references and...video games(many of these stories are told in some kind of "accent").  Many of the guys at the company either have had or are currently in the throws of a deep video game addiction.  I was an &lt;a href="http://www.idsoftware.com/" target="d1"&gt;id Software&lt;/a&gt; junkie back in the day.  Back in 2000, work would end and the office would play &lt;a href="http://www.idsoftware.com/games/quake/quake3-arena/" target="d2"&gt;Quake III&lt;/a&gt; for at least two hours after work.  Every day.  Sometimes we came in on Saturdays to play.  &lt;a href="http://www.civ3.com/" target="d3"&gt;Civ3&lt;/a&gt; was the worst.  On three separate occasions I have thrown that game away because it took up so much of my time.&lt;/p&gt;&lt;p class="pe"&gt;Those of you who are still reading this are doing one of two things.  You are either shaking your head and saying, "what a doorknob" or you are nodding your head, raising your hand in the air and saying "Preach on!"  I'll take the good with the bad.  At least you are still reading.&lt;/p&gt;&lt;p class="pe"&gt;Okay, where am I going with this?  Well here's the thing.  I do not have a college degree.  I made several attempts but never walked across the stage.  My mom has her degree but my father never got his.  I have two great parents but the combined salaries of a police officer and a public school teacher didn't exactly put us in the country club...er...club.  I'm not saying I had it bad.  I had it good.  But with no degree, no marketable trade and no trust fund, how was I going to make a living?&lt;/p&gt;&lt;p class="pe"&gt;So there I am back in 1994.  I knew that it was just a matter of time until I dropped out of college.  I went from being an out of state full time student to an in state part time student to a flunky who got up and walked out of his astronomy final exam because I did not have a clue what I was looking at on the planetarium dome.  I failed astronomy.  &lt;i&gt;Astronomy&lt;/i&gt; for crying out loud.&lt;/p&gt;&lt;p class="pe"&gt;One day while I was at work (I was a radio dispatcher for a wrecker service) a co-worker handed me a floppy disk.  It was your typical 3.5" disk that some people mistakenly called a "hard disk" at the time.&lt;/p&gt;&lt;p class="pe"&gt;"Here," he said, "Play this game."  It had one word written on it, &lt;i&gt;&lt;a href="http://en.wikipedia.org/wiki/Doom" target="d4"&gt;DOOM&lt;/a&gt;&lt;/i&gt;.&lt;/p&gt;&lt;p class="pe"&gt;It sat in a stack on my desk for several weeks.  I was busy with my real full time job, which was keeping up appearances.  It's hard work keeping up the illusion that you are a serious college student when in actuality you're just reading &lt;a href="http://en.wikipedia.org/wiki/Dragonlance" target="d5"&gt;Dragonlance&lt;/a&gt; novels and screwing around with whatever pirated games you can get your hands on.  Anyway, I popped in DOOM and I saw that opening screen.  Then the first person POV comes up.  I'm in that hallway.  I walk through that first door and that first monster jumps right in front of me.  Pure 2D Pixelated Horror!  I hit the Enter key to fire my pistol.  The monster screams.  I hit the key two more times and he falls.  My pulse is racing.  I'm sitting up in my chair (There is that great shot out the window to your right as you your character down the hallway).  It looks like the level just goes on forever.  &lt;/p&gt;&lt;p class="pe"&gt;I played until 10 am the next morning.&lt;/p&gt;&lt;p class="pe"&gt;That is what did it for me.  It started with Doom.  My &lt;a href="http://en.wikipedia.org/wiki/Packard_Bel" l="" target="d7"&gt;Packard Bell&lt;/a&gt; &lt;a href="http://en.wikipedia.org/wiki/486SX" target="d6"&gt;486sx&lt;/a&gt; 25 Mhz with 4MB of DIMM memory, 110 MB HDD, a 2x CD-ROM and a 16 bit sound card barely played it.  And of course, the 2400 Baud modem.  So I learned how to upgrade.  First the RAM went from 4 megs to 8 megs.  Then I got a clock trippler to take my chip to a 486 75mhz with the DX math co-processor.  Then I figured out how switch out that 100MB drive for a 1.0GB Western Digital (set me back over $300).  Then I disabled the on board modem and installed a screaming 14.4k modem so I could play doom head to head against other people (I played &lt;a href="http://en.wikipedia.org/wiki/John_Romero" target="d9"&gt;John "You're No" Romero&lt;/a&gt; once on DWANGO).  Now this is back in the day where no one really knew what the heck they were doing when it came to upgrading computers.  This was the day of comm port conflicts, IRQ conflicts and jumpered motherboards/hard drives.  Don't even get me started on deciphering modem initialization strings.  You couldn't look it up on the web because the web didn't exist yet.  There were no books because no one had done this before.  You just figured it out for yourself and pieced together the rest from FAQs and ReadMe.Docs that came with the downloaded addons.&lt;/p&gt;&lt;p class="pe"&gt;Then there was Doom II and it all got kicked up to another level.  Full blown editing tools were floating around.  I would play DOOM II all night with my friends and then we would start making our own levels (WAD file maniacs) when we woke up the next day.  Then there was Quake I and OpenGL hit big.  Everyone had to learn how to get their PCs to run the 3dFX video card so that all those crazy colors and the crisp resolution would come through.&lt;/p&gt;&lt;p class="pe"&gt;If you are still reading then I thank you.  I got a little carried away there.  Why did I go into all that?  That is where I learned how to be a programmer.  I learned how to trouble shoot, how to research, how to think about abstract things in my head and hold it there long enough to type some commands that would make it show up as a level in the Doom II engine.  If I could not figure something out then I would pour over books, download files and talk to other like minded junkies until we did figure it out.  Programming in QBASIC as a kid was interesting but DOOM made it fun.&lt;/p&gt;&lt;p class="pe"&gt;So in closing, if it had not been for id Software and their groundbreaking games Castle Wolfenstein and Doom, I'm not sure where I would be.  I'd be like that guy in the Sting song, "I got no prospects, no education, I was lucky to get a job at this gas station."  In my case it was working for AAA.  But now?  I started working in the Best Buy PC upgrade/repair shop in 1995.  In 1996 I went to technical support for a software company and ended up writing software for them until I left in 1998.  After that I went to development full time, building experience and a skill set a little at a time until I got to where I am now.  Am I on top of the world?  Heck no.  But I can write half decent code and solve the tech problems that come my way due to the time I put in figuring out how to make hardware run a game and then how to make that game do more.  Without id Software, I don't know if that would have happened.&lt;/p&gt;&lt;p class="pe"&gt;So now, as far as economics go, life is good.  Debt is going down, savings are going up and as long as I stay current I take care of my fiscal responsibilities and finance my writing endeavors.  Speaking of which, I need to get on that. Remember to keep moving.  You don't wanna get &lt;a href="http://en.wikipedia.org/wiki/Telefrag" target="d10"&gt;telefragged&lt;/a&gt;.&lt;/p&gt;&lt;p class="pe"&gt;Wikipiedia: &lt;a href="http://en.wikipedia.org/wiki/Doom" target="hd"&gt;Doom&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Jonwearcom/~4/Q-E5T_BuqeE" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Jonwearcom/~3/Q-E5T_BuqeE/doomed.html</link><author>noreply@blogger.com (Jon Wear)</author><thr:total>0</thr:total><feedburner:origLink>http://www.jonwear.com/2005/05/doomed.html</feedburner:origLink></item></channel></rss>
