<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://weblogs.asp.net/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><title type="html">ShankuN's Blog</title><subtitle type="html">The Online Weblog of Shanku Niyogi, ASP.NET Group Program Manager</subtitle><id>http://weblogs.asp.net/shankun/atom.aspx</id><link rel="alternate" type="text/html" href="http://weblogs.asp.net/shankun/default.aspx" /><link rel="self" type="application/atom+xml" href="http://weblogs.asp.net/shankun/atom.aspx" /><generator uri="http://communityserver.org" version="3.0.20510.895">Community Server</generator><updated>2004-02-19T13:53:00Z</updated><entry><title>My New Blog, and Atlas for PHP</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/shankun/archive/2006/04/05/441947.aspx" /><id>http://weblogs.asp.net/shankun/archive/2006/04/05/441947.aspx</id><published>2006-04-05T08:04:00Z</published><updated>2006-04-05T08:04:00Z</updated><content type="html">&lt;p&gt;As part of a New Year's resolution that's a little overdue :) , I have just rolled out a new blog at &lt;a href="http://www.shankun.com"&gt;http://www.shankun.com&lt;/a&gt;. That will be place to find new posts by me.&lt;/p&gt; &lt;p&gt;One of the first posts on the new site is an article on how to host Atlas with PHP, along with code for the sample I showed at the MIX 06 conference.&lt;/p&gt; &lt;p&gt;Do you have other things you'd like me to blog about? Send requests to this post, or through my site.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=441947" width="1" height="1"&gt;</content><author><name>ShankuN</name><uri>http://weblogs.asp.net/members/ShankuN.aspx</uri></author><category term="Personal" scheme="http://weblogs.asp.net/shankun/archive/tags/Personal/default.aspx" /></entry><entry><title>Atlas blog </title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/shankun/archive/2005/10/05/426678.aspx" /><id>http://weblogs.asp.net/shankun/archive/2005/10/05/426678.aspx</id><published>2005-10-05T18:32:00Z</published><updated>2005-10-05T18:32:00Z</updated><content type="html">&lt;p&gt;&lt;font face="Tahoma"&gt;Rich Ersek&amp;nbsp;has created a new Atlas blog for official announcements about Atlas, at &lt;/font&gt;&lt;A href="http://weblogs.asp.net/atlas"&gt;&lt;font face="Tahoma"&gt;http://weblogs.asp.net/atlas&lt;/font&gt;&lt;/a&gt;&lt;font face="Tahoma"&gt;. We'll be using this blog to announce updates to the Atlas site at &lt;/font&gt;&lt;a href="http://atlas.asp.net"&gt;&lt;font face="Tahoma"&gt;http://atlas.asp.net&lt;/font&gt;&lt;/a&gt;&lt;font face="Tahoma"&gt;, including updated preview bits, new samples and quickstarts, and articles. We're going to be updating the PDC preview bits with bug fixes in the next few days, and then make new releases available every month or so.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Tahoma"&gt;If you want to keep track of what's happening with Atlas, please subscribe to the &lt;/font&gt;&lt;A href="http://weblogs.asp.net/atlas/Rss.aspx"&gt;&lt;font face="Tahoma"&gt;RSS feed&lt;/font&gt;&lt;/a&gt;&lt;font face="Tahoma"&gt; for&amp;nbsp;the Atlas&amp;nbsp;Blog.&lt;/font&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=426678" width="1" height="1"&gt;</content><author><name>ShankuN</name><uri>http://weblogs.asp.net/members/ShankuN.aspx</uri></author><category term="ASP.NET" scheme="http://weblogs.asp.net/shankun/archive/tags/ASP.NET/default.aspx" /><category term="Atlas" scheme="http://weblogs.asp.net/shankun/archive/tags/Atlas/default.aspx" /></entry><entry><title>PDC 2005 Slides and Demo code</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/shankun/archive/2005/09/21/425750.aspx" /><id>http://weblogs.asp.net/shankun/archive/2005/09/21/425750.aspx</id><published>2005-09-21T20:46:00Z</published><updated>2005-09-21T20:46:00Z</updated><content type="html">&lt;p&gt;I've uploaded the &lt;a href="http://downloads.shankun.com/pdc2005/prs312.ppt"&gt;slides&lt;/a&gt; and &lt;a href="http://downloads.shankun.com/pdc2005/demo.zip"&gt;demo source code &lt;/a&gt;for my PDC 2005 presentation on Atlas.&lt;/p&gt; &lt;p&gt;To run the demo code, you need Visual Studio 2005 Beta 2, the SQL Express 2005 CTP that came with it, and the Atlas Preview bits, found on &lt;a href="http://go.microsoft.com/fwlink/?LinkId=52384"&gt;atlas.asp.net&lt;/a&gt;. Install the Atlas demo, and then create a new Atlas project on the filesystem. You can then expand the demo files into the same directory. If you're using IIS, you will also need to give write access to the ASPNET user to the App_Data directory of the site.&lt;/p&gt; &lt;p&gt;Some notes on the demo contents:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;The database (App_Data\TaskList.mdf) contains the schema for the tasklist. A second database, containing membership and profile info, is generated automatically. You can configure these using the connectionStrings settings in web.config.&lt;/li&gt; &lt;li&gt;The app_code directory contains the Task and TaskList business objects, the TaskListService, and the DAL code in the Providers directory.&lt;/li&gt; &lt;li&gt;The demo includes the conventional ASP.NET version of the site, in default.aspx and list.aspx.&lt;/li&gt; &lt;li&gt;The demo also includes UI to login and register users, in Login.aspx and Register.aspx.&lt;/li&gt; &lt;li&gt;A number of asmx files wrap the functionality in TaskListService.cs into web services.&lt;/li&gt; &lt;li&gt;AtlasDefault.aspx contains the Atlas version of the list editing UI, showing use of data sources, master details, client-side editing of a DataSource, client-side data insertion, hover behaviors, and autocomplete.&lt;/li&gt; &lt;li&gt;AllItems.aspx shows how to use the floating behavior with the profile service to do personalized, interactive UI.&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;Let me know if you have any questions or problems. Enjoy!&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=425750" width="1" height="1"&gt;</content><author><name>ShankuN</name><uri>http://weblogs.asp.net/members/ShankuN.aspx</uri></author><category term="ASP.NET" scheme="http://weblogs.asp.net/shankun/archive/tags/ASP.NET/default.aspx" /><category term="Atlas" scheme="http://weblogs.asp.net/shankun/archive/tags/Atlas/default.aspx" /></entry><entry><title>ASP.NET Atlas is now live!</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/shankun/archive/2005/09/13/425051.aspx" /><id>http://weblogs.asp.net/shankun/archive/2005/09/13/425051.aspx</id><published>2005-09-13T20:00:00Z</published><updated>2005-09-13T20:00:00Z</updated><content type="html">&lt;p&gt;This morning, we just showed Atlas for the first time to the public in Jim Allchin's keynote at PDC 2005. We've been working on Atlas for a few months now, and it's very exciting to be able to have an early preview release in everyone's hands at PDC.&lt;/p&gt; &lt;p&gt;So, how do you get your hands on these Atlas bits? Go check out the Atlas community site at &lt;a href="http://atlas.asp.net"&gt;http://atlas.asp.net&lt;/a&gt;. Here, you can get download Atlas for use with Whidbey Beta 2.&amp;nbsp;The Atlas preview downloads as a VSI that installs into your Visual Studio Beta 2 release - you get new project items to start building Atlas apps.&lt;/p&gt; &lt;p&gt;We also have some documentation available to help you explore Atlas - including some conceptual docs, the full set of Atlas hands-on labs that PDC attendees are using, and a set of quickstarts to help you learn Atlas. The key to the site, of course, is the feedback we get from you - so we have a set of Atlas forums, and pointers to blogs hosted by team members such as &lt;a href="http://www.nikhilk.net"&gt;Nikhil&lt;/a&gt;, &lt;A href="http://weblogs.asp.net/bleroy"&gt;Bertrand&lt;/a&gt;, and &lt;a href="http://blogs.msdn.com/jhawk/"&gt;Jonathan&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Our ultimate goal with the Atlas site is to&amp;nbsp;build a great developer community around Atlas, and get your&amp;nbsp;valuable input&amp;nbsp;to help&amp;nbsp;build&amp;nbsp;the right product. We'll&amp;nbsp;release updates of our&amp;nbsp;community preview on a frequent basis, as well as samples and&amp;nbsp;documentation. I&lt;/p&gt; &lt;p&gt;If you're attending PDC this week, we've got a couple of talks later this week - an overview talk by myself tomorrow at 5, and a custom controls and components talk by Nikhil on Thursday morning. If you didn't get to attend PDC this year, we'll be&amp;nbsp;making the slides and demos from our PDC Atlas talks available on the site in the next few days.&lt;/p&gt; &lt;p&gt;Have fun playing with Atlas!&amp;nbsp;And if you'd like to see us talk more about Atlas on the blogs, let me know.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=425051" width="1" height="1"&gt;</content><author><name>ShankuN</name><uri>http://weblogs.asp.net/members/ShankuN.aspx</uri></author><category term="ASP.NET" scheme="http://weblogs.asp.net/shankun/archive/tags/ASP.NET/default.aspx" /><category term="Computing" scheme="http://weblogs.asp.net/shankun/archive/tags/Computing/default.aspx" /><category term="Atlas" scheme="http://weblogs.asp.net/shankun/archive/tags/Atlas/default.aspx" /></entry><entry><title>Upcoming Changes to ASP.NET 2.0 in Beta 2</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/shankun/archive/2004/08/16/215487.aspx" /><id>http://weblogs.asp.net/shankun/archive/2004/08/16/215487.aspx</id><published>2004-08-17T03:11:00Z</published><updated>2004-08-17T03:11:00Z</updated><content type="html">&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Trebuchet MS'"&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Trebuchet MS'"&gt;We have recently completed planning for Beta 2 of ASP&lt;?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /&gt;&lt;st1:mswterms style="BACKGROUND-POSITION: left bottom; BACKGROUND-IMAGE: url(res://ietag.dll/#34/#1001); BACKGROUND-REPEAT: repeat-x" tabIndex=0 w:st="on"&gt;.&lt;st1:stockticker style="BACKGROUND-POSITION: left bottom; BACKGROUND-IMAGE: url(res://ietag.dll/#34/#1001); BACKGROUND-REPEAT: repeat-x" tabIndex=0 w:st="on"&gt;NET&lt;/st1:stockticker&gt;&lt;/st1:mswterms&gt; 2.0 and Visual Studio 2005. For the Beta 2 release, we will deliver a high quality release with a go live license to enable live deployments. To do this, we need to focus on finding and fixing bugs, and raising security, performance, and scalability through targeted analysis and improvements. We also are getting great customer feedback from Beta 1 and earlier preview releases, and need to incorporate key feedback into the product.&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Trebuchet MS'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Trebuchet MS'"&gt;To enable us to meet these goals, and in response to customer feedback, we have decided to remove a small set of features from ASP&lt;st1:mswterms style="BACKGROUND-POSITION: left bottom; BACKGROUND-IMAGE: url(res://ietag.dll/#34/#1001); BACKGROUND-REPEAT: repeat-x" tabIndex=0 w:st="on"&gt;.&lt;st1:stockticker style="BACKGROUND-POSITION: left bottom; BACKGROUND-IMAGE: url(res://ietag.dll/#34/#1001); BACKGROUND-REPEAT: repeat-x" tabIndex=0 w:st="on"&gt;NET&lt;/st1:stockticker&gt;&lt;/st1:mswterms&gt; 2.0. These features are already available in Beta 1, so we’d like to provide you with some advance notice of what changes are coming, and how you can prepare for them. &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Trebuchet MS'"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Trebuchet MS'"&gt;&lt;o:p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Trebuchet MS'"&gt;&lt;strong&gt;Note:&lt;/strong&gt; You can find an ASP.NET&amp;nbsp;forums post with the same content at &lt;a href="http://www.asp.net/Forums/ShowPost.aspx?tabindex=1&amp;amp;PostID=667498"&gt;http://www.asp.net/Forums/ShowPost.aspx?tabindex=1&amp;amp;PostID=667498&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;&lt;/o:p&gt;&lt;/span&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Trebuchet MS'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Trebuchet MS'"&gt;Mobile Device Adapters for ASP&lt;st1:mswterms style="BACKGROUND-POSITION: left bottom; BACKGROUND-IMAGE: url(res://ietag.dll/#34/#1001); BACKGROUND-REPEAT: repeat-x" tabIndex=0 w:st="on"&gt;.&lt;st1:stockticker style="BACKGROUND-POSITION: left bottom; BACKGROUND-IMAGE: url(res://ietag.dll/#34/#1001); BACKGROUND-REPEAT: repeat-x" tabIndex=0 w:st="on"&gt;NET&lt;/st1:stockticker&gt;&lt;/st1:mswterms&gt; Server Controls&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Trebuchet MS'"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Trebuchet MS'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Trebuchet MS'"&gt;ASP&lt;st1:mswterms style="BACKGROUND-POSITION: left bottom; BACKGROUND-IMAGE: url(res://ietag.dll/#34/#1001); BACKGROUND-REPEAT: repeat-x" tabIndex=0 w:st="on"&gt;.&lt;st1:stockticker style="BACKGROUND-POSITION: left bottom; BACKGROUND-IMAGE: url(res://ietag.dll/#34/#1001); BACKGROUND-REPEAT: repeat-x" tabIndex=0 w:st="on"&gt;NET&lt;/st1:stockticker&gt;&lt;/st1:mswterms&gt; 2.0 Beta 1 introduced a new control adapter architecture that allows any ASP&lt;st1:mswterms style="BACKGROUND-POSITION: left bottom; BACKGROUND-IMAGE: url(res://ietag.dll/#34/#1001); BACKGROUND-REPEAT: repeat-x" tabIndex=0 w:st="on"&gt;.&lt;st1:stockticker style="BACKGROUND-POSITION: left bottom; BACKGROUND-IMAGE: url(res://ietag.dll/#34/#1001); BACKGROUND-REPEAT: repeat-x" tabIndex=0 w:st="on"&gt;NET&lt;/st1:stockticker&gt;&lt;/st1:mswterms&gt; server control to create alternate renderings for other browsers, including &lt;st1:mswterms style="BACKGROUND-POSITION: left bottom; BACKGROUND-IMAGE: url(res://ietag.dll/#34/#1001); BACKGROUND-REPEAT: repeat-x" tabIndex=0 w:st="on"&gt;mobile devices&lt;/st1:mswterms&gt;. We also included adapters for many of our built-in server controls, to allow developers to use them to create mobile web applications. At the same time, Beta 1 deprecated the ASP&lt;st1:mswterms style="BACKGROUND-POSITION: left bottom; BACKGROUND-IMAGE: url(res://ietag.dll/#34/#1001); BACKGROUND-REPEAT: repeat-x" tabIndex=0 w:st="on"&gt;.&lt;st1:stockticker style="BACKGROUND-POSITION: left bottom; BACKGROUND-IMAGE: url(res://ietag.dll/#34/#1001); BACKGROUND-REPEAT: repeat-x" tabIndex=0 w:st="on"&gt;NET&lt;/st1:stockticker&gt;&lt;/st1:mswterms&gt; mobile controls, which were used in ASP&lt;st1:mswterms style="BACKGROUND-POSITION: left bottom; BACKGROUND-IMAGE: url(res://ietag.dll/#34/#1001); BACKGROUND-REPEAT: repeat-x" tabIndex=0 w:st="on"&gt;.&lt;st1:stockticker style="BACKGROUND-POSITION: left bottom; BACKGROUND-IMAGE: url(res://ietag.dll/#34/#1001); BACKGROUND-REPEAT: repeat-x" tabIndex=0 w:st="on"&gt;NET&lt;/st1:stockticker&gt;&lt;/st1:mswterms&gt; 1.x to build mobile web applications. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.25in"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Trebuchet MS'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Trebuchet MS'"&gt;In Beta 2, we have decided not to deprecate the V1.x mobile controls. We have instead postponed our plans to ship mobile specific adapters for all controls until a later release. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Trebuchet MS'"&gt;If you plan on writing a mobile web application using ASP.NET 2.0, we recommend that you use the ASP.NET mobile controls, found in System.Web.Mobile.dll. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Trebuchet MS'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Trebuchet MS'"&gt;We have also decided not to specifically certify individual new devices for use with the mobile controls, through our product release and device updates. Instead, we will provide adapters for V1.x mobile controls that render markup compliant with common markup languages – HTML, cHTML, XHTML Mobile Profile, and CHTML – and work on standard browsers. For many applications, these adapters will work out of the box for a variety of devices. If desired, you can fine-tune your application for an individual device by creating a new device profile and writing new adapters as necessary. We will provide a profiling tool and adapter source to help you customize your applications.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Trebuchet MS'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Trebuchet MS'"&gt;We still plan on including the new control adapter architecture in ASP.NET 2.0. You can write control adapters to customize server controls for individual browsers. For example, you can write a control adapter to generate a different rendering for the Calendar control on Internet Explorer. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Trebuchet MS'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Trebuchet MS'"&gt;PhoneLink and ContentPager Controls&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Trebuchet MS'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Trebuchet MS'"&gt;The mobile support in ASP.NET 2.0 Beta 1 included two new controls that were intended to supersede two features of the ASP.NET mobile controls: the PhoneLink server control to replace the PhoneCall mobile control, and the ContentPager control to replace the ability of mobile forms to automatically paginate content according to the screen size of the target browser.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Trebuchet MS'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Trebuchet MS'"&gt;Now that we are bringing back the ASP.NET mobile controls, you can implement these features using . To include a link to a phone number in your page, use the System.Web.UI.MobileControls.PhoneCall control. To paginate the contents of your form, use the Paginate property of the System.Web.UI.MobileControls.Form control.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Trebuchet MS'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Trebuchet MS'"&gt;The ContentPager control also allowed developers to paginate the contents of controls for desktop browsers. To create a paginated UI in ASP.NET without the ContentPager control, you can either use a GridView control, which has built-in support for pagination, or extend the DataList control with support for pagination. For an example of a pagination UI on ASP.NET, please refer to the MSDN article &lt;i&gt;&lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnaspp/html/pagercontrols.asp"&gt;Creating a Pager Control for ASP.NET&lt;/a&gt;&lt;/i&gt; by Dino Esposito.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Trebuchet MS'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Trebuchet MS'"&gt;Site counters, DynamicImage Control, and the Image Generation Service&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Trebuchet MS'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Trebuchet MS'"&gt;After receiving feedback and conducting internal testing and evaluation, we have decided that these features require significant additions or changes in response to customer feedback, or significant additional testing to meet stability or scalability requirements. We have decided to remove these features for ASP&lt;st1:mswterms style="BACKGROUND-POSITION: left bottom; BACKGROUND-IMAGE: url(res://ietag.dll/#34/#1001); BACKGROUND-REPEAT: repeat-x" tabIndex=0 w:st="on"&gt;.&lt;st1:stockticker style="BACKGROUND-POSITION: left bottom; BACKGROUND-IMAGE: url(res://ietag.dll/#34/#1001); BACKGROUND-REPEAT: repeat-x" tabIndex=0 w:st="on"&gt;NET&lt;/st1:stockticker&gt;&lt;/st1:mswterms&gt; 2.0, and will look at adding them in a future version.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Trebuchet MS'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Trebuchet MS'"&gt;To employ click tracking on your site in ASP.NET 2.0, we recommend you use a 3&lt;sup&gt;rd&lt;/sup&gt; party solution or build your own using page code.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Trebuchet MS'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Trebuchet MS'"&gt;To dynamically generate images from content in a database or from data, you can write an ASP.NET handler (.ashx), and use the ASP.NET cache to store these generated images. The code example at the end of this post (see below) shows a handler that returns an image generated from a business object.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Trebuchet MS'"&gt;WebPartPageMenu Control&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Trebuchet MS'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Trebuchet MS'"&gt;This control provided a convenient mechanism for switching page personalization modes in pages using the web parts control set. The UI generated by this control is a dropdown list or menu similar to Sharepoint. However, pages often require more flexibility for switching modes than this control provides, and the WebPartManager class makes it easy to programmatically switch personalization mode from any server control. &amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Trebuchet MS'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Trebuchet MS'"&gt;To switch modes, you can use an interactive server control such as a Button, LinkButton, or DropDownList, and write an event handler for it that programmatically switches the personalization mode. For example, the following code will switch the personalization mode of a WebPartManager:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Trebuchet MS'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.25in"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-bidi-font-family: Mangal; mso-bidi-language: HI; mso-no-proof: yes"&gt;WebPartManager1.DisplayMode = WebPartManager.DesignDisplayMode&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Trebuchet MS'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Trebuchet MS'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Trebuchet MS'"&gt;Access Data Providers&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Trebuchet MS'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Trebuchet MS'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Trebuchet MS'"&gt;In Beta 1, ASP&lt;st1:mswterms style="BACKGROUND-POSITION: left bottom; BACKGROUND-IMAGE: url(res://ietag.dll/#34/#1001); BACKGROUND-REPEAT: repeat-x" tabIndex=0 w:st="on"&gt;.&lt;st1:stockticker style="BACKGROUND-POSITION: left bottom; BACKGROUND-IMAGE: url(res://ietag.dll/#34/#1001); BACKGROUND-REPEAT: repeat-x" tabIndex=0 w:st="on"&gt;NET&lt;/st1:stockticker&gt;&lt;/st1:mswterms&gt; application services such as membership and roles include Access data providers, and use them by default. In Beta 2, however, we will replace this functionality with support for &lt;st1:mswterms style="BACKGROUND-POSITION: left bottom; BACKGROUND-IMAGE: url(res://ietag.dll/#34/#1001); BACKGROUND-REPEAT: repeat-x" tabIndex=0 w:st="on"&gt;SQL Server&lt;/st1:mswterms&gt; 2005 Express Edition, the new version of &lt;st1:mswterms style="BACKGROUND-POSITION: left bottom; BACKGROUND-IMAGE: url(res://ietag.dll/#34/#1001); BACKGROUND-REPEAT: repeat-x" tabIndex=0 w:st="on"&gt;SQL Server&lt;/st1:mswterms&gt; which combines the file-based simplicity of Access databases with seamless deployment to full editions of &lt;st1:mswterms style="BACKGROUND-POSITION: left bottom; BACKGROUND-IMAGE: url(res://ietag.dll/#34/#1001); BACKGROUND-REPEAT: repeat-x" tabIndex=0 w:st="on"&gt;SQL Server&lt;/st1:mswterms&gt;. &amp;nbsp;The developer model of using the application services stays 100% the same, but the backend implementation will now be much more robust and performant.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Trebuchet MS'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Trebuchet MS'"&gt;DataSetDataSource&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Trebuchet MS'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Trebuchet MS'"&gt;This control provided the ability to bind to an XML data source using a dataset, but had significant overlap with XmlDataSource (which allows binding to XML data) and ObjectDataSource (which allows binding to data components). We are eliminating this control in the interests of simplicity.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Trebuchet MS'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Trebuchet MS'"&gt;Built-in Global Themes&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Trebuchet MS'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Trebuchet MS'"&gt;Global themes provide a useful way to apply a standard consistent look to web pages, and we anticipate that developers will create and exchange a variety of global themes. However, we have decided not to include any built-in general themes in the product. Developers looking for an attractive set of built-in styles for server controls can use autoformats instead. We will also have an online theme gallery on &lt;a title="http" href="http://www.asp.net/"&gt;&lt;span style="COLOR: black"&gt;www.asp.net&lt;/span&gt;&lt;/a&gt; for RTM that will enable developers to find and share themes for their site. &lt;u&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Trebuchet MS'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Trebuchet MS'"&gt;Web Administration Tool Profile/Reports Tab&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Trebuchet MS'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Trebuchet MS'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Trebuchet MS'"&gt;This feature was incomplete in Beta 1, and we have decided not to complete the work in Beta 2. We will release samples that show how to get reporting from profile data.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Trebuchet MS'"&gt;Example – An ASP.NET handler that returns a dynamically generated image&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-bidi-font-family: Mangal; mso-bidi-language: HI; mso-no-proof: yes"&gt;&amp;lt;%@&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-bidi-font-family: Mangal; mso-bidi-language: HI; mso-no-proof: yes"&gt; &lt;span style="COLOR: maroon"&gt;WebHandler&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;Language&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="C#"&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;Class&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="ImageHandler"&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;%&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-bidi-font-family: Mangal; mso-bidi-language: HI; mso-no-proof: yes"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-bidi-font-family: Mangal; mso-bidi-language: HI; mso-no-proof: yes"&gt;using&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-bidi-font-family: Mangal; mso-bidi-language: HI; mso-no-proof: yes"&gt; System;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-bidi-font-family: Mangal; mso-bidi-language: HI; mso-no-proof: yes"&gt;using&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-bidi-font-family: Mangal; mso-bidi-language: HI; mso-no-proof: yes"&gt; System.Drawing;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-bidi-font-family: Mangal; mso-bidi-language: HI; mso-no-proof: yes"&gt;using&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-bidi-font-family: Mangal; mso-bidi-language: HI; mso-no-proof: yes"&gt; System.Drawing.Imaging;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-bidi-font-family: Mangal; mso-bidi-language: HI; mso-no-proof: yes"&gt;using&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-bidi-font-family: Mangal; mso-bidi-language: HI; mso-no-proof: yes"&gt; System.IO;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-bidi-font-family: Mangal; mso-bidi-language: HI; mso-no-proof: yes"&gt;using&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-bidi-font-family: Mangal; mso-bidi-language: HI; mso-no-proof: yes"&gt; System.Web;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-bidi-font-family: Mangal; mso-bidi-language: HI; mso-no-proof: yes"&gt;using&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-bidi-font-family: Mangal; mso-bidi-language: HI; mso-no-proof: yes"&gt; System.Web.Caching;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-bidi-font-family: Mangal; mso-bidi-language: HI; mso-no-proof: yes"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-bidi-font-family: Mangal; mso-bidi-language: HI; mso-no-proof: yes"&gt;public&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-bidi-font-family: Mangal; mso-bidi-language: HI; mso-no-proof: yes"&gt; &lt;span style="COLOR: blue"&gt;class&lt;/span&gt; &lt;span style="COLOR: navy"&gt;ImageHandler&lt;/span&gt; : &lt;span style="COLOR: navy"&gt;IHttpHandler&lt;/span&gt; {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-bidi-font-family: Mangal; mso-bidi-language: HI; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-bidi-font-family: Mangal; mso-bidi-language: HI; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; ProcessRequest (&lt;span style="COLOR: navy"&gt;HttpContext&lt;/span&gt; context) {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-bidi-font-family: Mangal; mso-bidi-language: HI; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-bidi-font-family: Mangal; mso-bidi-language: HI; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: green"&gt;// Get the image ID from querystring, and use it to generate a cache key.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: green; FONT-FAMILY: 'Courier New'; mso-bidi-font-family: Mangal; mso-bidi-language: HI; mso-no-proof: yes"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-bidi-font-family: Mangal; mso-bidi-language: HI; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: navy"&gt;String&lt;/span&gt; imageID = context.Request.QueryString["PhotoID"];&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-bidi-font-family: Mangal; mso-bidi-language: HI; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: navy"&gt;String&lt;/span&gt; cacheKey = context.Request.CurrentExecutionFilePath + ":" + imageID;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-bidi-font-family: Mangal; mso-bidi-language: HI; mso-no-proof: yes"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-bidi-font-family: Mangal; mso-bidi-language: HI; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: teal"&gt;Byte&lt;/span&gt;[] imageBytes;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-bidi-font-family: Mangal; mso-bidi-language: HI; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&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; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-bidi-font-family: Mangal; mso-bidi-language: HI; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: green"&gt;// Check if the cache contains the image.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: green; FONT-FAMILY: 'Courier New'; mso-bidi-font-family: Mangal; mso-bidi-language: HI; mso-no-proof: yes"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-bidi-font-family: Mangal; mso-bidi-language: HI; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: navy"&gt;Object&lt;/span&gt; cachedImageBytes = context.Cache.Get(cacheKey);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-bidi-font-family: Mangal; mso-bidi-language: HI; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (cachedImageBytes != &lt;span style="COLOR: blue"&gt;null&lt;/span&gt;)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-bidi-font-family: Mangal; mso-bidi-language: HI; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-bidi-font-family: Mangal; mso-bidi-language: HI; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;imageBytes = (&lt;span style="COLOR: teal"&gt;Byte&lt;/span&gt;[])cachedImageBytes;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-bidi-font-family: Mangal; mso-bidi-language: HI; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-bidi-font-family: Mangal; mso-bidi-language: HI; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;else&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-bidi-font-family: Mangal; mso-bidi-language: HI; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-bidi-font-family: Mangal; mso-bidi-language: HI; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: green"&gt;// Get image from business layer, and save it into a Byte array as JPEG.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-bidi-font-family: Mangal; mso-bidi-language: HI; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: navy"&gt;Image&lt;/span&gt; im = &lt;span style="COLOR: navy"&gt;PhotoLibrary&lt;/span&gt;.GetImage("PhotoID");&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-bidi-font-family: Mangal; mso-bidi-language: HI; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: navy"&gt;MemoryStream&lt;/span&gt; stream = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: navy"&gt;MemoryStream&lt;/span&gt;();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-bidi-font-family: Mangal; mso-bidi-language: HI; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;im.Save(stream, &lt;span style="COLOR: navy"&gt;ImageFormat&lt;/span&gt;.Jpeg);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-bidi-font-family: Mangal; mso-bidi-language: HI; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;stream.Close();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-bidi-font-family: Mangal; mso-bidi-language: HI; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;im.Dispose();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-bidi-font-family: Mangal; mso-bidi-language: HI; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;imageBytes = stream.GetBuffer();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-bidi-font-family: Mangal; mso-bidi-language: HI; mso-no-proof: yes"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-bidi-font-family: Mangal; mso-bidi-language: HI; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: green"&gt;// Store it in the cache (to be expired after 2 hours).&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: green; FONT-FAMILY: 'Courier New'; mso-bidi-font-family: Mangal; mso-bidi-language: HI; mso-no-proof: yes"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-bidi-font-family: Mangal; mso-bidi-language: HI; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;context.Cache.Add(cacheKey, imageBytes, &lt;span style="COLOR: blue"&gt;null&lt;/span&gt;, &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-bidi-font-family: Mangal; mso-bidi-language: HI; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&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; &lt;/span&gt;&lt;span style="COLOR: teal"&gt;DateTime&lt;/span&gt;.MaxValue, &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: teal"&gt;TimeSpan&lt;/span&gt;(2, 0, 0), &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-bidi-font-family: Mangal; mso-bidi-language: HI; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&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; &lt;/span&gt;&lt;span style="COLOR: teal"&gt;CacheItemPriority&lt;/span&gt;.Normal, &lt;span style="COLOR: blue"&gt;null&lt;/span&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-bidi-font-family: Mangal; mso-bidi-language: HI; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-bidi-font-family: Mangal; mso-bidi-language: HI; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-bidi-font-family: Mangal; mso-bidi-language: HI; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: green"&gt;// Send back image.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-bidi-font-family: Mangal; mso-bidi-language: HI; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;context.Response.ContentType = "image/jpeg";&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-bidi-font-family: Mangal; mso-bidi-language: HI; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;context.Response.Cache.SetCacheability(&lt;span style="COLOR: teal"&gt;HttpCacheability&lt;/span&gt;.Public);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-bidi-font-family: Mangal; mso-bidi-language: HI; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;context.Response.BufferOutput = &lt;span style="COLOR: blue"&gt;false&lt;/span&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-bidi-font-family: Mangal; mso-bidi-language: HI; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;context.Response.OutputStream.Write(imageBytes, 0, imageBytes.Length);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-bidi-font-family: Mangal; mso-bidi-language: HI; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-bidi-font-family: Mangal; mso-bidi-language: HI; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-bidi-font-family: Mangal; mso-bidi-language: HI; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;bool&lt;/span&gt; IsReusable {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-bidi-font-family: Mangal; mso-bidi-language: HI; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;get&lt;/span&gt; {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-bidi-font-family: Mangal; mso-bidi-language: HI; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;return&lt;/span&gt; &lt;span style="COLOR: blue"&gt;false&lt;/span&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-bidi-font-family: Mangal; mso-bidi-language: HI; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-bidi-font-family: Mangal; mso-bidi-language: HI; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-bidi-font-family: Mangal; mso-bidi-language: HI; mso-no-proof: yes"&gt;}&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Trebuchet MS'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=215487" width="1" height="1"&gt;</content><author><name>ShankuN</name><uri>http://weblogs.asp.net/members/ShankuN.aspx</uri></author><category term="ASP.NET" scheme="http://weblogs.asp.net/shankun/archive/tags/ASP.NET/default.aspx" /><category term="Whidbey" scheme="http://weblogs.asp.net/shankun/archive/tags/Whidbey/default.aspx" /></entry><entry><title>ASP.NET Request Validation and Cross-Site Scripting</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/shankun/archive/2004/03/02/82534.aspx" /><id>http://weblogs.asp.net/shankun/archive/2004/03/02/82534.aspx</id><published>2004-03-02T10:36:00Z</published><updated>2004-03-02T10:36:00Z</updated><content type="html">&lt;P&gt;Anil has some interesting &lt;A href="http://cyberforge.com/weblog/aniltj/archive/2004/02/29/319.aspx"&gt;observations&lt;/A&gt; about Julia's &lt;A href="http://www.thedatafarm.com/blog/PermaLink.aspx?guid=67a731ef-95df-47e6-aba0-4f6b9b1873df"&gt;posting&lt;/A&gt;&amp;nbsp;on the&amp;nbsp;ASP.NET Request Validation feature in ASP.NET 1.1, which provides some protection against cross-site scripting attacks.&lt;/P&gt;
&lt;P&gt;A bit of background on this feature: &lt;/P&gt;
&lt;P&gt;After we shipped v1.0, one of the pieces of customer feedback we got was that it was too easy for developers to make the mistake of leaving their site unprotected from cross-site scripting attacks. In fact, Dmitry, our dev manager, actually went on several prominent commercial sites (some, but not all, running ASP or ASP.NET), and found that a few were prone to cross-site scripting attacks.&lt;/P&gt;
&lt;P&gt;As part of the philosophy of securing by default, we decided to create the request validation feature, and turn it on by default, so that all pages immediately got protected. Of course, this meant we'd have the usual problem for security lockdown types of issues, which is backward compatibility. If your page actually expects input that would be blocked by request validation - for example, HTML text with tags - your&amp;nbsp;page would break by default.&lt;/P&gt;
&lt;P&gt;So, we provided two ways to turn it off. First, on an individual page basis:&lt;/P&gt;
&lt;P&gt;&amp;lt;%@ Page ValidateRequest=&amp;#8221;false&amp;#8221; %&amp;gt;&lt;/P&gt;
&lt;P&gt;And secondly, on a whole site basis by changing the &amp;lt;pages&amp;gt; section of web.config.&lt;/P&gt;
&lt;P&gt;The recommendation, of course, was that you turn off the minimum number of pages you need to turn off, but only after verifying whether the page encodes request variables properly. As Anil said, if a 3rd party app you receive abuses this, or a control vendor tells you to turn this off for the entire app, you should rightly question whether the app or component is secure.&lt;/P&gt;
&lt;P&gt;There's also some programmatic access to request validation - Victor's &lt;A href="http://weblogs.asp.net/vga/archive/2003/05/02.aspx"&gt;post&lt;/A&gt; explains this stuff&amp;nbsp;really well.&lt;/P&gt;
&lt;P&gt;Note: As G. Andrew Duthie points out on Anil's post, we didn't quite get it right the first time - there's been a &lt;A href="http://weblogs.asp.net/gad/archive/2003/11/12/37219.aspx"&gt;patch&lt;/A&gt; to fix a problem in this feature.&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=82534" width="1" height="1"&gt;</content><author><name>ShankuN</name><uri>http://weblogs.asp.net/members/ShankuN.aspx</uri></author><category term="ASP.NET" scheme="http://weblogs.asp.net/shankun/archive/tags/ASP.NET/default.aspx" /></entry><entry><title>ASP.NET Whidbey Starter Kit Guidelines</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/shankun/archive/2004/02/22/78165.aspx" /><id>http://weblogs.asp.net/shankun/archive/2004/02/22/78165.aspx</id><published>2004-02-23T04:52:00Z</published><updated>2004-02-23T04:52:00Z</updated><content type="html">&lt;P&gt;This month, we're putting together the overall plan and guidelines for Starter Kits for ASP.NET Whidbey. Jeff King (Scott's PDC keynote &lt;A href="http://blogs.msdn.com/scottgu/archive/2003/11/04/35916.aspx"&gt;demo buddy&lt;/A&gt;) is managing the overall Starter Kit plan for our team, and has been putting together some samples. Over the next few months, I'll use this blog to share some of the starter kit designs and ideas with you, and get your feedback. If you have any ideas at any time, feel free to shout!&lt;/P&gt;
&lt;P&gt;Like V1, the aim of the starter kits is to have real world&amp;nbsp;applications that work &amp;#8220;out of the box&amp;#8221;, but are easy and tempting to customize.&amp;nbsp; The first step is to put together a set of guidelines for consistency that apply to any starter kit; we'll then use these guidelines to create specs for each specific starter kit as we develop them. We'll also provide these guidelines for those in the community building projects that look like starter kits.&lt;/P&gt;
&lt;P&gt;As you may or may not know, in Whidbey many groups in VS are shipping similar starter kits. One big goal of the starter kits in Whidbey is that you can install them into Visual Studio, and have them appear in File/New - in our case from the File/New Web Site menu item. We will then ship a set of starter kits right in Visual Studio. Of course, we will continue to provide them for free over the web, and we'll also use the web to provide updates for the VS starter kits.&lt;/P&gt;
&lt;P&gt;Here is an outline of some of the current common requirements for ASP.NET Starter Kits:&lt;/P&gt;
&lt;TABLE width="100%" border=0&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD vAlign=top width="30%"&gt;Client &lt;/TD&gt;
&lt;TD vAlign=top width="70%"&gt;IE6, Netscape 7 (in Beta 1)&lt;BR&gt;Opera 7, Safari 1.2 (in Beta 2) &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top&gt;Hosting &lt;/TD&gt;
&lt;TD vAlign=top&gt;All kits will be maximally functional under shared hosting under partial trust. &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top&gt;Common Look/Feel&lt;/TD&gt;
&lt;TD vAlign=top&gt;All common elements between pages on a site must be in master pages.&lt;BR&gt;Kits need to implement one theme and be easily customizable using themes. &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top&gt;Membership&lt;/TD&gt;
&lt;TD vAlign=top&gt;Kits will use forms authentication, using the membership system, whenever possible and relevant.&lt;BR&gt;Windows authentication will only be the default for intranet-based Kits. &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top&gt;Navigation&lt;/TD&gt;
&lt;TD vAlign=top&gt;Site navigation should be easy to use, and use the sitemap feature whenever possible. &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top&gt;Data&lt;/TD&gt;
&lt;TD vAlign=top&gt;Will support XCopy deployment, but also have scripts to install the kit on a SQL server. &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top&gt;Localization&lt;/TD&gt;
&lt;TD vAlign=top&gt;All sites will be localized into the standard VS languages.&lt;BR&gt;Sites that include scenarios for end-user localization should use the ASP.NET localization features in Whidbey. &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top&gt;Administration&lt;/TD&gt;
&lt;TD vAlign=top&gt;All kits can be administered using the Web Administration tool in Whidbey. &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top&gt;XHTML Validation&lt;/TD&gt;
&lt;TD vAlign=top&gt;All kits will pass XHTML 1.1 validation from the W3C site. &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top&gt;Accessibility&lt;/TD&gt;
&lt;TD vAlign=top&gt;All sites will be ADA508 conformant. &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top&gt;Programming Languages&lt;/TD&gt;
&lt;TD vAlign=top&gt;VB, C#, J# &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;What do you think? Anything you disagree with, or&amp;nbsp;would suggest&amp;nbsp;adding (or removing)? &lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=78165" width="1" height="1"&gt;</content><author><name>ShankuN</name><uri>http://weblogs.asp.net/members/ShankuN.aspx</uri></author><category term="ASP.NET" scheme="http://weblogs.asp.net/shankun/archive/tags/ASP.NET/default.aspx" /><category term="Whidbey" scheme="http://weblogs.asp.net/shankun/archive/tags/Whidbey/default.aspx" /></entry><entry><title>Commodore 64</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/shankun/archive/2004/02/22/78081.aspx" /><id>http://weblogs.asp.net/shankun/archive/2004/02/22/78081.aspx</id><published>2004-02-22T22:58:00Z</published><updated>2004-02-22T22:58:00Z</updated><content type="html">&lt;P&gt;Duncan's post on the &lt;A href="http://blogs.msdn.com/duncanma/archive/2004/02/20/77515.aspx"&gt;Commodore 64&lt;/A&gt; brings back a flood of memories.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The Commodore 64 was really my first major computer. Although I used several others at&amp;nbsp;school or friends' (like the TRS-80, PET, TI-99/4A, the Atari 800, the Apple IIe, and the original Mac), the 64 was the first computer I owned.&lt;/P&gt;
&lt;P&gt;I got&amp;nbsp;my Commodore 64 for my 12th birthday - we forked out Cdn. $1500 for a system that included a C64, a 1541 floppy drive (170K!), and a 1526 printer. We added&amp;nbsp;a 1701 monitor a few months later - it was the only&amp;nbsp;component&amp;nbsp;I still had&amp;nbsp;by the time I entered university, because it had RCA jacks for&amp;nbsp;inputs, which made it great for a dorm room TV.&lt;/P&gt;
&lt;P&gt;Some random memories:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;The 1526 printer was a&amp;nbsp;big mistake. It was billed as a near-letter-quality printer (and the default printout was definitely better than the 1525. But, unlike the 1525, where you could individually access dots on a line, the 1526 only let you define an 8x8 &amp;#8220;custom character&amp;#8220; per line. So, when word processors and tools with better fonts (like Print Master) came out, they would support the 1525 well; but on the 1526 (if the software supported it at all), you'd have to print each 8x8 block, then do a carriage return (without a line feed), and then print the next block and so on. It was painful to watch. It's why I used Print Master instead of Print Shop 
&lt;P&gt;&lt;/P&gt;
&lt;LI&gt;I loved playing a game called Micro League Baseball, but I think the disk had a copy protection mechanism where the second track was bad (or maybe it was just my disk). Now, 1541 drives also had frequent problems with the heads misaligning, and it would cost $50 to fix. But I found that if I put the MLB disk in, and then used a tool to seek to the track from the right direction (from track 1 or 3), it would cause the drive to stutter around until it threw back into proper alignment. Scary stuff. Apparently, I am not the only one that loved MLB. Matt McEnerny, lead designer for Inside Pitch Baseball, &lt;A href="http://www.xboxaddict.com/news/view.php?News_ID=3525"&gt;counts it&lt;/A&gt; as his favorite game. 
&lt;P&gt;&lt;/P&gt;
&lt;LI&gt;I remember getting the monthly issue of Compute magazine (and, later, Compute's Gazette, which was dedicated to the Commodore). It was&amp;nbsp;a lot like MSDN magazine, but each article came with a complete listing, usually in machine language, and you had to enter the program by hand into the computer. They had a couple of programs (like &lt;A href="http://www.atariarchives.org/2bml/appendix_c.php"&gt;MLX&lt;/A&gt;) that would show checksums for every line you entered, so you didn't get any lines wrong. But some tools were better than others, and you could make mistakes and still get the right checksum (or worse, sometimes the magazine would print the wrong checksum). I still remember the thrill of getting to the end of typing in the long listing of hex byte sequences, followed by the pain of it not running. But the magazine was great, at least in its early years - they had an entire free word processor called SpeedScript, that fit in 6K! 
&lt;P&gt;&lt;/P&gt;
&lt;LI&gt;I didn't use SpeedScript though, I used a product called Paper Clip. It was a bit more complex, but it served all my needs through high school. And when my uncle wanted to publish&amp;nbsp;a book, I did the entire manuscript in Paper Clip. Later versions came on two floppies, and you had to switch floppies to check spelling, or do&amp;nbsp;a bunch of other things. The innovations you had to do to work within memory constraints in those days - Paper Clip had a dynamic module loading/unloading system. 
&lt;P&gt;&lt;/P&gt;
&lt;LI&gt;My favorite games were the &lt;A href="http://www.fomalhaut.de/c64.shtml"&gt;Epyx sports simulations&lt;/A&gt; - Summer Games, Winter Games, World Games, etc. I remember sprinting fast by hammering the joystick back and forth as fast as I could. 
&lt;P&gt;&lt;/P&gt;
&lt;LI&gt;Late in its life, the 64 got a boost from a GUI OS called &lt;A href="http://commodore.ca/history/company/turks_geos.htm"&gt;GEOS&lt;/A&gt;. I didn't have much of a need for this&amp;nbsp;at the time&amp;nbsp;(I had access to a&amp;nbsp;Mac at school). But it had a whole new programming methodology, complete with a programmer's guide - I remember being drawn to it because of how different it was to write GEOS programs. 
&lt;P&gt;&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;There's a &lt;A href="http://www.commodore.ca/"&gt;real nice site&lt;/A&gt; on the history of the C64, including what happened to Commodore and it's leaders. If you really want to revisit memory lane, you can use one of the very good C-64 emulators. There's even a couple of&amp;nbsp;&lt;A href="http://www.armory.com/~spectre/cwi/hl/"&gt;web browsers&lt;/A&gt; for the 64!&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=78081" width="1" height="1"&gt;</content><author><name>ShankuN</name><uri>http://weblogs.asp.net/members/ShankuN.aspx</uri></author><category term="Computing" scheme="http://weblogs.asp.net/shankun/archive/tags/Computing/default.aspx" /></entry><entry><title>Woohoo, I'm online!</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/shankun/archive/2004/02/19/76549.aspx" /><id>http://weblogs.asp.net/shankun/archive/2004/02/19/76549.aspx</id><published>2004-02-19T21:53:00Z</published><updated>2004-02-19T21:53:00Z</updated><content type="html">&lt;P&gt;It's been a while since Rob set this up for me, but I'm finally online and blogging. My only hope is that I can keep it updated with frequent entries!&lt;/P&gt;
&lt;P&gt;For those of you who don't know me, here's a brief bio, from the February 2004 aspnetPRO magazine:&lt;/P&gt;
&lt;P style="MARGIN-LEFT: 0.5in"&gt;&lt;FONT face=Georgia color=navy size=-1&gt;As the Group Program Manager of the ASP.NET team at Microsoft, Shanku Niyogi leads the program management team responsible for design of both ASP.NET and Microsoft&amp;#8217;s web development toolset in Visual Studio.NET.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-LEFT: 0.5in"&gt;&lt;FONT face=Georgia color=navy size=-1&gt;Shanku joined Microsoft as a developer in 1998, with several years of experience in the Windows software industry. He worked on both Windows and web versions of Microsoft&amp;#8217;s chat software, before going on to be a development lead on the Adaptive User Interface team, looking at the problem of adapting user interfaces to different form factors. This work led to the design and development of the ASP.NET Mobile Controls. Shanku then joined the ASP.NET team as an architect in 2002, helping prototype and design several features of the next version (&amp;#8220;Whidbey&amp;#8221;) of ASP.NET, before switching to the PM role this year. &lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-LEFT: 0.5in"&gt;&lt;FONT face=Georgia color=navy size=-1&gt;Outside work, Shanku is predominantly occupied with playing with his daughter Acacia. Shanku is Canadian, and a graduate of the University of Waterloo, but his Indian heritage accounts for his obsession with trains and cricket.&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=76549" width="1" height="1"&gt;</content><author><name>ShankuN</name><uri>http://weblogs.asp.net/members/ShankuN.aspx</uri></author><category term="Personal" scheme="http://weblogs.asp.net/shankun/archive/tags/Personal/default.aspx" /></entry></feed>