<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type='text/xsl' href='http://vineetgupta.spaces.live.com/mmm2008-05-17_13.22/rsspretty.aspx?rssquery=en-US;http%3a%2f%2fvineetgupta.spaces.live.com%2ffeed.rss' version='1.0'?><rss version="2.0" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:msn="http://schemas.microsoft.com/msn/spaces/2005/rss" xmlns:live="http://schemas.microsoft.com/live/spaces/2006/rss" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:cf="http://www.microsoft.com/schemas/rss/core/2005" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Vineet Gupta</title><description>Semi-Connected, Half-Baked Thoughts on Anything and Everything</description><link>http://vineetgupta.spaces.live.com/</link><language>en-US</language><pubDate>Thu, 26 Jun 2008 07:43:40 GMT</pubDate><lastBuildDate>Thu, 26 Jun 2008 07:43:40 GMT</lastBuildDate><generator>Microsoft Spaces v1.1</generator><docs>http://www.rssboard.org/rss-specification</docs><ttl>60</ttl><live:identity><live:id>-8222238350451482195</live:id><live:alias>vineetgupta</live:alias></live:identity><image><title>Vineet Gupta</title><url>http://byfiles.storage.live.com/y1pRNyZvjvLwmM0wiQoeqAqE2vqdOeeoAn9H-VdeS1mKOc83TvI-D0sJg</url><link>http://vineetgupta.spaces.live.com/</link></image><cf:listinfo><cf:group ns="http://schemas.microsoft.com/live/spaces/2006/rss" element="typelabel" label="Type" /><cf:group ns="http://schemas.microsoft.com/live/spaces/2006/rss" element="tag" label="Tag" /><cf:group element="category" label="Category" /><cf:sort element="pubDate" label="Date" data-type="date" default="true" /><cf:sort element="title" label="Title" data-type="string" /><cf:sort ns="http://purl.org/rss/1.0/modules/slash/" element="comments" label="Comments" data-type="number" /></cf:listinfo><item><title>Started a New Blog</title><link>http://vineetgupta.spaces.live.com/Blog/cns!8DE4BDC896BEE1AD!1327.entry</link><description>&lt;p&gt;As a kid, I found studies quite boring. (who doesn't?) The first subject I fell in love was Physics (actually second - first one was Computer Science) I used to find it utterly boring too, but this changed when I was in 11th standard and was forced to stay at home for about two months because of a strong bout of &lt;a href="http://en.wikipedia.org/wiki/Juvenile_idiopathic_arthritis"&gt;Juvenile idiopathic arthritis&lt;/a&gt; in my knees. I missed out on the first-term exams because of this and the fear of not doing well in the mid-term made me start studying my weakest subject - Physics. That is when I realized the beauty of Physics - it made me see the world around me differently. That love affair continues till today.  &lt;p&gt;After I started working, I also started developing a love for Evolution, Anthropology, History and Economics as well - they made me look at the world around me in a different way. And this world is full of wonder and beauty. I wish I could go back to school now and find the time to study all of them at leisure. I think the problem with our education system is that instead of letting kids understand these wonderful views of our world on their own, at their own pace, they emphasize on spoon feeding the details of each view. You miss out on all the fun in the process. &lt;p&gt;So for the last five years or so (I recall telling my wife about this when I first met her more than four years ago) I have been thinking about writing down the story of our world in a simple, easy to understand way which emphasizes the big picture and connects the dots. I finally started writing some early thoughts a couple of weeks back and the result is a new blog: &lt;a title="http://bigtale.blogspot.com/" href="http://bigtale.blogspot.com/"&gt;http://bigtale.blogspot.com/&lt;/a&gt;. I'm having a ton of fun writing this and hope that it serves as a useful resource to anyone who wants to know more about our world.&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-8222238350451482195&amp;page=RSS%3a+Started+a+New+Blog&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=vineetgupta.spaces.live.com&amp;amp;GT1=vineetgupta"&gt;</description><category>Personal</category><comments>http://vineetgupta.spaces.live.com/Blog/cns!8DE4BDC896BEE1AD!1327.entry#comment</comments><guid isPermaLink="true">http://vineetgupta.spaces.live.com/Blog/cns!8DE4BDC896BEE1AD!1327.entry</guid><pubDate>Thu, 12 Jun 2008 10:39:40 GMT</pubDate><slash:comments>2</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://vineetgupta.spaces.live.com/blog/cns!8DE4BDC896BEE1AD!1327/comments/feed.rss</wfw:commentRss><wfw:comment>http://vineetgupta.spaces.live.com/Blog/cns!8DE4BDC896BEE1AD!1327.entry#comment</wfw:comment><dcterms:modified>2008-06-12T10:44:54Z</dcterms:modified></item><item><title>Edge vs. Cloud Computing</title><link>http://vineetgupta.spaces.live.com/Blog/cns!8DE4BDC896BEE1AD!1326.entry</link><description>&lt;p&gt;For about 2-3 years now, I have been talking internally in my group and to other people in Microsoft on Edge Computing vs. Cloud Computing. This thing came up all over again in a discussion and I thought it would be handy to summarize my thoughts in writing somewhere. &lt;p&gt;&lt;strong&gt;Terminology&lt;/strong&gt; &lt;p&gt;The way I use the terms Cloud and Edge are not common to the industry (are there common industry definitions on this at all?), so let's just put this down first: &lt;p&gt;&lt;strong&gt;1) Cloud Computing&lt;/strong&gt; is computing that happens in distributed, geo-plexed infrastructures on the Internet. &lt;a href="http://aws.amazon.com/"&gt;Amazon Web Services&lt;/a&gt; and &lt;a href="http://code.google.com/appengine/"&gt;Google App Engine&lt;/a&gt; are examples of general purpose Cloud infrastructures. You can call it off-premise computing as well. The idea is that instead of creating your own facility, or putting your server with a hoster, you put your data / apps in a Cloud. This cloud is assumed to have 100% availability, and infinite scalability. This is typically achieved in two ways: &lt;p&gt;a) Virtual machine hosting service - The advantage is that you can bring in any existing workload, virtualize it and host it. No changes required to your app architecture. For example &lt;a href="http://www.amazon.com/b/?node=201590011"&gt;Amazon EC2&lt;/a&gt; provides &lt;a href="http://www.xen.org/"&gt;Xen&lt;/a&gt; virtualization. However, this is not very elastic in the sense that the computing power is handed out in discrete units of virtual private servers and there is no continuous scaling. The underlying fabric may have infinite continuous scaling but the way it is handed out is discretized. &lt;p&gt;b) Abstracted Infra for Prescriptive Services - This approach is where the Cloud vendor offers specific services for data storage, communication, app execution, etc. For example Google AppEngine provides data storage, user management and an app execution environment based on Python. Similarly, Amazon provides a storage service (&lt;a href="http://www.amazon.com/S3-AWS-home-page-Money/b?ie=UTF8&amp;amp;node=16427261"&gt;S3&lt;/a&gt;), a message queue (&lt;a href="http://www.amazon.com/b?ie=UTF8&amp;amp;node=13584171"&gt;SQS&lt;/a&gt;) and a structured storage service (&lt;a href="http://www.amazon.com/b?ie=UTF8&amp;amp;node=342335011"&gt;SimpleDB&lt;/a&gt;). Microsoft has also announced a couple of services: &lt;a href="http://labs.biztalk.net/"&gt;BizTalk Services&lt;/a&gt; for hosted message oriented communications and &lt;a href="http://www.microsoft.com/sql/dataservices/default.mspx"&gt;SQL Server Data Services&lt;/a&gt; which aims to provide SQL Server functionality in the Cloud. IBM announced &lt;a href="http://www-03.ibm.com/press/us/en/pressrelease/22613.wss"&gt;Blue Cloud&lt;/a&gt; in Nov, but haven't released much info on it since then. The key thing here is that these services themselves are infinitely scalable, and this means that apps built to these services are also elastically scalable. Of course billing may happen in price bands based on consumption, but the app itself is not boxed. &lt;p&gt;&lt;strong&gt;2) Edge Computing&lt;/strong&gt; is computing that happens outside the Cloud. This could be on a hand-held device, on a PC, on a server in a data-center. For the server scenario, this could be hosted on premise, or this could be in a hoster's datacenter. The key thing is that this is not distributed, geo-plexed, on-demand scaling in the Cloud. The computing is contained in isolated boxes that may / may not talk to each other. &lt;p&gt;Now the hosting scenario is a bit of an overlap - when does an app hosted with a hoster stop being Edge and become Cloud? To me the key difference is distribution because it is distribution that provides 100% availability and scalability. If you place your server with a hoster, if that hoster's datacenter goes down, your server is down. This is Edge. If you place your app / data with a hoster that has got a distributed infrastructure, is able to move load from datacenter to datacenter based on traffic conditions and lets you take unlimited load - it is Cloud. &lt;p&gt;Now with that out of the way, let's get down to examining the trends and see which model is likely to succeed. &lt;p&gt;  &lt;p&gt;&lt;strong&gt;A Lesson in Computing History&lt;/strong&gt;  &lt;p&gt;If you go back a few decades in time, computing was primarily driven by governments, and specifically defense establishments or research agencies. Then something happened in 1946 - scientists working for a US government agency came up with the first general purpose computer – the ENIAC. The impact of this development was that computing moved from being solely owned by a few governments in the world, to becoming affordable to businesses. And even then, only some of the richest businesses – the largest banks or manufacturing companies – could afford to buy computing power. Over a period of time, computing got cheaper and more and more businesses were able to use the power of the computer. For the next two decades, well into the 1970s, all computing was business computing or special-purpose government / scientific computing  &lt;p&gt;The second revolution in computing came when Kilby and Noyce independently came up with the Integrated Circuit, which was used by Ted Hoff and Federico Faggin at Intel to develop the Microprocessor. A couple of smart people – Steve Wozniac, Bill Gates, Paul Allen - figured that this meant that computing power cost was to drop in a non-linear way, and would become affordable to consumers. This eventually led to the PC.  &lt;p&gt;The first personal computer – the Altair 8800 -  when it came out in 1975, was targeted at the uber-geek of the day – the computer enthusiast! This would probably not have become a mainstay had it not been for a program called the VisiCalc spreadsheet. VisiCalc was the predecessor to the Lotus Spreadsheet which in turn preceded Microsoft Excel.  VisiCalc was what propelled the PC into business computing.  Businesses started buying PCs so that their finance people could run VisiCalc. This mass purchasing in turn brought down prices which in turn led to more consumption, both on the business computing and the personal computing front, which spurred more innovation and more price falls. A virtuous cycle got started, and for the first time we saw the growth of a segment called personal computing.  &lt;p&gt;However, personal computing would perhaps have remained small had it not been for a phenomenon which caught almost everybody unawares – the World Wide Web. When Berners Lee invented the hyper-text at CERN in 1990 to solve the problem of navigating thru complex documentation, no one realized that it would enable hyper linking on a global scale, making everyone with a connection to the Internet a publisher with a planet-wide audience.  &lt;p&gt;To summarize, the 1950s saw computing move from the domain of a few governments to becoming available to businesses – business computing was born. The 70s saw the birth of personal computing. The 90s saw the WWW which led to huge growth in personal computing as well as business computing. Every 20 years, the industry witnesses a revolution of sorts. It is almost 20 years since the last one. What’s next?  &lt;p&gt;  &lt;p&gt;&lt;strong&gt;Industry Trends&lt;/strong&gt;  &lt;p&gt;One of the truest trends in the industry has been Moore’s Law - it has held true for the last 40 years – computing power is still doubling every 18 months or so. Differently put, computing power prices are still dropping non-linearly after four decades. Incidentally price of storage has also been falling non-linearly. The only major component which does not obey this law is bandwidth where price falls seem to be linear. I have outlined the hardware trends in a couple of &lt;a href="http://vineetgupta.spaces.live.com/blog/cns!8DE4BDC896BEE1AD!1118.entry"&gt;earlier&lt;/a&gt; &lt;a href="http://vineetgupta.spaces.live.com/blog/cns!8DE4BDC896BEE1AD!1313.entry"&gt;posts&lt;/a&gt; as well, you may want to go thru them for more context.  &lt;p&gt;Second, the mobile phone has put enormous computing power in the hands of everyone. The cellphone that I carry runs a Windows operating system on a 32-bit chip and has more storage and computing power than was available on a full-fledged desktop PC a decade ago. And these phones are getting more powerful faster than the PCs – the only constrain is battery power. With the converged device getting cheaper and more strongly subsidized, and the telcos tearing down their wall gardens, you can bet that the mobile phone would be key to pushing the computing power in the hands of the masses. Someone called the Mobile Phone the PC of India. I couldn’t agree more.   &lt;p&gt;What does all this mean? If you think about the buying capacity pyramid, the governments form the tip, large businesses form the top, small &amp;amp; medium enterprises form the bottom and consumers form the base. The history of computing has been one of transfer of growth from top towards bottom. Moore’s law ensures that. What it means is that over the next decade, the big growth in IT would happen towards the lower half of the pyramid. Personal computing would drive the next generation of growth in computing. This is also evident from the data on shipment and growth rate for PCs, Servers and Mobile devices:  &lt;p&gt;- Servers: 8.8 million server shipments in 2007, growing at 7% (&lt;a title="https://www.gartner.com/it/page.jsp?id=608710" href="https://www.gartner.com/it/page.jsp?id=608710"&gt;https://www.gartner.com/it/page.jsp?id=608710&lt;/a&gt;) &lt;p&gt;- PCs: 255.7 million PC shipments in 2007, growing at 10.5%. (&lt;a title="http://gartner.com/it/page.jsp?id=502458" href="http://gartner.com/it/page.jsp?id=502458"&gt;http://gartner.com/it/page.jsp?id=502458&lt;/a&gt;) &lt;p&gt;- Mobile Devices: 32.2 million Smartphones in Q1 2008, growing at 29% (&lt;a title="https://www.gartner.com/it/page.jsp?id=688116" href="https://www.gartner.com/it/page.jsp?id=688116"&gt;https://www.gartner.com/it/page.jsp?id=688116&lt;/a&gt;) &lt;p&gt;Now a significant chunk of the 8.8 M servers is being used to power up the cloud. (&lt;a href="http://www.microsoft.com/Presspass/exec/debrac/mms2008.mspx"&gt;Microsoft alone adds around 10k servers / month&lt;/a&gt;), but as you can see, the much bigger growth in computing power is coming from the Edge - the PCs, the mobile devices and a significant number of those Servers are getting deployed on the Edge. Also the growth rate is faster on the Edge. So try and visualize this: &lt;p&gt;- For several years before the advent of the Internet, businesses had been investing in computing power on the Edge - so there is a much bigger base of data and computing power on the Edge &lt;p&gt;- Far more computing power gets added to the Edge year on year as compared to what goes on the Cloud. Also, the rate at which this power is added is much higher for the Edge than the Cloud. &lt;p&gt;So what this means is this: The amount of data and computing power in the Cloud are much smaller than on the Edge, and are also growing at a much slower pace than the Edge. I could not find enough data to quantify this, but I hope you are getting the picture - the Edge is much bigger than the Cloud, and is growing at a faster pace, and given the cost trends, this is likely to continue as more and more consumers are able to afford computing. &lt;p&gt;  &lt;p&gt;&lt;strong&gt;Distributed Computing Economics&lt;/strong&gt;:  &lt;p&gt;Jim Gray's &lt;a href="http://research.microsoft.com/research/pubs/view.aspx?tr_id=655"&gt;famous paper&lt;/a&gt; on distributed  computing economics makes the argument that if we look at computing tasks in terms of their costs apportioned across CPU, Network, Data Access and Data Storage, most computing tasks require that the computation happen close to the data based on the fact that the cost of computing has been falling way faster than cost of network.  &lt;p&gt;Moving computation to a remote CPU requires that the cost saved by moving computation be &amp;gt; cost of moving data to the remote facility.  This typically works for a compute intensive, stateless task which has minimal data access /storage during computation, and a small input / output. Such a task is highly mobile - an example would be to calculate no. of primes in a range.  &lt;p&gt;However most computing tasks are data bound - they have a large input and output, and are data intensive during computation. Such tasks are immobile. Most business computing falls under this category, as does most of Internet computing - HTML, Email and FTP, since all of this requires data. &lt;p&gt;  &lt;p&gt;&lt;strong&gt;The Swing of the Pendulum&lt;/strong&gt; &lt;p&gt;The takeaway so far is:  &lt;p&gt;1) There is more data and computation available on the Edge than in the Cloud and this trend is likely to continue.  &lt;p&gt;2) Computation should happen close to data  &lt;p&gt;What this means is that a lot more computing would happen on the Edge than on the Cloud. In a sense, computing would flow from the Cloud to the Edge – it is cheaper to compute locally than pay for the round trip to a service in the sky. It just does not make economic sense to let that computing capacity on the Edge go waste, and instead take data from the Edge to the Cloud to compute it there.  &lt;p&gt;Ray Ozzie – Microsoft’s Chief Software Architect – often talks about this thing he calls the “Swing of the Pendulum.” The trend is this – there is a movement in IT from centralization to decentralization and back. 1950s saw the giant mainframes – as centralized as it could get. The decentralization came in 1970s with the PCs. The web then drove centralization once again in 90s with key applications like email and search becoming centralized. Today, you hear about centralization in the form of Web 2.0 in the consumer space, in the form of Service Oriented Architectures (SOA) in Enterprise IT, and Software as a Service (SaaS) for the SME. If the argument above is valid, the Pendulum is going to swing once more toward decentralization. Driven by economic forces, a lot more computing would happen on the Edge than on the Cloud.  &lt;p&gt;  &lt;p&gt;&lt;strong&gt;The Best of Both Worlds?&lt;/strong&gt;  &lt;p&gt;To proponents of centralized computing - Web 2.0 / SaaS - the conclusion above may come as a bit of a surprise. But there are arguments on the centralization aspect as well. The biggest argument in the favor of centralization is Utilization Efficiency. A lot of cheap hardware at the end of the day is still costly. And the power that computing is consuming is increasing day by day. (I would actually love to see a graph which plots % consumption of energy worldwide by workload. I think computing would be second only to transport in the aggregate). So efficiency in hardware and power utilization are going to be key concerns  going forward. It is well known that Cloud computing offers much better Utilization Efficiency as compared to Edge computing. This would be a key driving factor in the favor of Cloud Computing. The other trend that would favor Cloud computing is a change of business model in getting computing subsidized by advertising. Remember from an earlier point in the discussion that the big growth in computing would come from Consumer Computing. And this is where advertising plays a big role.  &lt;p&gt;So what I believe would happen is that we are going to see would be a hybrid world with the tenets of centralized computing combined with decentralized computing. The richest scenarios would be the ones where the power of Cloud Computing (infinite scalability, 100% uptime, ability to process a lot of data) is combined with the power of Edge Computing (local data, rich UX). The recent trends in RIA are about this: From HTML (pure Cloud) to AJAX (JavaScript in browser) to Flash / Silverlight / AIR (abstracted OS APIs) to WPF (full utilization of client computing power). The recent trends in communications are also about this: On-premise Email (Exchange Server) is being complimented with Hosted Email (Hosted Exchange) and EMail Services (Windows Live Mail). &lt;a href="http://www.mesh.com"&gt;Windows Live Mesh&lt;/a&gt; is yet another example of combining the Cloud and the Edge.  &lt;p&gt;Microsoft calls hybrid apps like these &amp;quot;Software + Services&amp;quot; applications. Terminology apart, you can bet that the dominant application architecture going forward would combine Cloud Computing with Edge Computing. What exact shape would this take? I discussed some of the lower level issues in my previous post: &lt;a href="http://vineetgupta.spaces.live.com/blog/cns!8DE4BDC896BEE1AD!1313.entry"&gt;Learning to Program all Over Again&lt;/a&gt;. However, it is a much bigger discussion and I would try and cover some of my thinking on this in a few posts going forward.  &lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-8222238350451482195&amp;page=RSS%3a+Edge+vs.+Cloud+Computing&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=vineetgupta.spaces.live.com&amp;amp;GT1=vineetgupta"&gt;</description><category>Computer Programming</category><comments>http://vineetgupta.spaces.live.com/Blog/cns!8DE4BDC896BEE1AD!1326.entry#comment</comments><guid isPermaLink="true">http://vineetgupta.spaces.live.com/Blog/cns!8DE4BDC896BEE1AD!1326.entry</guid><pubDate>Wed, 11 Jun 2008 11:31:38 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://vineetgupta.spaces.live.com/blog/cns!8DE4BDC896BEE1AD!1326/comments/feed.rss</wfw:commentRss><wfw:comment>http://vineetgupta.spaces.live.com/Blog/cns!8DE4BDC896BEE1AD!1326.entry#comment</wfw:comment><dcterms:modified>2008-06-11T11:31:38Z</dcterms:modified></item><item><title>Learning to Program all Over Again</title><link>http://vineetgupta.spaces.live.com/Blog/cns!8DE4BDC896BEE1AD!1313.entry</link><description>&lt;p&gt;This is just a jotting down of thoughts I have been having for the last couple of weeks. Had an interesting discussion with &lt;a href="http://thinkingms.com/pandurang"&gt;Pandu&lt;/a&gt; on this last evening and I thought it would be valuable writing down some of the key takeaways. Most of this is early thinking, but I think that as programmers, all of us need to start thinking hard about the issues below and start figuring our way around them. &lt;p&gt;&lt;strong&gt;1) Learn the trade-offs all over again&lt;/strong&gt;: The CPU is getting cheaper and would continue to do so at an ever increasing pace as transistor density continues to increase. However, while disk capacity is getting cheaper and would continue to do so, disk IO is not getting any faster. While IO has always been the big bottleneck , with CPUs getting more powerful, more and more workloads would become IO bound. Thankfully Flash provides some reprieve here and as hybrid disks and pure Flash storage gets mainstream, IO contention should reduce. But to take advantage of Flash, we would need to design apps which are Flash aware so that you can keep the hotter areas of your data on the Flash storage while the colder ones go on magnetic storage. A much harder problem is the memory wall - the access to memory is not getting faster and as CPUs get more powerful, all that computing power would end up waiting on memory. There are no hardware solutions to this, so it boils down to better caching and being super aware of data locality. So when you design a app next time, think about the trade offs all over again - CPU is cheap, code needs to be Flash aware and design for better caching and locality. &lt;p&gt;&lt;strong&gt;2) Learn to Parallelize Code&lt;/strong&gt;: I have written and talked about multi-core several times, and it always surprises me to see people getting surprised when they learn that their apps would need to be re-written to take advantage of the next set of chips. All that cheap computing power in the previous point is not easy to harness because it would be distributed across multiple cores. To take advantage of these cores, your code would need to be parallelized. This needs to happen on both client side and server side: &lt;p&gt;a) Server-Side: While server-side workloads are mostly parallelized already thanks to the transaction model on databases for stateful workloads and the atomic request-reply model in the web-server stateless model, we do have a problem is on the business logic code. As your web-server hands over a request to a business logic component and it does its computation, there are other requests waiting to be serviced by the same business logic component even as a CPU core lies idle.  &lt;p&gt;b) On the client, the situation is worse - all UI is done using one thread. And while some apps use the background worker thread approach, even there most of the apps tend to use a single thread only. Now on the client again, the CPU is not getting any faster, but more and more slow ones are becoming available. So for your app to take advantage of the new hardware, it needs to be parallelized.  &lt;p&gt;So irrespective of whether you are on the server or the client, you need to re-write your code. I had posted on some of what you can do earlier over &lt;a href="http://vineetgupta.spaces.live.com/blog/cns!8DE4BDC896BEE1AD!1056.entry"&gt;here&lt;/a&gt;. Since then, Microsoft has launched a full fledged &lt;a href="http://msdn.microsoft.com/en-us/concurrency/default.aspx"&gt;Parallel Computing Developer Center&lt;/a&gt; which is a great resource to learn the issues and how to address them.  &lt;p&gt;&lt;strong&gt;3) Learn to Work with Offline Data:&lt;/strong&gt; While bandwidth cost is getting cheaper and coverage is increasing, the fact is that it is flaky - sometimes you have a lot of it, sometime you have none at all. Also, there are other points of failure in the system and there is no chance that you would have the latest, correct data all the time. This has two consequences:  &lt;p&gt;a) From a client side perspective, since the expectation is that with pervasive connectivity, you can be online anytime, connected apps is the way to go. However, the flakiness also means that you need to work offline. That means storing data locally and sync-ing it with the online service depending on bandwidth availability. This would at times lead to issues - the pricelist on the tablet PC of the sales guy may change while he makes a transaction based on the data he has. Offline data is not friendly towards consistency, but availability. And a business would rather make a system more available, even if it means that sometimes business transactions would happen on wrong data which would require compensating actions. &lt;p&gt;b) From a server perspective, since your app and data would be residing in the Cloud, spread over several boxes, maybe several datacenters, changes to data would happen in different places at different points in time by different activities. So the change in inventory for example would need to be propagated and since bandwidth is flaky and boxes would go down, you would need to take the decision on the current inventory level based on the data that you have, and not some global version of the inventory. At some point in time, the data would sync and it would be figured that some transactions happened on bad data and these would need to be compensated again.  &lt;p&gt;This model of working with data you have (I am calling this offline data for the want of a better word) in an optimistic way hoping that the data is correct, syncing at some later time in point, figuring out the inconsistencies and then dealing with them is increasingly going to be a complex problem all App architects would have to solve. While there is some technology to help - ADO.net Sync Framework, Workflow Foundation and Communication Foundation come to mind - the business logic of detection, deciding on the compensation and carrying out the compensation would need to be designed in the biz-logic of the app. &lt;p&gt;&lt;strong&gt;4) Learn to Slice up the App:&lt;/strong&gt; The point on data above leads to a bigger point on slicing up the app in general. The first level of slicing is on having an offline semi-connected client. The second level of slicing is on the server-side. Some of the server-side functionality would need to be in the Enterprise datacenter where your app may need to talk to some of the other systems. Some of the functionality would need to go to the Cloud - mostly areas where you need infinite scaling and 100% uptime. This leads to questions on what should be the boundaries, how do you come up with the boundaries, how does the communication happen between the boundaries, etc. So how we slice up the apps is a huge issue, and we all need to find our feet when it comes to this. I have some thoughts on this, but over here I basically want to highlight the issue and not discuss possible approaches - that is a topic for some other post in future. &lt;p&gt;So those were the major points in my mind on the challenges ahead and skills we would need to acquire to address these challenges. Obviously, various technologies would also evolve to help solve these issues - new languages, new algorithms, new frameworks, new design patterns .. I think the way to go would be declarative - state your intent and let the runtimes handle stuff for you. Also it would be mostly model-led. Lots of new stuff to learn - it never gets too dull here!&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-8222238350451482195&amp;page=RSS%3a+Learning+to+Program+all+Over+Again&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=vineetgupta.spaces.live.com&amp;amp;GT1=vineetgupta"&gt;</description><category>Computer Programming</category><comments>http://vineetgupta.spaces.live.com/Blog/cns!8DE4BDC896BEE1AD!1313.entry#comment</comments><guid isPermaLink="true">http://vineetgupta.spaces.live.com/Blog/cns!8DE4BDC896BEE1AD!1313.entry</guid><pubDate>Fri, 30 May 2008 11:16:51 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://vineetgupta.spaces.live.com/blog/cns!8DE4BDC896BEE1AD!1313/comments/feed.rss</wfw:commentRss><wfw:comment>http://vineetgupta.spaces.live.com/Blog/cns!8DE4BDC896BEE1AD!1313.entry#comment</wfw:comment><dcterms:modified>2008-05-30T11:16:51Z</dcterms:modified></item><item><title>Web Innovation Conference 2008 - Mumbai</title><link>http://vineetgupta.spaces.live.com/Blog/cns!8DE4BDC896BEE1AD!1288.entry</link><description>&lt;p&gt;  
&lt;p&gt;Just got back to my hotel room from the &lt;a href="http://www.webinnovation.in/"&gt;Web Innovation Conference 2008&lt;/a&gt;, and despite being really tired, I am feeling quite happy since this was one of those rare conferences that I really enjoyed - both as a sponsor and as an attendee. The crowd was quite diverse and knowledgeable and I had a lot of very lively conversations with decision makers, developers, designers and marketeers from our customers and partners. 
&lt;p&gt;My key takeaway was that in India, people are doing some great work, have great ideas and are truly excited about converting them to reality. This was most energizing. What was also very heartening was to see the buzz and excitement around Silverlight. Almost everyone whom I spoke with (and I must have spoken to at least 50-60 people thru the day) was quite impressed by the capabilities of Silverlight and wanted to find out what more could be done with it. 
&lt;p&gt;But most of all, I think I would remember this conference for making some new friends - met Amuleek Bijral from RSA after several years and it was fun catching up, had a great discussion with Amit Somani from Google on various aspects of cloud computing and hardware trends, the state of computer science research and a shared respect for some of the greats in the field, and had a lot of discussions with &lt;a href="http://bhavin.directi.com/"&gt;Bhavin Turakhia&lt;/a&gt; from Directi on a thousand interesting topics - I think we could have gone on for a couple more days without a break and without repeating a subject. All thanks to &lt;a href="http://kronicles.blogspot.com/"&gt;Kaushal Karkhanis&lt;/a&gt; who got us to talk on WPF vs. AIR on camera and then ran out of space as we just went on and on! 
&lt;p&gt;Great fun and very energizing!!&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-8222238350451482195&amp;page=RSS%3a+Web+Innovation+Conference+2008+-+Mumbai&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=vineetgupta.spaces.live.com&amp;amp;GT1=vineetgupta"&gt;</description><category>Web</category><comments>http://vineetgupta.spaces.live.com/Blog/cns!8DE4BDC896BEE1AD!1288.entry#comment</comments><guid isPermaLink="true">http://vineetgupta.spaces.live.com/Blog/cns!8DE4BDC896BEE1AD!1288.entry</guid><pubDate>Thu, 08 May 2008 13:45:56 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://vineetgupta.spaces.live.com/blog/cns!8DE4BDC896BEE1AD!1288/comments/feed.rss</wfw:commentRss><wfw:comment>http://vineetgupta.spaces.live.com/Blog/cns!8DE4BDC896BEE1AD!1288.entry#comment</wfw:comment><dcterms:modified>2008-05-30T11:20:05Z</dcterms:modified></item><item><title>Getting Started with Google App Engine - Part I</title><link>http://vineetgupta.spaces.live.com/Blog/cns!8DE4BDC896BEE1AD!1277.entry</link><description>&lt;p&gt;  
&lt;p&gt;I have a new found interest in Cloud Computing, and the first attack is on the Google App Engine. Didn't exactly get off to a flyer: 
&lt;p&gt;1) Limited beta - they are going to send me a mail on my GMail account on when I can start using it. But I can start right away by using the SDK. 
&lt;p&gt;2) Downloaded the SDK and ran the installer - damn! Requires Python - go download separately!! This is ridiculous - why can't they bundle it with the installer? 
&lt;p&gt;3) Now I am on the Python site and see a set of versions - do I install the latest version? Not sure, let me run the installer again ... ok, it requires 2.5 from Python.org or from activestate. Would 2.5.2 work? Not sure. Wish they could have given a page with a link rather than a modal dialog! 
&lt;p&gt;4) Downloading Python-2.5.2.msi from &lt;a title="http://www.python.org/download/" href="http://www.python.org/download/"&gt;http://www.python.org/download/&lt;/a&gt; - it is 10 MB. Went to ActiveState and after 10 odd clicks, I now have to fill up a form... I think I am going to download the python.org version - AppEngine cannot be using ActiveState specific extensions. 
&lt;p&gt;5) Download started - need to learn Python now ... next step, download the documentation from &lt;a title="http://docs.python.org/download" href="http://docs.python.org/download"&gt;http://docs.python.org/download&lt;/a&gt;. 
&lt;p&gt;6) Python compiler installed. Now running the installer .. it is Vista ready, but not signed yet .. makes sense, bits are in beta. Installed smoothly. 
&lt;p&gt;7) Ok, now to figuring out what this stuff is. &lt;a title="http://code.google.com/appengine/docs/" href="http://code.google.com/appengine/docs/"&gt;http://code.google.com/appengine/docs/&lt;/a&gt; talks about a Python runtime, a datastore, users API, URL Fetch (sounds like a REST consumer) and a mail API - not bad, got this piece. 
&lt;p&gt;8) Finally, how to work with this - &lt;a title="http://code.google.com/appengine/docs/gettingstarted/" href="http://code.google.com/appengine/docs/gettingstarted/"&gt;http://code.google.com/appengine/docs/gettingstarted/&lt;/a&gt; basically says that there is a &lt;a href="http://code.google.com/appengine/docs/thedevwebserver.html"&gt;dev web-server&lt;/a&gt; which I think will run locally and &lt;a href="http://code.google.com/appengine/docs/appcfgpy.html"&gt;a utility to upload code&lt;/a&gt; to the Google cloud. The web-server seems interesting - it is an emulation environment for the cloud infra. Can I use it without the invite? Seems I can! 
&lt;p&gt;9) Now reading &lt;a title="http://code.google.com/appengine/docs/gettingstarted/helloworld.html" href="http://code.google.com/appengine/docs/gettingstarted/helloworld.html"&gt;http://code.google.com/appengine/docs/gettingstarted/helloworld.html&lt;/a&gt; - so the idea is that you write your code in python, describe the app environment using app.yaml (that obviously uses the &lt;a href="http://www.yaml.org/"&gt;YAML syntax&lt;/a&gt;) and then start the dev web-server with the path to your code. Pretty simple, eh? The URL - &lt;a href="http://localhost:8080/"&gt;http://localhost:8080&lt;/a&gt; is hardcoded, but that's ok. 
&lt;p&gt;10) My next question - where is the web framework - is answered in &lt;a title="http://code.google.com/appengine/docs/gettingstarted/usingwebapp.html" href="http://code.google.com/appengine/docs/gettingstarted/usingwebapp.html"&gt;http://code.google.com/appengine/docs/gettingstarted/usingwebapp.html&lt;/a&gt;. So any CGI targeting framework written in pure Python would work. You got to upload the framework along with the app ... hmm, that keeps things simple for AppEngine while giving a choice to Python toting devs. The other choice is to use the AppEngine supplied framework called &lt;a title="the webapp reference" href="http://code.google.com/appengine/docs/webapp/"&gt;webapp&lt;/a&gt;. Since I do not know any Python based framework, I think I am going to use this. Not sure of what Python devs would typically use. I have heard of Django and Zope. 
&lt;p&gt;11) Finally went thru the links in &lt;a title="http://code.google.com/appengine/docs/python/" href="http://code.google.com/appengine/docs/python/"&gt;http://code.google.com/appengine/docs/python/&lt;/a&gt; and this gives me a decent idea of what this environment is like. It is a simple programming model and I think that is a strength, though having to learn Python may dishearten your average dev. 
&lt;p&gt;So I think what I am going to do next is to maybe write a bunch of simple apps on the local dev-server and pick up Python while I wait for my AppEngine invite. This is cool - I wanted to learn a new language anyway and AppEngine forces me to learn Python which I can also use for SL 2 demos!&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-8222238350451482195&amp;page=RSS%3a+Getting+Started+with+Google+App+Engine+-+Part+I&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=vineetgupta.spaces.live.com&amp;amp;GT1=vineetgupta"&gt;</description><category>Computer Programming</category><comments>http://vineetgupta.spaces.live.com/Blog/cns!8DE4BDC896BEE1AD!1277.entry#comment</comments><guid isPermaLink="true">http://vineetgupta.spaces.live.com/Blog/cns!8DE4BDC896BEE1AD!1277.entry</guid><pubDate>Fri, 02 May 2008 20:40:28 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://vineetgupta.spaces.live.com/blog/cns!8DE4BDC896BEE1AD!1277/comments/feed.rss</wfw:commentRss><wfw:comment>http://vineetgupta.spaces.live.com/Blog/cns!8DE4BDC896BEE1AD!1277.entry#comment</wfw:comment><dcterms:modified>2008-05-30T11:20:31Z</dcterms:modified></item><item><title>Microsoft's Recent Announcements on Web Technologies</title><link>http://vineetgupta.spaces.live.com/Blog/cns!8DE4BDC896BEE1AD!1260.entry</link><description>&lt;p&gt;I have now been away from the blogosphere on yet another extended leave of absence. The reason is that I have been in the midst of change - I now lead Web Strategy at Microsoft India. The web is evolving at a very fast pace and Microsoft has a unique position amongst all technology vendors when it comes to this space. This becomes even more interesting in the India context - the pace of socio-economic change is unprecedented, and companies here are coming up with some very innovative business ideas to succeed, so I feel both excited and humbled at the opportunities ahead.  &lt;p&gt;Now if you are interested in the Web (who is not?) then it cannot be that you are not aware of &lt;a href="http://visitmix.com/2008/default.aspx"&gt;Mix&lt;/a&gt; - Microsoft's biggest conference on the web technologies space. Like the last two years, Microsoft made some big announcements around the Mix timeframe and showcased some very interesting new technology. This post captures the announcements and explains what they really mean. &lt;ol&gt; &lt;li&gt;&lt;strong&gt;&lt;u&gt;Internet Explorer 8&lt;/u&gt;&lt;/strong&gt;  &lt;ul&gt; &lt;li&gt;&lt;strong&gt;CSS 2.1 + DOM Enhancements&lt;/strong&gt;: As Dean Hachamovitch pointed out in the &lt;a href="http://www.microsoft.com/Presspass/exec/ozzie/03-05-08MIX.mspx"&gt;Mix keynote&lt;/a&gt;, IE 8 is heavily focused on Developers, and the biggest problem web-developers have had is the non-compliant, quirky behavior of Internet Explorer which has led to countless hours spent in achieving cross-browser compatibility. The goal with IE 8 is to achieve 100% compatibility with the &lt;a href="http://www.w3.org/TR/CSS21/"&gt;CSS 2.1 spec&lt;/a&gt; (note that the spec is still in a &amp;quot;candidate recommendation&amp;quot; status). It also tries to address some of the top requested features from &lt;a href="http://www.w3.org/TR/css3-roadmap/"&gt;CSS 3&lt;/a&gt;.  More details are available on &lt;a href="http://msdn2.microsoft.com/en-us/library/cc304082(VS.85).aspx"&gt;CSS Improvements in Internet Explorer 8&lt;/a&gt;. The other big step towards standardization is an enhanced DOM which is closer to the implementation in other browsers. More details on this are available on &lt;a href="http://msdn2.microsoft.com/en-us/library/cc288472(VS.85).aspx#ajax"&gt;What’s New in Internet Explorer 8&lt;/a&gt;.  &lt;li&gt;&lt;strong&gt;CSS 2.1 Test Cases&lt;/strong&gt;: It is never easy to define the behavior of software unambiguously in regular English. Specs therefore go in great formalism to try and define as clearly as possible the expected behavior of software. (This has also led to efforts like &lt;a href="http://research.microsoft.com/specsharp/"&gt;Spec#&lt;/a&gt;) Getting that clarity for sophisticated markup like HTML and CSS is even more difficult. Which is the reason why the W3C also defines a &lt;a href="http://www.w3.org/Style/CSS/Test/#CSS2.1"&gt;test suite for CSS&lt;/a&gt; that consists of 487 odd tests. What Microsoft has done is to submit an additional &lt;a href="http://samples.msdn.microsoft.com/csstestpages/default.htm"&gt;700 tests&lt;/a&gt; to W3C - the idea is to get these included in the W3C suite and get feedback to improve IE's adherence to CSS specs.  &lt;li&gt;&lt;strong&gt;Standards Mode&lt;/strong&gt;: The evolving nature of the HTML and CSS specs means that there is a lot of content on the Web which is not compliant with the standards. This means that browsers like Internet Explorer need to follow the &amp;quot;Don't Break the Web&amp;quot; rule in a strong way, while being standards compliant at the same time. Note that this not just an IE problem. The so called &lt;a href="http://www.quirksmode.org/css/quirksmode.html"&gt;Quirks Mode&lt;/a&gt; is something that all browsers - &lt;a href="http://developer.mozilla.org/en/docs/Mozilla_Quirks_Mode_Behavior"&gt;Mozilla&lt;/a&gt;, &lt;a href="http://www.opera.com/docs/specs/doctype/"&gt;Opera&lt;/a&gt;, &lt;a href="http://blogs.msdn.com/ie/archive/2005/09/15/467901.aspx"&gt;IE&lt;/a&gt; - need to maintain. Now what has changed in IE is that besides using the &lt;a href="http://msdn2.microsoft.com/en-us/library/ms535242.aspx"&gt;DOCTYPE&lt;/a&gt; &lt;a href="http://hsivonen.iki.fi/doctype/"&gt;switch&lt;/a&gt;, in order to take advantage of the fully standards compliant mode of IE 8, authors would need to include a META content tag as well. The reasons for doing this and its implications are a bit complex and I would discuss that in detail in a future post. For now, if you want to read more about this, start from Chris Wilson's post on &lt;a href="http://blogs.msdn.com/ie/archive/2008/01/21/compatibility-and-ie8.aspx"&gt;Compatibility and IE 8&lt;/a&gt;, and finally read &lt;a title="Versioning and IE Modes" href="http://code.msdn.microsoft.com/ie8whitepapers/Release/ProjectReleases.aspx?ReleaseId=569"&gt;Versioning and IE Modes&lt;/a&gt;.  &lt;li&gt;&lt;strong&gt;Scripting Improvements&lt;/strong&gt;: The other area where standards compliance was needed was the JScript engine. There are certain compatibility issues in the Microsoft implementation of the &lt;a href="http://www.ecma-international.org/publications/files/ecma-st/ECMA-262.pdf"&gt;ECMAScript Language Specification 3rd Edition&lt;/a&gt; (ES3). These have been identified and documented at &lt;a href="http://wiki.ecmascript.org/lib/exe/fetch.php?id=resources:resources&amp;amp;cache=cache&amp;amp;media=resources:jscriptdeviationsfromes3.pdf"&gt;JScript Deviations from ES3&lt;/a&gt; which should act as a guidance for developers working on cross-browser apps. Of course as a developer, I do not want to understand the differences and JavaScript should behave identically on all browsers and my code should just work! For those of us who were expecting IE 8 Beta 1 to deliver on this, the news is not exciting - IE 8 JScript Engine does not fix the compatibility issues. The JScript team is of course fully committed to achieving full compatibility, but we will have to wait a little longer to see that. However, what we are getting in JScript as a part of IE 8 are improvements on areas which were huge pain points for all developers. There are two key areas of improvement - performance and memory management:  &lt;ol&gt; &lt;li&gt;The perf issue - JScript is notorious for its string performance. (see &lt;a href="http://www.codinghorror.com/blog/archives/001023.html"&gt;this&lt;/a&gt; benchmark for details) The good news is that now operations like String Concatenation - which are very common in AJAX - are several times faster. The JScript GC has also been tuned so if you are creating a number of strings and discarding them, the number of collections is reduced, hence increasing the perf. Improvements have also been made to built-in array operations. Other improvements include DOM Search using the getElementById and getElementsByTagName methods, and the availability of CSS &lt;a href="http://code.msdn.microsoft.com/ie8whitepapers/Release/ProjectReleases.aspx?ReleaseId=574"&gt;Selector APIs&lt;/a&gt;. More details are on perf improvements can be found on &lt;a href="http://code.msdn.microsoft.com/ie8whitepapers/Release/ProjectReleases.aspx?ReleaseId=579"&gt;this&lt;/a&gt; whitepaper.  &lt;li&gt;Circular Reference Memory Leaks: I am not sure how many people are aware of this, but the JScript Garbage Collector does not control lifetimes of DOM objects, it does lifetime management only for JScript objects. The result is that JScript cannot break circular references between JScript objects and DOM objects unless the IE process terminates (IE 6) or the user navigates away from the page (IE 7). The issue is a bit more complicated than just this - read this &lt;a href="http://msdn2.microsoft.com/en-us/library/bb250448.aspx"&gt;MSDN article&lt;/a&gt; if you want to know what is really happening. Now what the JScript team has done for IE 8 is to go and make changes to underlying COM plumbing infrastructure to address this problem at a fundamental level so that the issue is revolved not just for JScript, but also for any other components which face similar issues. For a JScript developer, the impact is that now DOM object lifetimes are also controlled by the JScript engine and hence it can break circular references between JScript and DOM objects and hence not leak memory. More details are available on &lt;a href="http://code.msdn.microsoft.com/ie8whitepapers/Release/ProjectReleases.aspx?ReleaseId=578"&gt;this&lt;/a&gt; whitepaper.&lt;/ol&gt; &lt;li&gt;&lt;strong&gt;Developer Tools&lt;/strong&gt;: Every time I had to understand why my page was behaving in a certain way, my only choice was to open that page in FireFox and use FireBug. The &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=E59C3964-672D-4511-BB3E-2D5E1DB91038&amp;amp;displaylang=en"&gt;IE Developer Toolbar&lt;/a&gt; solved it to some extent, but not completely. The IE 8 team has now gone and delivered a set of dev tools which tops even FireBug. You can inspect and edit HTML + CSS + DOM. You can see the details of Style, Layout and even trace styles to view computed styles. But the feature I like best is the script debugging support. You can do breakpoints, watch windows, call stack, custom script execution - it is almost a Visual Studio experience, and it ships as a part of IE 8! More details are available on &lt;a href="http://code.msdn.microsoft.com/ie8whitepapers/Release/ProjectReleases.aspx?ReleaseId=580"&gt;this&lt;/a&gt; whitepaper.  &lt;li&gt;&lt;strong&gt;Activities&lt;/strong&gt;: IE 8 introduces the notion of an &amp;quot;Activity&amp;quot; - a contextual UI pattern that can used to access a service from a web page. The pattern is activated when the user brings up the context menu by a Right Click or by selecting some content on the page which brings up a smart-tag like button. Activities can then be used to perform Lookup operations like Search, or Send operations like email and blog. Much like the Search Provider functionality that shipped with IE 7, an Activity is user deployed and can be promoted by any website. In this sense, an Activity is yet another kind of a browser plug-in. Activities are declaratively created, using an XML grammar called the Open Service Description. More details can be found on &lt;a href="http://code.msdn.microsoft.com/Release/ProjectReleases.aspx?ProjectName=ie8whitepapers&amp;amp;ReleaseId=566"&gt;this&lt;/a&gt; whitepaper.  &lt;li&gt;&lt;strong&gt;Web Slices&lt;/strong&gt;: A Web Slice is a subscription to a frequently updated portion of a Web page, much the way RSS is a subscription to the content of a Web-page. WebSlices uses the &lt;a href="http://microformats.org/wiki/hatom"&gt;hAtom microformat&lt;/a&gt; to describes a feed and feed items. But while hAtom can only represent static content, WebSlices work with dynamic content that is expected to change. To achieve this, WebSlices reuses properties from hAtom and adds properties for subscription. From a publisher standpoint, this allows creation of update-able content right inside the page which can stay with the user even after he has closed the page. More details can be found on &lt;a href="http://code.msdn.microsoft.com/Release/ProjectReleases.aspx?ProjectName=ie8whitepapers&amp;amp;ReleaseId=567"&gt;this&lt;/a&gt; whitepaper.  &lt;li&gt;&lt;strong&gt;Other Improvements&lt;/strong&gt;: In IE 8, the IE Frame and the tabs are separated into different processes. This increased isolation improves perf and reliability. This allows the &lt;a href="http://msdn2.microsoft.com/en-us/library/bb625957.aspx"&gt;Windows Vista Integrity Mechanism&lt;/a&gt; to be used in an interesting way: The Frame runs at medium integrity level and individual tabs - manifested as separate browser processes - can run at low or medium integrity levels. More details can be found at &lt;a title="Loosely-coupled Internet Explorer" href="http://code.msdn.microsoft.com/ie8whitepapers/Release/ProjectReleases.aspx?ReleaseId=565"&gt;Loosely-coupled Internet Explorer&lt;/a&gt;. These changes not only isolate errors from each other, but also help the browser recover from crashes and hangs. This is done by an object in the Frame that stores key data such as per tab URL history, tab URLs and order, etc. in a persistent store. When there is a hang /crash in a browser process (typically because of an external component), this object can recover the data. Since the data is persisted, it survives even Frame crashes. More details can be found at &lt;a title="Automatic Crash Recovery" href="http://code.msdn.microsoft.com/ie8whitepapers/Release/ProjectReleases.aspx?ReleaseId=582"&gt;Automatic Crash Recovery.&lt;/a&gt; The other key architectural change is that a lot of internal communication inside the browser is now asynchronous which leads to better response times. Besides these key changes, there are improvements on the accessibility front that are detailed at &lt;a title="W3C's ARIA support" href="http://code.msdn.microsoft.com/ie8whitepapers/Release/ProjectReleases.aspx?ReleaseId=564"&gt;W3C's ARIA support,&lt;/a&gt; &lt;a title="Zoom v2" href="http://code.msdn.microsoft.com/ie8whitepapers/Release/ProjectReleases.aspx?ReleaseId=563"&gt;Zoom v2,&lt;/a&gt; &lt;a title="Manage Add-Ons" href="http://code.msdn.microsoft.com/ie8whitepapers/Release/ProjectReleases.aspx?ReleaseId=560"&gt;Manage Add-Ons,&lt;/a&gt; &lt;a title="Per-Site ActiveX" href="http://code.msdn.microsoft.com/ie8whitepapers/Release/ProjectReleases.aspx?ReleaseId=561"&gt;Per-Site ActiveX&lt;/a&gt; and &lt;a title="Non-Admin ActiveX Controls" href="http://code.msdn.microsoft.com/ie8whitepapers/Release/ProjectReleases.aspx?ReleaseId=562"&gt;Non-Admin ActiveX Controls,&lt;/a&gt; &lt;a title="Printing Improvements" href="http://code.msdn.microsoft.com/ie8whitepapers/Release/ProjectReleases.aspx?ReleaseId=570"&gt;Printing Improvements,&lt;/a&gt; &lt;a title="DOM Core Improvements" href="http://code.msdn.microsoft.com/ie8whitepapers/Release/ProjectReleases.aspx?ReleaseId=571"&gt;DOM Core Improvements,&lt;/a&gt; &lt;a title="HTML Improvements and ACID2" href="http://code.msdn.microsoft.com/ie8whitepapers/Release/ProjectReleases.aspx?ReleaseId=572"&gt;HTML Improvements and ACID2,&lt;/a&gt; etc.  &lt;p&gt;In all, IE 8 has a number of enhancements which are very exciting for a developer and promise to make life a lot simpler for a consumer. You can download details on most of these from &lt;a title="http://code.msdn.microsoft.com/ie8whitepapers" href="http://code.msdn.microsoft.com/ie8whitepapers"&gt;http://code.msdn.microsoft.com/ie8whitepapers&lt;/a&gt;. More information on IE 8, including hands on labs and IE 8 VPCs is available on &lt;a title="http://www.microsoft.com/windows/products/winfamily/ie/ie8/readiness/" href="http://www.microsoft.com/windows/products/winfamily/ie/ie8/readiness/"&gt;http://www.microsoft.com/windows/products/winfamily/ie/ie8/readiness/&lt;/a&gt;.&lt;/ul&gt; &lt;li&gt;&lt;strong&gt;&lt;u&gt;Silverlight 2:&lt;/u&gt;&lt;/strong&gt; One of the most significant announcements at Mix 08 was that Silverlight 2 Beta 1 bits were made available. An architectural diagram of SL 2 can be found at &lt;a title="http://en.wikipedia.org/wiki/Image:Microsoft_Silverlight_stack.svg" href="http://en.wikipedia.org/wiki/Image:Microsoft_Silverlight_stack.svg"&gt;http://en.wikipedia.org/wiki/Image:Microsoft_Silverlight_stack.svg&lt;/a&gt;. I am going to describe the key constituent pieces here:  &lt;ul&gt; &lt;li&gt;&lt;strong&gt;Managed Code:&lt;/strong&gt; Silverlight 2 is browser plugin that hosts a specially created version of the CLR (called CoreCLR) along with a subset of the libraries that ship with the .Net Framework. This means that as a .Net developer, you can start writing code for SL 2 without having to learn anything new - fundamental things like memory management, type system, generics, reflection, threading, collections, work just the same. More information on this is available on &lt;a title="Common Language Runtime and Base Class Library in Silverlight" href="http://msdn2.microsoft.com/en-us/library/cc221412(vs.95).aspx"&gt;Common Language Runtime and Base Class Library in Silverlight&lt;/a&gt;.  &lt;li&gt;&lt;strong&gt;Dynamic Languages:&lt;/strong&gt; When Microsoft released CLR back in 2001, one of the stated goals was support for different kinds of programming languages. A category of languages which was hard to target for the CLR was &lt;a href="http://en.wikipedia.org/wiki/Dynamic_programming_language"&gt;Dynamic Languages&lt;/a&gt;. Thru the work done by people like &lt;a href="http://blogs.msdn.com/hugunin/default.aspx"&gt;Jim Hugunin&lt;/a&gt;, Microsoft has in the works a &lt;a href="http://msdn2.microsoft.com/en-us/magazine/cc163344.aspx"&gt;Dynamic Languages Runtime&lt;/a&gt; which facilitates targeting languages like Ruby, Perl, Lisp and Python on the CLR. The good news is that Silverlight 2 hosts the DLR, and hence it is possible to program against SL 2 using languages like &lt;a title=IronRuby href="http://www.ironruby.net/"&gt;IronRuby&lt;/a&gt;,  &lt;a href="http://www.codeplex.com/IronPython"&gt;IronPython&lt;/a&gt; and &lt;a href="http://msdn2.microsoft.com/en-us/library/cc189024(vs.95).aspx"&gt;Managed JScript&lt;/a&gt;.  &lt;li&gt;&lt;strong&gt;Browser Interaction&lt;/strong&gt;: At the end of the day, a SL app is a browser app, so interacting with the browser host is critical for several SL apps. To achieve this, the Browser is exposed to SL via .Net classes, and similarly, SL objects are available to JavaScript code running in the browser. To interact with the browser from inside SL, you go thru the &lt;a href="http://msdn2.microsoft.com/en-us/library/cc190483(VS.95).aspx"&gt;System.Windows.Browser&lt;/a&gt; namespace.This allows you to work with browser information, get to the HTML DOM tree, hook on to events, invoke JavaScript code, etc. Details are available on &lt;a title="Calling Client Script from Managed Code" href="http://msdn2.microsoft.com/en-us/library/cc221359(vs.95).aspx"&gt;Calling Client Script from Managed Code&lt;/a&gt;. Similarly, it is possible to interact with SL from JavaScript code running in the browser. For this, the code to be called in SL is registered during the Application Startup event in SL as a &lt;a href="http://msdn2.microsoft.com/en-us/library/cc190562(VS.95).aspx"&gt;Scriptable&lt;/a&gt; object. This then is exposed as a property on the SL control, callable by JavaScript. Details are available on &lt;a title="Walkthrough- Calling Managed Code from Client Script" href="http://msdn2.microsoft.com/en-us/library/cc221414(vs.95).aspx"&gt;Calling Managed Code from Client Script&lt;/a&gt;.  &lt;li&gt;&lt;strong&gt;Integrating with ASP.net&lt;/strong&gt;: While Silverlight content can be embedded in an HTML page, the most interesting Silverlight applications would be generated using server-side technologies like ASP.net. To make it really easy for developers to integrate ASP.net with Silverlight, two ASP.net controls are provided in the SL 2 Beta 1 SDK: The &lt;a href="http://quickstarts.asp.net/3-5-extensions/reference/silverlightref/T_System_Web_UI_SilverlightControls_MediaPlayer.aspx"&gt;ASP.net MediaPlayer Control&lt;/a&gt; to integrate media content (no need to learn XAML or JavaScript), and the &lt;a href="http://quickstarts.asp.net/3-5-extensions/reference/silverlightref/T_System_Web_UI_SilverlightControls_Silverlight.aspx"&gt;ASP.net Silverlight Control&lt;/a&gt; which is a generic control that allows you to integrate XAML and any other supporting code. More details are available on &lt;a title="ASP.NET Silverlight Overview" href="http://quickstarts.asp.net/3-5-extensions/silverlight/ASP.NETSilverlightOverview.aspx"&gt;ASP.NET Silverlight Overview&lt;/a&gt;.  &lt;li&gt;&lt;strong&gt;Controls Framework&lt;/strong&gt;: A number of web applications are form-based, and need richer functionality like the ability to work with formatted text, offline forms, spell check, etc. For developing these apps quickly, a set of controls and extensibility using a Controls Framework is required. SL 2 provides both. Moreover, the controls in SL 2 are customizable - they come with templates that can be changed to completely modify their look and feel. This is achieved by decoupling the the visual behavior of a control from its logic. The visual behavior is defined in a &lt;a title=ControlTemplate href="http://msdn2.microsoft.com/en-us/library/ms609827(VS.95).aspx"&gt;ControlTemplate&lt;/a&gt; which in turn consists of several parts. If you want a particular visual behavior element to be re-definable, you create a separate part for it. These parts can then be individually customized without any impact to the logic of the control itself. Of course this maybe too complicated for some scenarios, in which case you can always create a control using a &lt;a href="http://msdn2.microsoft.com/en-us/library/ms617852(VS.95).aspx"&gt;UserControl&lt;/a&gt; class in the familiar ASP.net / Windows Forms way. The controls that Silverlight ships with have this decoupled visual behavior that allows them to be customized. More details can be found on &lt;a title="Styling and Templating Overview" href="http://msdn2.microsoft.com/en-us/library/cc189093(vs.95).aspx"&gt;Styling and Templating Overview&lt;/a&gt;.  &lt;li&gt;&lt;strong&gt;Web Services&lt;/strong&gt;: The term web-service is classically associated with SOAP based web-services. However, when we think of a web-service being accessed by Silverlight, we are thinking of the following kinds of services:  &lt;ul&gt; &lt;li&gt;Self-Describing Services: For a service that can describe itself using using machine-readable metadata, we can generate a proxy to which Silverlight can bind. This is the process of service consumption that happens when you click &amp;quot;Add Web-Reference&amp;quot; to a project in Visual Studio. This works exactly the same way in Silverlight 2 projects as well - you add a reference to the web-service and then you can call that service from inside SL. Now which services are self-describing? These are the following:  &lt;ul&gt; &lt;li&gt;SOAP-based Services: SOAP Services from the beginning have been self-describing (thru WSDL) and hence can be consumed using a &amp;quot;Web-Reference&amp;quot; from inside VS. From a service design standpoint, the restriction is that WS-* services like addressing, transactions, etc. cannot be used in SL. So if you have a WCF service, Silverlight can use the &lt;a title=BasicHttpBinding href="http://msdn2.microsoft.com/en-us/library/ms405774(VS.95).aspx"&gt;BasicHttpBinding&lt;/a&gt;. The implication of this is that you cannot have message-level security and need to rely on transport-level security using SSL. &lt;li&gt;ADO.net Data Services (Astoria): &lt;a href="http://msdn2.microsoft.com/en-us/data/bb931106.aspx"&gt;ADO.net Data Services&lt;/a&gt; allows you to store arbitrary data on Microsoft's infrastructure, and provides semantics for reflection on URIs and payloads. The service itself can be described using an &lt;a href="http://msdn2.microsoft.com/en-us/library/bb387122.aspx"&gt;Entity Data Model (EDM)&lt;/a&gt; conceptual schema. This allows tools to consume this metadata and generate proxies which can then be consumed directly from within the Silverlight code. A simple way of doing this is to use the &lt;a href="http://quickstarts.asp.net/3-5-extensions/adonetdataservice/NETClientLibrary.aspx"&gt;ADO.net Data Services .Net Client Library&lt;/a&gt;. Please note that ADO.net Data Services is not to be confused with &lt;a href="http://www.microsoft.com/sql/dataservices/default.mspx"&gt;SQL Server Data Services&lt;/a&gt; which serves a different purpose (explained below)&lt;/ul&gt; &lt;li&gt;Non Self-Describing Services: These services have human-readable markup. The model is to, well, read the documentation, create HTTP requests and work with Request / Response data in XML / JSON - pretty much everything by hand. &lt;a title="Accessing HTTP-Based Services Directly" href="http://msdn2.microsoft.com/hi-in/library/cc197947(en-us,VS.95).aspx"&gt;Accessing HTTP-Based Services Directly&lt;/a&gt; describes how you should consume such services from Silverlight.&lt;/ul&gt; &lt;li&gt;&lt;strong&gt;Data&lt;/strong&gt;: Silverlight is a client side technology and hence its work on data is also on the client side. On the client side, there is no database and the data is usually held in the browser's isolated storage in the form of XML files and manipulated there. This data may be data pulled in by services mentioned in the previous point, or/and it can be AJAX data. To store and manipulate the data, a virtual file system can be created using &lt;a href="http://msdn2.microsoft.com/en-us/library/x7dzh4ws(VS.95).aspx"&gt;System.IO.IsolatedStorage&lt;/a&gt;. Irrespective of how the data is pulled in, it is manipulated using Silverlight XML facilities. This is described in detail on &lt;a title="Working with XML Data in Silverlight" href="http://msdn2.microsoft.com/hi-in/library/cc188996(en-us,vs.95).aspx"&gt;Working with XML Data in Silverlight&lt;/a&gt;.  &lt;li&gt;&lt;strong&gt;Deep Zoom&lt;/strong&gt;: In Feb 2007, Microsoft acquired a company called SeaDragon Software. Out of this acquisition came the technology called &lt;a href="http://labs.live.com/photosynth/"&gt;PhotoSynth&lt;/a&gt; and a technology called &lt;a href="http://labs.live.com/Seadragon.aspx"&gt;SeaDragon&lt;/a&gt;, which has now found its way in Silverlight 2 under the name Deep Zoom. The problem this technology solves can be understood as follows: More and more visual information is finding its way into images, (curtsey high definition cameras and the need to share detailed visual information digitally), however, our ability to access this information is limited by screen size (what are the dimensions of a 4 giga-pixel image?), bandwidth (how do you download a 4 GP image?) and graphics processing capability (how do you fit a 4 GP image into the memory of a GPU card?). Deep Zoom addresses this thru a simple solution: if you have a really large image, you are not going to see all the detail on your monitor, and will only see some of the detail by zooming into that. The &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=457B17B7-52BF-4BDA-87A3-FA8A4673F8BF&amp;amp;displaylang=en"&gt;Deep Zoom Composer tool&lt;/a&gt; converts a large image into a pyramid of small images of various sections of the image at different levels of zoom, with the whole image representation being at the top, followed by a set of images representing the next level of zoom, followed by a larger number of images for the next zoom level,  and so on. When you view the whole image, the first image at the top of the pyramid is rendered, and then as you keep moving around and zooming in an out, the apt image from the pyramid is pulled out and rendered. If you zoom in, the image would be pulled from the lower side of the composition pyramid and if you zoom out, the image would be from the higher side of the pyramid. Moving around at the same zoom level pulls out images from the same level in the pyramid. This means that at any given point, you are only downloading a small piece of data and rendering that. In SL2, you use Deep Zoom using the &lt;a href="http://msdn2.microsoft.com/en-us/library/cc190891(VS.95).aspx"&gt;MultiScaleImage&lt;/a&gt; control. At the Mix keynote, the Hard Rock Cafe guys showed how they have used Deep Zoom to provide access to their &lt;a href="http://memorabilia.hardrock.com/"&gt;memorabilia&lt;/a&gt; collection. &lt;li&gt;Media: Media is a key scenario in SL 2 much like it was in SL 1. The focus is to provide high quality, high performance and low TCO. The key capabilities are:  &lt;ul&gt; &lt;li&gt;Content Protection: Silverlight provide DRM support based on &lt;a href="http://www.microsoft.com/PlayReady/Default.mspx"&gt;Microsoft PlayReady&lt;/a&gt;, for both Windows and Mac. Note that PlayReady is general purpose DRM solution so it can be used not just for media but also other content types like images, animations and graphics. Plan is to also support Windows Media DRM - which is the media specific DRM solution used by Windows Media - on both these platforms. Also, one can use SSL to protect progressive media delivery from IIS 7. &lt;li&gt;Format and Codec Support: SL 2 supports WMA, WMAPro, WMV/VC-1 and MP3, with support for HD 720p video. VC-1 is considered to have twice the decode efficiency of H.264 which makes it more capable for lower-end PCs, besides having other advantages for broadcasters. A detailed comparison is available &lt;a href="http://en.wikipedia.org/wiki/Comparison_of_H.264_and_VC-1"&gt;here&lt;/a&gt;.  &lt;li&gt;Adaptive Streaming: An interesting announcement made at Mix was that under a partnership with Move networks, SL would be able to playback a &lt;a href="http://www.movenetworks.com/move-media-services/move-adaptive-streaming"&gt;Move Adaptive Stream&lt;/a&gt; using the VC-1 codecs. Note that Adaptive Streaming is not a part of Beta 1 and would be made available in a later beta. So my description of Adaptive Streaming here is generic and not SL specific. Adaptive Streaming is a media delivery innovation on top of HTTP where the video stream is chunked into smaller video segments, cached on the network, and re-packaged on the client. In traditional streaming, there are maybe a couple of streams (at different bit-rates) available and the user chooses one at startup time and then stays with that stream. This ignores the fact that in reality, bandwidth varies over a period of time and the decision on which bit rate to choose should be dynamically taken. Adaptive Streaming addresses this by providing several streams at different bit-rates, splitting each stream into tiny, multi-segment streamlets. The player - based on network and client-side characteristics - can decide at startup which stream to use, and as available bandwidth or available resources on the client machine change, ask for the next segment to come on a different bit-rate. This optimizes the bandwidth utilization and provides the best possible client side experience while also reducing server-side bandwidth cost. In order for adaptive streaming to work, the condition is that the media server should expose multiple streams, should chunk the streams, and information about the streams should be query-able. &lt;li&gt;Media Serving: While SL is a media consumption technology, I also want to talk here about the media serving platform. There are three choices available from Microsoft: &lt;ul&gt; &lt;li&gt;Windows Media Server: Windows Media Server 9 was considered by many customers and analysts as being the best in the market for live and streaming delivery, and with &lt;a href="http://www.microsoft.com/windows/windowsmedia/forpros/serve/prodinfo2008.aspx"&gt;Windows Media Services 2008&lt;/a&gt;, these capabilities have improved even further. WMS08  is twice as scalable as WMS 9, the server-core deployment reduces the footprint for dedicated server scenarios, and with a built-in cache/proxy, it is easier to configure it for edge scenarios.  &lt;li&gt;IIS 7 Media Pack: For those customers who do not want a full fledged media server, there is the &lt;a href="http://weblogs.asp.net/iis/archive/tags/Media/default.aspx"&gt;IIS 7.0 Media Pack&lt;/a&gt;. At Mix 08, a couple of interesting Media Pack features were described: &lt;a href="http://blogs.iis.net/chriskno/archive/2007/09/25/announcing-the-bit-rate-throttling-module-customer-technology-preview.aspx"&gt;Bit-Rate Throttling&lt;/a&gt; and &lt;a href="http://blogs.iis.net/vsood/archive/2008/02/28/iis-7-media-pack-web-playlists-is-live.aspx"&gt;Web-Playlists&lt;/a&gt;. In a progressive download scenario, BRT detects the encoded bit-rate of the file being downloaded and controls the speed at which the first few seconds are downloaded, followed by the speed for the rest of the file. This saves bandwidth and also preserves a fast startup experience. Web Playlists are meant to do two things: hide media assets and provide the ability to sequence media playback to provide pre- post- roll advertising and in-stream advertising. Both these features were the preserve of a media server, but now you get them with the web server. &lt;li&gt;Silverlight Streaming: &lt;a href="http://silverlight.live.com/"&gt;Silverlight Streaming&lt;/a&gt; is a media streaming solution hosted on the Microsoft platform. The idea is to host media + other client-side assets (including HTML/js files which can host SL) on the Microsoft infrastructure. This transfers the hosting + bandwidth cost to Microsoft instead of you having to pick it up. Currently the service is in a pre-beta stage and targeted at developers with a per user limit of 10 GB storage and 5 TB / month of aggregated bandwidth being offered for no charges.&lt;/ul&gt;&lt;/ul&gt; &lt;li&gt;Mobile: A very exciting announcement made at Mix was that Microsoft would be building SL for Mobile devices as well. People were expecting it for a long time, ever since WPF/e - the former codename for Silverlight - was announced, however, what was unexpected was that SL Mobile would be available cross-platform, with support for Symbian as well. With this announcement, XAML is now available across three screens: PC, TV and Phone. (Confused about TV? Well, Media Center SDK also uses XAML). Now SL for Mobile devices is going to have a somewhat different roadmap: SL 1.0 for Mobile CTP is expected in Q2 2008, with the RTW in Q4. As SL 1 Mobile goes to RTW, you would be able to see the CTP for SL 2 Mobile, which would then RTW in Q2 2009. Or so says the slide deck from the &lt;a href="http://visitmix.com/blogs/2008Sessions/T12"&gt;session T12 at Mix&lt;/a&gt; by &lt;a href="http://silverlight.net/blogs/amitchopra/"&gt;Amit Chopra&lt;/a&gt; and &lt;a href="http://blogs.msdn.com/davidklinems/"&gt;David Kline&lt;/a&gt;.&lt;/ul&gt; &lt;p&gt;To build apps using Silverlight 2 Beta 1, you would need: &lt;a href="http://www.microsoft.com/silverlight/resources/installationfiles.aspx?v=2.0"&gt;Silverlight 2 Beta 1 runtime&lt;/a&gt;, &lt;a title="Microsoft Silverlight 2 Software Development Kit Beta 1" href="http://www.microsoft.com/downloads/details.aspx?FamilyId=4E03409A-77F3-413F-B108-1243C243C4FE&amp;amp;displaylang=en"&gt;Microsoft Silverlight 2 Software Development Kit Beta 1&lt;/a&gt;, &lt;a title="Microsoft Silverlight Tools Beta 1 for Visual Studio 2008" href="http://www.microsoft.com/downloads/details.aspx?FamilyId=E0BAE58E-9C0B-4090-A1DB-F134D9F095FD&amp;amp;displaylang=en"&gt;Microsoft Silverlight Tools Beta 1 for Visual Studio 2008&lt;/a&gt;, &lt;a title="Expression Blend 2.5 March 2008 Preview" href="http://www.microsoft.com/expression/products/download.aspx?key=blend2dot5"&gt;Expression Blend 2.5 March 2008 Preview&lt;/a&gt;. More resources and tools can be found on &lt;a title="http://www.microsoft.com/silverlight/resources/default.aspx" href="http://www.microsoft.com/silverlight/resources/default.aspx"&gt;http://www.microsoft.com/silverlight/resources/default.aspx&lt;/a&gt;. &lt;li&gt;&lt;strong&gt;&lt;u&gt;Expression Studio 2&lt;/u&gt;&lt;/strong&gt;: Microsoft also announced &lt;a href="http://www.microsoft.com/expression/products/download.aspx?key=studio2beta"&gt;Expression Studio 2 Beta 2&lt;/a&gt; with an expected release of H1, 2008. Note that Expression Studio 2 targets Silverlight 1. For Silverlight 2, support will be provided in future versions. There is a ton of new functionality available across the Expression 2 products, and you can find all that on the new community site - &lt;a title="http://expression.microsoft.com/" href="http://expression.microsoft.com/"&gt;http://expression.microsoft.com/&lt;/a&gt; - which was also announced at Mix. To build Silverlight applications, as a designer you would need: &lt;ul&gt; &lt;li&gt;&lt;a href="http://www.microsoft.com/expression/products/overview.aspx?key=web"&gt;Expression Web&lt;/a&gt;: For the HTML / CSS / JS work &lt;li&gt;&lt;a href="http://www.microsoft.com/expression/products/overview.aspx?key=design"&gt;Expression Design&lt;/a&gt;: For creating the visual elements &lt;li&gt;&lt;a href="http://www.microsoft.com/expression/products/overview.aspx?key=encoder"&gt;Expression Encoder&lt;/a&gt;: For creating the video assets &lt;li&gt;&lt;a href="http://www.microsoft.com/expression/products/overview.aspx?key=media"&gt;Expression Media&lt;/a&gt;: For managing various assets &lt;li&gt;&lt;a href="http://www.microsoft.com/expression/products/overview.aspx?key=blend"&gt;Expression Blend&lt;/a&gt;: For the XAML work. &lt;a href="http://www.microsoft.com/expression/products/download.aspx?key=blend2beta"&gt;Expression Blend 2&lt;/a&gt; can target SL 1 and WPF (Fx 3.5). For SL 2, you would need &lt;a href="http://www.microsoft.com/expression/products/download.aspx?key=blend2dot5"&gt;Expression Blend 2.5&lt;/a&gt; which is right now in the Preview stage.&lt;/ul&gt; &lt;li&gt;&lt;strong&gt;&lt;u&gt;SQL Server Data Services&lt;/u&gt;&lt;/strong&gt;: To me personally, the most interesting announcement at Mix 08 was that of &lt;a href="http://www.microsoft.com/sql/dataservices/default.mspx"&gt;SQL Server Data Services&lt;/a&gt;.  As &lt;a href="http://blogs.msdn.com/ssds/archive/2008/03/06/my-personal-take-why-i-think-ssds-is-a-big-deal.aspx"&gt;Soumitra Sengupta&lt;/a&gt; - architect on the SSDS team - was keen to point out, &lt;a href="http://blogs.msdn.com/ssds/archive/2008/03/07/it-is-simple-but-it-is-not-simpledb.aspx"&gt;SSDS is Simple, but it is not SimpleDB&lt;/a&gt;. Much the way SQL Server is available on a PC, on a server and on a mobile device, it is now also available as a service. This service runs on several commodity boxes hosting the same SQL Server technology that you and I use on a daily basis. Right now SSDS exposes a small subset of the capability of the on-premise SQL Server product, but this would change as the service matures. The vision is that customers would be able to store virtually unlimited data at on-demand scalability on SSDS under enterprise-ready Service Level Agreements on a pay-for-use model. The data can be synced with an on-premise SQL Server using &lt;a href="http://msdn2.microsoft.com/sync/"&gt;Microsoft Sync Framework&lt;/a&gt;, or consumed by an app using SOAP / REST interfaces. The idea is to have three types of SQL Server capabilities for customers: on-premise, hosted and as a service. Exchange Server already has the &lt;a href="http://www.microsoft.com/exchange/services/default.mspx"&gt;service offerings&lt;/a&gt;, and BizTalk Server is well on that journey with the &lt;a href="http://labs.biztalk.net/"&gt;BizTalk Services&lt;/a&gt; initiative. Note that this is different from &lt;a href="http://msdn2.microsoft.com/en-us/data/bb931106.aspx"&gt;ADO.net Data Services&lt;/a&gt; which has a similar name, but serves a different purpose. Nigel Ellis gave a &lt;a href="http://visitmix.com/blogs/2008Sessions/BT05/"&gt;talk on SSDS at Mix 08&lt;/a&gt;, and there is a &lt;a href="http://blogs.msdn.com/jcurrier/default.aspx"&gt;blog by Jeff Currier&lt;/a&gt; that explains how to use SSDS. There is also a channel 9 video of &lt;a href="http://channel9.msdn.com/ShowPost.aspx?PostID=388698"&gt;Dave Campbell talking about SSDS&lt;/a&gt;. The technology and its implications are very interesting and I will post more on this in detail later. To find out for yourself, &lt;a href="http://connect.microsoft.com/InvitationUse.aspx?ProgramID=2089&amp;amp;SiteID=547&amp;amp;InvitationID=SSDS-P7VT-X43V"&gt;register for the free beta&lt;/a&gt;. &lt;li&gt;&lt;strong&gt;&lt;u&gt;Partnerships&lt;/u&gt;&lt;/strong&gt;: Microsoft also announced a number of partnerships at Mix 08. The keys ones are:  &lt;ul&gt; &lt;li&gt;Nokia: The &lt;a href="http://www.nokia.com/A4136001?newsid=1197788"&gt;agreement with Nokia&lt;/a&gt; is to make SL Mobile available for &lt;a href="http://www.s60.com/"&gt;S60&lt;/a&gt; devices on Symbian, Series 40 and Nokia Internet tablets. Given that S60 has more than 50% of SmartPhone marketshare, this gives SL Mobile tremendous penetration. This also means that the gates are now open for other handset manufacturers to approach Microsoft to provide SL-enabled phones. However, the fact that SL Mobile is a royalty-free runtime, may not work for somebody like Apple who want to charge for runtime on the iPhone. &lt;li&gt;DoubleClick:  DoubleClick announced &lt;a href="http://www.doubleclick.com/products/instream/index.aspx"&gt;DoubleClick In-Stream&lt;/a&gt; - their SL2 based SDK for in-stream advertising. This would allow publishers to dynamically serve video ads from DoubleClick's DART platform into the SL 2 video players and get reporting and forecasting data. According to Ari Paparo, VP Advertiser Products, DoubleClick, who spoke about the partnership at Mix, the &lt;a href="http://www.doubleclick.com/insight/blog/archives/doubleclick-instream/index.html"&gt;SL 2 support is expected in Q2 2008&lt;/a&gt;. &lt;li&gt;Move Networks: I talked about Adaptive Streaming support in SL2. The partner with whom this capability would be going live would be &lt;a href="http://www.movenetworks.com/news-releases/move-networks-to-enter-into-strategic-relationship-with-microsoft"&gt;Move Networks&lt;/a&gt;. The nature of the partnership was not described, but I guess more details would be shared in the next few months.&lt;/ul&gt;&lt;/ol&gt; &lt;p&gt;So Mix 08 had some interesting announcements on all fronts, but most prominently on the client side with IE 8 and SL 2 betas getting released. Some of the long-term bets Microsoft is making - SL Mobile and SQL Server Data Services would have implications not just for consumer computing, but also for business computing. Ray Ozzie also hinted at some interesting stuff happening on the Live front during his keynote. Combine this with the &lt;a href="http://www.microsoft.com/soa/products/oslo.aspx"&gt;Oslo&lt;/a&gt; announcements a couple of months back, and you start seeing the Software+Services vision which Ozzie outlined in Mix 07 last year taking shape: On-Premise software with corresponding Service and Hosted offerings, with tight integration with x-plat client side technologies. All very exciting stuff ... what a time to be here in this industry!! &lt;p&gt;  &lt;p&gt;  &lt;div style="padding-right:0px;padding-left:0px;float:none;padding-bottom:0px;margin:0px;padding-top:0px;display:inline"&gt;del.icio.us Tags: &lt;a href="http://del.icio.us/popular/Mix 08" rel=tag&gt;Mix 08&lt;/a&gt;,&lt;a href="http://del.icio.us/popular/Silverlight 2" rel=tag&gt;Silverlight 2&lt;/a&gt;,&lt;a href="http://del.icio.us/popular/Windows Live" rel=tag&gt;Windows Live&lt;/a&gt;,&lt;a href="http://del.icio.us/popular/Silverlight Mobile" rel=tag&gt;Silverlight Mobile&lt;/a&gt;&lt;/div&gt; &lt;div style="padding-right:0px;padding-left:0px;float:none;padding-bottom:0px;margin:0px;padding-top:0px;display:inline"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Mix 08" rel=tag&gt;Mix 08&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Silverlight 2" rel=tag&gt;Silverlight 2&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Windows Live" rel=tag&gt;Windows Live&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Silverlight Mobile" rel=tag&gt;Silverlight Mobile&lt;/a&gt;&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-8222238350451482195&amp;page=RSS%3a+Microsoft's+Recent+Announcements+on+Web+Technologies&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=vineetgupta.spaces.live.com&amp;amp;GT1=vineetgupta"&gt;</description><category>Web</category><comments>http://vineetgupta.spaces.live.com/Blog/cns!8DE4BDC896BEE1AD!1260.entry#comment</comments><guid isPermaLink="true">http://vineetgupta.spaces.live.com/Blog/cns!8DE4BDC896BEE1AD!1260.entry</guid><pubDate>Sun, 23 Mar 2008 21:37:07 GMT</pubDate><slash:comments>3</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://vineetgupta.spaces.live.com/blog/cns!8DE4BDC896BEE1AD!1260/comments/feed.rss</wfw:commentRss><wfw:comment>http://vineetgupta.spaces.live.com/Blog/cns!8DE4BDC896BEE1AD!1260.entry#comment</wfw:comment><dcterms:modified>2008-03-23T21:37:07Z</dcterms:modified></item><item><title>On Passwords</title><link>http://vineetgupta.spaces.live.com/Blog/cns!8DE4BDC896BEE1AD!1167.entry</link><description>&lt;div&gt;At Microsoft India, we have been trying to raise  security awareness in developers by sharing best practices for quite some time now. Yet, the lack of security knowledge is astounding, even on basic issues like password verification. So when I see a post like &lt;a href="http://www.matasano.com/log/958/enough-with-the-rainbow-tables-what-you-need-to-know-about-secure-password-schemes/"&gt;this&lt;/a&gt; one, it really makes me feel better! Thomas Ptacek talks about salted hashes, techniques of password breaking and how to counter them in a very easily understandable way. If you are a developer and are not 100% sure of your password verification scheme, please do read the post. If you want to know more about passwords, especially on Windows, read &lt;a href="http://www.microsoft.com/technet/community/columns/secmgmt/sm1005.mspx"&gt;this&lt;/a&gt; excellent article by Jesper Johansson.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-8222238350451482195&amp;page=RSS%3a+On+Passwords&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=vineetgupta.spaces.live.com&amp;amp;GT1=vineetgupta"&gt;</description><category>Computer Security</category><comments>http://vineetgupta.spaces.live.com/Blog/cns!8DE4BDC896BEE1AD!1167.entry#comment</comments><guid isPermaLink="true">http://vineetgupta.spaces.live.com/Blog/cns!8DE4BDC896BEE1AD!1167.entry</guid><pubDate>Tue, 11 Sep 2007 04:23:22 GMT</pubDate><slash:comments>4</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://vineetgupta.spaces.live.com/blog/cns!8DE4BDC896BEE1AD!1167/comments/feed.rss</wfw:commentRss><wfw:comment>http://vineetgupta.spaces.live.com/Blog/cns!8DE4BDC896BEE1AD!1167.entry#comment</wfw:comment><dcterms:modified>2007-09-11T04:23:22Z</dcterms:modified></item><item><title>Do you know about OBA?</title><link>http://vineetgupta.spaces.live.com/Blog/cns!8DE4BDC896BEE1AD!1166.entry</link><description>&lt;p&gt;I've been away from the blogosphere for a almost three months now. June was spent planning and executing TechMela, Jul is the beginning of a new financial year at Microsoft and I was first taking a bit of break and then was heads down in FY08 planning. Since Aug beginning, I have been on the road, evangelizing &lt;a href="http://msdn2.microsoft.com/en-us/office/aa905528.aspx"&gt;Office Business Applications&lt;/a&gt; (OBA) - my new charge this year. 
&lt;p&gt;&lt;br&gt;What is an OBA? It is not really a new concept - the idea is to access backend line of business (LOB) applications like ERP, CRM, SCM, Core Banking / Insurance applications via the Office Platform. Microsoft has been urging its customers and partners to adopt this approach for a pretty long time. Four years ago when I was responsible for our E-Biz stack (BizTalk, SPS and CMS) and Office 2003 was released, I had led several projects involving InfoPath talking to a SPS Doc Lib in turn integrating with a backend app via BizTalk. So what has changed with Office 2007? Technology-wise, the changes are incremental, but business strategy-wise the focus on backend integration is very strong, and that whole strategy is coming together under the brand name - Office Business Applications. This is a long term play for Microsoft and you would see us providing more and more capabilities on this going forward. 
&lt;p&gt;&lt;br&gt;Now why is Microsoft so serious about this and why should you care? &lt;a href="http://blogs.msdn.com/javeds/"&gt;Javed Sikander&lt;/a&gt; provides a great coverage in his whitepaper - &lt;a href="http://msdn2.microsoft.com/en-us/architecture/aa479072.aspx"&gt;Building Office Business Applications: A New Breed of Business Applications Built on the 2007 Microsoft Office System&lt;/a&gt; and I would strongly urge you to read it to get the context on OBA. In brief:&lt;br&gt;- Companies spend a lot of time, effort and money to deploy backend LOB applications. Adoption of these applications however remains low because of user discomfort with the new (and often clunky) UI&lt;br&gt;- Even if the application is adopted by the users, it only fulfills the needs of task workers, knowledge workers however continue to do a lot of work outside these business apps which is mostly ad-hoc collaborative work involving spreadsheets, emails and word documents.&lt;br&gt;- This data remains locked in users' desktops and never captured by central IT, nor are the ad-hoc collaborations under the purview of central IT.&lt;br&gt;- Office Business Apps allow users to access backend apps via Office increasing user adoption and bringing the data locked in users' desktops and the collaborative processes back under Central IT. 
&lt;p&gt;&lt;br&gt;Obviously this is huge value for a customer - OBAs not only increase the return on the investment in the backend apps, but also allow IT to capture organizational intelligence. ISVs who make the backend applications also like the OBA approach because this increases the adoption of their products and that helps increase the revenue they make. Finally, system integrators love OBAs because they make money on services required to integrate office with the backend apps. And yes of course OBAs are strategic to Microsoft because they increase the value of Office to the customers. This is what you call a win-win.&lt;br&gt;  
&lt;p&gt;So which technologies are used to make OBAs? Top of the mind recall:&lt;br&gt;1) &lt;a href="http://msdn2.microsoft.com/office/aa905545"&gt;OpenXML&lt;/a&gt; allows embedding of LOB data in Office documents and allow server-side processing of Office docs which was cumbersome so far as it involved invoking the Office Apps on the server side which they are not really meant for&lt;br&gt;2) The &lt;a href="http://msdn2.microsoft.com/office/aa905530"&gt;Fluent UI&lt;/a&gt; allows creating custom Ribbon Tabs / Groups / Buttons and Custom Task Panes which can be used to provide contextual interfaces&lt;br&gt;3) &lt;a href="http://msdn2.microsoft.com/office/aa905434"&gt;InfoPath&lt;/a&gt; provides a forms interface which is available both as a standalone app as well as in the browser&lt;br&gt;4) WSS 3.0 and &lt;a href="http://msdn2.microsoft.com/office/aa905503"&gt;MOSS&lt;/a&gt; (Microsoft Office SharePoint Server) 2007 provide workflow capabilities as they host Workflow Foundation. The workflows can be created using &lt;a href="http://msdn2.microsoft.com/office/bb421303"&gt;SharePoint Designer&lt;/a&gt; as well as Visual Studio&lt;br&gt;5) &lt;a href="http://go.microsoft.com/?linkid=6369834"&gt;MOSS Search&lt;/a&gt; provides enterprise search across websites, fileshares, mail servers, business data and extensiblity mechanisms to index custom file formats (using IFilters) and custom content locations (using Protocol Handlers)&lt;br&gt;6) &lt;a href="http://go.microsoft.com/?linkid=6162384"&gt;Excel Services&lt;/a&gt; provide a server-side equivalent to Excel including a web interface and a web-services API&lt;br&gt;7) The &lt;a href="http://go.microsoft.com/?linkid=6162383"&gt;Business Data Catalog&lt;/a&gt; in MOSS is used to model applications inside MOSS and surface LOB data inside MOSS which can then be consumed in Search, Business Data Web Parts and custom applications&lt;br&gt;8) &lt;a href="http://go.microsoft.com/?linkid=6607193"&gt;Enterprise Content Management&lt;/a&gt; capabilities in MOSS&lt;br&gt;9) &lt;a href="http://go.microsoft.com/?linkid=6162382"&gt;MOSS &lt;/a&gt;itself provides a highly scalable server side composite apps platform which can be used in organizations of all sizes. 
&lt;p&gt;&lt;br&gt;What have we been doing about OBAs in India? A lot - we were fortunate to have Javed Sikander visiting India in Aug and while he was here, we did a couple of Architect Roundtables, met several large partners all of whom are very excited about OBAs for the reasons I outlined above and spoke with Press to help raise awareness on OBAs. We also did a &lt;a href="http://www.microsoft.com/india/webcasts/ondemand.aspx"&gt;webcast series on OBAs &lt;/a&gt;and conducted a couple of workshops. Now in Sep, we are going &lt;a href="http://msdn2.microsoft.com/hi-in/bb735929.aspx"&gt;on the road&lt;/a&gt; once again talking about Enterprise apps and Office Business Apps. In the coming months, we would be conducitng a number of sessions and posting a whole lot of content on OBAs. Stay tuned!&lt;br&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-8222238350451482195&amp;page=RSS%3a+Do+you+know+about+OBA%3f&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=vineetgupta.spaces.live.com&amp;amp;GT1=vineetgupta"&gt;</description><category>OBA</category><comments>http://vineetgupta.spaces.live.com/Blog/cns!8DE4BDC896BEE1AD!1166.entry#comment</comments><guid isPermaLink="true">http://vineetgupta.spaces.live.com/Blog/cns!8DE4BDC896BEE1AD!1166.entry</guid><pubDate>Sun, 09 Sep 2007 08:42:52 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://vineetgupta.spaces.live.com/blog/cns!8DE4BDC896BEE1AD!1166/comments/feed.rss</wfw:commentRss><wfw:comment>http://vineetgupta.spaces.live.com/Blog/cns!8DE4BDC896BEE1AD!1166.entry#comment</wfw:comment><dcterms:modified>2007-09-09T08:49:10Z</dcterms:modified></item><item><title>TechMela - Why One City?</title><link>http://vineetgupta.spaces.live.com/Blog/cns!8DE4BDC896BEE1AD!1138.entry</link><description>&lt;div style="font-size:medium;font-family:Calibri, Tahoma"&gt;
&lt;p&gt;A lot of people have been asking me on mail as well as on this blog why we are doing TechMela in just one city when traditionally we have done TechEd around the same timeframe in multiple cities. Well, here are the reasons:
&lt;p&gt;1) We wanted to do a much bigger event this time by covering a much larger number of technology areas by combing content from TechEd, Mix, MEDC and ITPC: 
&lt;p&gt;a) The number of sessions we are doing this year is around 150, more than twice the number we have done usually. BTW, this does not include HOLs. 
&lt;p&gt;b) The number of tracks we have this year is 21, four times as much the number of tracks we usually do 
&lt;p&gt;c) The number of speakers we have is around 50; again more than twice the number we get usually. A big percentage of the speakers are coming from the product groups. 
&lt;p&gt;2) One of the consistent pieces of feedback has been around the need for our developers and IT Pros to hear directly from the Product teams in US and the the rest-of-the-world. This interaction is immensely helpful 
&lt;p&gt;a) to the Redmond teams, as they take back valuable input from our audience and that translates into better product 
&lt;p&gt;b) for the participants because they get a view from the guys who actually build the product and their deep insight into how the technology landscape is evolving 
&lt;p&gt;3) Its tough to maintain the same quality of experience when the venues change and the facilities don’t keep pace with the demands of our marketplace. To meet the diverse needs of the audience we need atleast 7 tracks (each day) and we need to have atleast 200 – 300 person capacity in each track. The hard part of the issue is that we don’t have that infrastructure in India!! Heard about public infrastructure lagging behind….well looks like that’s true for convention hall infra too!! Its improving but not fast enough. 
&lt;p&gt;There were a couple of other points I wanted to address:
&lt;p&gt;1) Why Mumbai, why not Bangalore?&lt;br&gt;There were two reasons for choosing Mumbai: 
&lt;p&gt;• Venue: The scale at which we are doing the event this year was not possible at any venue in Bangalore. The only possible venues were either in Mumbai or Hyderabad. After considering connectivity options on domestic and international flight circuits, Mumbai won. 
&lt;p&gt;• No. of events: Almost all developer events, by Microsoft and by other companies, end up happening in Bangalore. This results in what our marketing team likes to call “audience fatigue” – an allusion to the fact that since the target audience is same, people get sick of getting initiations to events and are not able to take out time for “yet another event” 
&lt;p&gt;2) What about other countries? Don’t they also do TechEd in multiple cities?&lt;br&gt;India was unique in doing the events across so many cities. If you look at TechEd US, that happens in one city (this year in Orlando), the same with TechEd Europe (Barcelona), and most other countries. For details, check out &lt;a href="http://www.microsoft.com/events/teched2007/worldwide.mspx"&gt;http://www.microsoft.com/events/teched2007/worldwide.mspx&lt;/a&gt;. I do realize that by doing this in one city, there will be people in some cities who would be constrained in their travel, and would not be able to make it. The way we seek to address this is by rotating the cities where we do this event every year going forward. 
&lt;p&gt;So if you are not able to make it to Mumbai on the D-Day, what are your options? Well, frankly I do not know today. We do want to take some of the content from the event to other parts of the country, but as of now there are no plans for it. So your best bet would be to take out some time, get your company to invest some money in your skills and come over to &lt;a href="http://www.techmela.com/"&gt;TechMela&lt;/a&gt;. One thing that we can promise to you is that we will make this worth your time and money! &lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-8222238350451482195&amp;page=RSS%3a+TechMela+-+Why+One+City%3f&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=vineetgupta.spaces.live.com&amp;amp;GT1=vineetgupta"&gt;</description><category>TechMela</category><comments>http://vineetgupta.spaces.live.com/Blog/cns!8DE4BDC896BEE1AD!1138.entry#comment</comments><guid isPermaLink="true">http://vineetgupta.spaces.live.com/Blog/cns!8DE4BDC896BEE1AD!1138.entry</guid><pubDate>Tue, 22 May 2007 06:15:00 GMT</pubDate><slash:comments>3</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://vineetgupta.spaces.live.com/blog/cns!8DE4BDC896BEE1AD!1138/comments/feed.rss</wfw:commentRss><wfw:comment>http://vineetgupta.spaces.live.com/Blog/cns!8DE4BDC896BEE1AD!1138.entry#comment</wfw:comment><dcterms:modified>2007-05-22T06:15:00Z</dcterms:modified></item><item><title>TechEd + Mix + MEDC + ITPC == TechMela</title><link>http://vineetgupta.spaces.live.com/Blog/cns!8DE4BDC896BEE1AD!1130.entry</link><description>&lt;div&gt;
&lt;p&gt;Today is May 14, 2007, and exactly a month later, Microsoft India would be kicking off its biggest event ever for Architects, Developers, IT Pros and Designers – &lt;a href="http://www.techmela.com/"&gt;TechMela&lt;/a&gt;. TechMela 2007 takes the content from four major events Microsoft India has been doing – TechEd, MEDC, IndiMix and ITPC – and adds even more content to tell for the first time the full Microsoft story of Software, Services and Experiences. 
&lt;p&gt;Over three days and across seven streams we are going to conduct almost 150 technical sessions, over 15 chalk talks and over 50 self-paced HOLs. We are getting speakers from all parts of the world and all parts of Microsoft – experts who have developed the technologies, technicians who are working with some of our biggest customers to adopt the technologies and consultants who are helping our partners build products and solutions on the technologies. It’s a galaxy of technology super stars all under one roof coming together at such a large scale for the first time. And to top it all, we expect over 3000 technical professionals from all over the country to join us at Mumbai where the event will be taking place. 
&lt;p&gt;As we begin the countdown to TechMela, thru this blog I will try and take you behind the scenes into the motivations behind doing some of the key sessions and the background to the technologies we will be covering in these sessions. I will also try and provide links and references to other material which you will find useful to read thru before attending the sessions. Stay tuned in and you will discover even before you get to TechMela what all would be covered there. Of course to experience the real thing, you would want to join us at &lt;a href="http://www.techmela.com/"&gt;TechMela&lt;/a&gt;!! 
&lt;p&gt; &lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-8222238350451482195&amp;page=RSS%3a+TechEd+%2b+Mix+%2b+MEDC+%2b+ITPC+%3d%3d+TechMela&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=vineetgupta.spaces.live.com&amp;amp;GT1=vineetgupta"&gt;</description><category>TechMela</category><comments>http://vineetgupta.spaces.live.com/Blog/cns!8DE4BDC896BEE1AD!1130.entry#comment</comments><guid isPermaLink="true">http://vineetgupta.spaces.live.com/Blog/cns!8DE4BDC896BEE1AD!1130.entry</guid><pubDate>Mon, 14 May 2007 07:46:45 GMT</pubDate><slash:comments>3</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://vineetgupta.spaces.live.com/blog/cns!8DE4BDC896BEE1AD!1130/comments/feed.rss</wfw:commentRss><wfw:comment>http://vineetgupta.spaces.live.com/Blog/cns!8DE4BDC896BEE1AD!1130.entry#comment</wfw:comment><dcterms:modified>2007-05-14T07:56:39Z</dcterms:modified></item><item><title>Key I/O Changes in Windows Vista</title><link>http://vineetgupta.spaces.live.com/Blog/cns!8DE4BDC896BEE1AD!1118.entry</link><description>&lt;p&gt;Updated on Mar 31 with Links, more background material and detail. 
&lt;p style="font-size:11pt;font-family:Calibri, sans-serif"&gt;  
&lt;p&gt;&lt;span style="font-size:11pt;font-family:'Calibri','sans-serif'"&gt;The most talked about improvement in Windows Vista seems to be Aero - the composition based desktop which people either seem to love or hate. This is followed by the UAC which again seems to enjoy a love-hate relationship. However, there is a lot of technology shipping in Windows Vista which anticipates long term changes in storage hardware and helps the operating system be more peformant in light of those changes. This article gives an overview of some of these enhancements; the goal here is not be exhaustive and talk about every improvement, but to provide insight into why these are so important and their long term impact on PC computing.&lt;/span&gt; 
&lt;p&gt; 
&lt;h1&gt;Background&lt;/h1&gt;
&lt;p&gt;&lt;span style="font-size:11pt;font-family:'Calibri','sans-serif'"&gt;Just to establish the vocabulary, and ensure that there is no ambiguity, I will define some terms here:&lt;/span&gt; &lt;span style="font-size:11pt;font-family:'Calibri','sans-serif'"&gt; &lt;/span&gt; 
&lt;p&gt;&lt;span style="font-size:11pt;font-family:'Calibri','sans-serif'"&gt;1)&lt;span style="font:7pt 'Times New Roman'"&gt;      &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-size:11pt;font-family:'Calibri','sans-serif'"&gt;Primary Storage&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size:11pt;font-family:'Calibri','sans-serif'"&gt; – This is connected to the CPU and is volatile. There are three kinds of primary storage:&lt;/span&gt; 
&lt;p&gt;&lt;span style="font-size:11pt;font-family:'Calibri','sans-serif'"&gt;a)&lt;span style="font:7pt 'Times New Roman'"&gt;      &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-size:11pt;font-family:'Calibri','sans-serif'"&gt;CPU Registers:&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size:11pt;font-family:'Calibri','sans-serif'"&gt; Internal to the CPU – this is the fastest storage&lt;/span&gt; 
&lt;p&gt;&lt;span style="font-size:11pt;font-family:'Calibri','sans-serif'"&gt;b)&lt;span style="font:7pt 'Times New Roman'"&gt;      &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-size:11pt;font-family:'Calibri','sans-serif'"&gt;Main Memory:&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size:11pt;font-family:'Calibri','sans-serif'"&gt; This contains the programs that are currently running and the data the programs are operating on. This is typically implemented as solid state volatile RAM connected to the CPU via a memory bus and a data bus.&lt;/span&gt; 
&lt;p&gt;&lt;span style="font-size:11pt;font-family:'Calibri','sans-serif'"&gt;c)&lt;span style="font:7pt 'Times New Roman'"&gt;       &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-size:11pt;font-family:'Calibri','sans-serif'"&gt;Cache Memory:&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size:11pt;font-family:'Calibri','sans-serif'"&gt; Modern CPUs are too fast for main memory so a cache is often used to prevent the CPU from waiting on main memory. This cache memory is quite small (cache size to RAM size ratio could be anywhere from 1:1 to 1:64 or even more), but is much faster than the main memory. Data is duplicated from Main memory into the Cache. Typically Cache memory is implemented as a hierarchy – primary cache (L1) being closer to the CPU and smaller, faster than the secondary caches (L2, L3)&lt;/span&gt; 
&lt;p&gt;&lt;span style="font-size:11pt;font-family:'Calibri','sans-serif'"&gt;So you can actually imagine the primary storage to be a hierarchy with the fastest storage being closest to the CPU (in fact there could be hierarchy even within the CPU registers) and storage getting slower and bigger as we move away from the CPU.&lt;/span&gt; &lt;span style="font-size:11pt;font-family:'Calibri','sans-serif'"&gt; &lt;/span&gt; 
&lt;p&gt;&lt;span style="font-size:11pt;font-family:'Calibri','sans-serif'"&gt;2)&lt;span style="font:7pt 'Times New Roman'"&gt;      &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-size:11pt;font-family:'Calibri','sans-serif'"&gt;Secondary Storage&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size:11pt;font-family:'Calibri','sans-serif'"&gt; – This is used for persisting data and is therefore non-volatile. Secondary storage is connected to the CPU using I/O channels. This is mostly implemented as magnetic disks with spinning platters or more recently using solid state drives using non volatile memory such as Flash.&lt;/span&gt; 
&lt;p&gt;&lt;span style="font-size:11pt;font-family:'Calibri','sans-serif'"&gt; &lt;/span&gt;&lt;span style="font-size:11pt;font-family:'Calibri','sans-serif'"&gt;The key trends in storage hardware are:&lt;/span&gt; 
&lt;p&gt;&lt;span style="font-size:11pt;font-family:'Calibri','sans-serif'"&gt;1)&lt;span style="font:7pt 'Times New Roman'"&gt;      &lt;/span&gt;Price of flash storage is dropping very fast, &lt;/span&gt;&lt;a href="http://www.fabtech.org/content/view/2436/2/"&gt;&lt;span style="font-size:11pt;font-family:'Calibri','sans-serif'"&gt;falling faster than expected&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:11pt;font-family:'Calibri','sans-serif'"&gt; at around 40% / annum. Compare this with an average of 32% for DRAM over the last 30 years or so.&lt;/span&gt; 
&lt;p&gt;&lt;span style="font-size:11pt;font-family:'Calibri','sans-serif'"&gt;2)&lt;span style="font:7pt 'Times New Roman'"&gt;      &lt;/span&gt;Magnetic disk drives storage is getting bigger and cheaper, but so is flash memory – in fact the trend is almost parallel. There is however more to understanding the size-price trends for both. I’d recommend reading &lt;a href="http://www.storagesearch.com/semico-art1.html"&gt;Flash Memory vs. HDD – Who Will Win&lt;/a&gt; for more detail. This article is dated, but has a comprehensive discussion.&lt;/span&gt; 
&lt;p&gt;&lt;span style="font-size:11pt;font-family:'Calibri','sans-serif'"&gt;3)&lt;span style="font:7pt 'Times New Roman'"&gt;      &lt;/span&gt;The disk has been the slowest component in the hardware stack over &lt;/span&gt;&lt;a href="http://www.tomshardware.com/2006/11/27/15-years-of-hard-drive-history/page7.html"&gt;&lt;span style="font-size:11pt;font-family:'Calibri','sans-serif'"&gt;the past 15 years&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:11pt;font-family:'Calibri','sans-serif'"&gt;, and it is &lt;a href="http://www.fujitsu.com/downloads/MAG/vol42-1/paper08.pdf"&gt;unlikely that disk RPM would increase beyond 20,000&lt;/a&gt;. So with the introduction of multi-core, the rate of change of CPU power will outpace rate of change of storage speed even more. &lt;/span&gt;
&lt;p&gt;&lt;span style="font-size:11pt;font-family:'Calibri','sans-serif'"&gt;What these changes mean is that the slowest component in the system – the disk drive - would get slower and slower with regard to the CPU, so a powerful CPU would need to keep waiting on I/O. This is obviously not acceptable and we have to find a way around this.  &lt;/span&gt;&lt;span style="font-size:11pt;font-family:'Calibri','sans-serif'"&gt;The solution is to move data from the slowest storage to the fastest storage in such a way that we can let the CPU work mostly on faster storage, and avoid going to the slower storage as far as possible. This is done at two levels: &lt;/span&gt;
&lt;p&gt;&lt;span style="font-size:11pt;font-family:'Calibri','sans-serif'"&gt;1)&lt;span style="font:7pt 'Times New Roman'"&gt;      &lt;/span&gt;At one level we try and move the data from the secondary storage into the primary storage in as optimum a way as possible.&lt;/span&gt; 
&lt;p&gt;&lt;span style="font-size:11pt;font-family:'Calibri','sans-serif'"&gt;2)&lt;span style="font:7pt 'Times New Roman'"&gt;      &lt;/span&gt;On the other level, we try and move data from the main memory into the CPU caches and the CPU registers.&lt;/span&gt; 
&lt;p&gt;&lt;span style="font-size:11pt;font-family:'Calibri','sans-serif'"&gt;&lt;/span&gt; 
&lt;p&gt;&lt;span style="font-size:11pt;font-family:'Calibri','sans-serif'"&gt;In this article we are going to focus on the optimization mechanisms to point 1), and specifically on moving the data from the disk into the RAM. All of these mechanisms are about buffering against disk I/O and using a faster, cheaper buffer for random I/O.&lt;/span&gt; 
&lt;p&gt;&lt;span style="font-size:11pt;font-family:'Calibri','sans-serif'"&gt; &lt;/span&gt; 
&lt;h1&gt;Demand Paging&lt;/h1&gt;
&lt;p&gt;&lt;span style="font-size:11pt;font-family:'Calibri','sans-serif'"&gt;There has always been this trade-off between RAM and disk – RAM is faster and expensive and volatile, and the disk is slower and cheaper and persistent. Traditionally, operating systems have been able to work out the trade off by a scheme called demand paging. The idea of demand paging comes with virtual memory, and is simple to understand – there is limited main memory, so the disk is used as an extended store, and the OS abstracts away the memory by giving each process an address space. Based on usage of the address space, the OS allocates memory from the combined disk + main memory store to the process. A page is a unit of allocation, and depending on when that part of memory was last used, the page could be in main memory or on the disk. So when an application needs to make use of data which is held in a page, if that page is not already in physical memory, it would be read off from the disk and loaded into main memory. This is called demand paging since the pages are loaded into the main memory on demand.&lt;/span&gt; 
&lt;p&gt;&lt;span style="font-size:11pt;font-family:'Calibri','sans-serif'"&gt; &lt;/span&gt; 
&lt;h1&gt;Pre-Fetch&lt;/h1&gt;
&lt;p&gt;&lt;span style="font-size:11pt;font-family:'Calibri','sans-serif'"&gt;The trouble with demand paging is that disk IO is terribly slow, so when the page is read from the disk instead of RAM, there is a huge performance hit. If this I/O cost could be reduced, performance would improve significantly. An interesting observation which can help here is that random IO is slower than sequential IO. Tests reveal that depending on disk and workload, sequential IO can be up to 30-100 times faster than random IO. So if the OS was to do more sequential IO than random IO for demand paging, performance would improve in a big way.  With this goal, starting from Windows XP, the OS started identifying patterns in application usage and would try and group together the files on the disk which would be used frequently.  This would convert a lot of random IO into sequential IO and make frequently used files and applications load faster. This feature in Windows XP was called Pre-Fetch.&lt;/span&gt; 
&lt;p&gt;&lt;span style="font-size:11pt;font-family:'Calibri','sans-serif'"&gt; &lt;/span&gt; 
&lt;h1&gt;Super-Fetch&lt;/h1&gt;
&lt;p&gt;&lt;span style="font-size:11pt;font-family:'Calibri','sans-serif'"&gt;While Pre-Fetch improves things by converting random I/O into sequential I/O, this can get even better if we were not to do any I/O at all. If the OS could somehow predict which pages would need to be read from the disk ahead of time and pre-load them into main memory, when the time comes to use them, there would be zero disk I/O cost.  This feature in Windows Vista is called SuperFetch – Vista speculatively loads code and data likely to be used by a user ahead of time from the disk into memory so that an application gets launched (or data is read by the application) “warm out of memory” instead of “cold out of disk”.&lt;/span&gt; 
&lt;p&gt;&lt;span style="font-size:11pt;font-family:'Calibri','sans-serif'"&gt;A simple example of this is the scenario where you have a couple of applications running (say Outlook and IE), and you go for lunch. While you are away, a background program (search indexer, defragmenter, anti-virus, etc.) runs, consumes a lot of memory and releases it. To get this program to run, the Virtual Memory Manager in Windows would have to evict the pages of your foreground apps to disk. So when you come back and start reusing your apps, you would find them sluggish. This is where SuperFetch comes in – once physical memory becomes available, it would ask the memory manager to reload the memory with the data that was recently paged to the disk. So when you start using the system with SuperFetch running, you would not have to wait for I/O – SuperFetch would have loaded the pages ahead of time.&lt;/span&gt; 
&lt;p&gt;&lt;span style="font-size:11pt;font-family:'Calibri','sans-serif'"&gt;Now given the fact that the size of disk drives is about 20 - 100 times the size of memory (I am writing this article on a 2 GB RAM / 60 GB HDD machine), SuperFetch needs to prioritize what data to pre-load, and what to leave behind on the disk, and also which activities are more important than others.  For this purpose, Vista ships with a set of heuristics that provide the prioritization, and once it starts getting used, Vista does a lot of data gathering and analysis so that it is able to recognize the user’s usage patterns and anticipate when you would need what data.  As the user keeps using her system, the data Vista gathers becomes more and more tuned to the usage and system performance improves. While the performance would improve for any scenario, some scenarios are going to benefit more than others.  The biggest impact of SuperFetch is seen today in application launching and resuming from hibernation / suspension.&lt;/span&gt; 
&lt;p&gt;&lt;span style="font-size:11pt;font-family:'Calibri','sans-serif'"&gt;So to summarize, SuperFetching is different from demand paging in the sense that the OS is not waiting for the demand to occur – it has been recognizing patterns in demand over a period of time, and now pages based on anticipated need rather than demand.  As the gap between disk IO and processing power increases even more, making the data available in memory ahead of time would become even more important going forward.&lt;/span&gt; 
&lt;p&gt;&lt;span style="font-size:11pt;font-family:'Calibri','sans-serif'"&gt; &lt;/span&gt; 
&lt;h1&gt;ReadyBoost&lt;/h1&gt;
&lt;p&gt;ReadyBoost tries to solve a simple problem: RAM is great for disk caching, but adding more memory to a system is both difficult and expensive.  So what ReadyBoost allows you to do is to use a fast flash-based device (USB Stick, SD cards, Compact Flash, etc.) as an extension of physical memory which can be used for disk caching.  This works because flash is faster than disk for random I/O (and most I/O is random), and Vista performs a check on a USB disk on insertion, and if it meets the perf criteria (2.5 MB/s for random 4K reads and 1.75 MB/s for random 512K/s writes) and the minimum space requirements (230 MB free space), will let a user use it as an extension of physical memory for disk caching.  ReadyBoost is therefore ideal as a supplementary cache for SuperFetch, and in fact was developed by the same team. 
&lt;p&gt;There are a number of optimizations used: 
&lt;p&gt;1)&lt;span style="font:7pt 'Times New Roman'"&gt;      &lt;/span&gt;Readyboost recognizes large sequential reads and lets it be serviced by the hard disk instead of the flash since hard disks are faster at sequential I/O 
&lt;p&gt;2)&lt;span style="font:7pt 'Times New Roman'"&gt;      &lt;/span&gt;The data is compressed by a factor of ½ before storing it to derive the maximum out of the storage 
&lt;p&gt;3)&lt;span style="font:7pt 'Times New Roman'"&gt;      &lt;/span&gt;The data is encrypted with a randomly per boot generated key using AES 128 
&lt;p&gt;From a bigger picture perspective, as the prices of flash continue to fall, we can expect that within 2007, PCs would start shipping with in-built fast-flash storages. (Intel &lt;a href="http://www.intel.com/pressroom/archive/releases/20070312corp.htm"&gt;recently announced&lt;/a&gt; a solid state drive product line aimed at embedded market and at motherboards in servers, PCs and notebooks) These storages would actually be much bigger and faster than the typical USB drive that you would plug into Vista today. The OS would recognize this as non-removable, non-volatile fast flash storage and would automatically use it for disk caching.  Since this storage would be non-removable, the encryption that happens today would not be required and would make the system even faster. 
&lt;p&gt;  
&lt;h1&gt;ReadyDrive&lt;/h1&gt;
&lt;p&gt;&lt;span style="font-size:11pt;font-family:'Calibri','sans-serif'"&gt;While ReadyBoost looks at the idea of Flash augmenting RAM in terms of increasing its size so that it can do disk caching, ReadyDrive is about Flash augmenting the magnetic disk by providing a solid state buffer.  It is a technology that ships with Vista that allows the OS to use new types of disks in the market which are called Hybrid Disks. These disks have an integrated non-volatile solid state flash memory (NVRAM) in addition to the standard rotating media. One could think of this as being a cache on the disk itself.  This cache buffers disk I/O and allows the disk to stay spun down for a longer time, thus improving perf as well as battery life.  The key areas which benefit from ReadyDrive are disk contention scenarios, booting, and resumption from hibernation. &lt;/span&gt;
&lt;p&gt;&lt;span style="font-size:11pt;font-family:'Calibri','sans-serif'"&gt;Ready-Drive controls the contents of the NV Cache and divides it into multiple parts. These are:&lt;/span&gt; 
&lt;p&gt;&lt;span style="font-size:11pt;font-family:'Calibri','sans-serif'"&gt;1)&lt;span style="font:7pt 'Times New Roman'"&gt;      &lt;/span&gt;Write Cache (32 MB): Buffers write requests to the disk, allowing the disk to stay spun down longer&lt;/span&gt; 
&lt;p&gt;&lt;span style="font-size:11pt;font-family:'Calibri','sans-serif'"&gt;2)&lt;span style="font:7pt 'Times New Roman'"&gt;      &lt;/span&gt;OEM-pinned data (1 MB+): Used by OEMs to pin key data for quickly launching preferred user experiences or &lt;a href="http://www.microsoft.com/whdc/system/platform/firmware/hotstart.mspx"&gt;Windows HotStart&lt;/a&gt; experiences&lt;/span&gt; 
&lt;p&gt;&lt;span style="font-size:11pt;font-family:'Calibri','sans-serif'"&gt;3)&lt;span style="font:7pt 'Times New Roman'"&gt;      &lt;/span&gt;SuperFetch Pinned Data (remainder): Used by SuperFetch&lt;/span&gt; 
&lt;p&gt;&lt;span style="font-size:11pt;font-family:'Calibri','sans-serif'"&gt;These drives are not far off - in fact, &lt;/span&gt;&lt;a href="http://www.informationweek.com/showArticle.jhtml?articleID=197800781"&gt;&lt;span style="font-size:11pt;font-family:'Calibri','sans-serif'"&gt;Samsung has recently released its Hybrid Drive to computer makers&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:11pt;font-family:'Calibri','sans-serif'"&gt;. With the falling prices of flash, it is obvious that over a period of time all disks will ship with a NVRAM cache and that the ratio of the cache to disk size would increase in the favor of the flash based cache.  ReadyDrive will therefore become more and more important going forward. In fact in near future, one can expect solid state disks to become the norm as compared to spinning disks – this trend has been there for a pretty long time, and is &lt;a href="http://www.storagesearch.com/chartingtheriseofssds.html"&gt;now coming of age&lt;/a&gt;.&lt;/span&gt; 
&lt;p&gt;&lt;span style="font-size:11pt;font-family:'Calibri','sans-serif'"&gt; &lt;/span&gt; 
&lt;h1&gt;I/O Prioritization&lt;/h1&gt;
&lt;p&gt;One can buffer against disk access using all the mechanisms discussed above, but at the end of the day, disk I/O still needs to happen.  From an overall system perspective, there is therefore a big need to be optimum about the I/O itself.  The I/O Prioritization changes in Windows Vista seek to do exactly this. 
&lt;p&gt;Today the priority of an IO request from a background process is treated at par with the one from an application which may be in the foreground. If we consider applications like disk defragmenters and anti-malware agents, which do a lot of I/O requests as compared to a typical foreground application like Microsoft Word, this treatment at par can slow down the foreground applications considerably. So in Windows Vista, an application which would mostly run in the background can choose to specify that its I/O request should be given a low priority. This is done by calling SetPriorityClass and SetThreadPriority and specifying background mode. 
&lt;p&gt;What this does is to embed the low priority setting in the flags field of each I/O request packet (IRP) originating from that process, and this can be read by a driver by calling IoGetPriorityHint. This ensures that I/O – a costly operation – gets prioritized correctly across the system. I/O intensive background tasks in Vista – Windows Defender, Indexer, and Defragmenter – are already using this feature, and more ISVs who develop such applications are expected to start using I/O prioritization. 
&lt;p&gt;  
&lt;h1&gt;Better Together&lt;/h1&gt;
&lt;p&gt;It is important to note that Super Fetch, ReadyBoost and ReadyDrive compliment each other.  ReadyBoost and ReadyDrive provide with faster caches.  This provides SuperFetch with a bigger canvas to work with – now it can put some pages in RAM, some other in the ReadyBoost storage and some other in ReadyDrive. The fact that SuperFetch does a great job in pre-loading the main memory with code and data from disk gives an opportunity for the disk to stay spun down for a longer time which alongwith ReadyDrive improves battery life and disk ruggedness. 
&lt;p&gt;In terms of the entire I/O stack, SuperFetch is towards the top of the I/O stack – when your code tries to access a particular piece of data in the memory, the goal SuperFetch has is to anticipate that data and the page for that data ahead of time.  For this, it will try and pull that page out of the disk, and put it in ReadyDrive or ReadyBoost storage if they are available, or the RAM.  ReadyDrive and ReadyBoost on the other hand, are below the filesystem in the I/O stack – both of these mechanisms think in terms of disk sectors and do not think about data. 
&lt;p&gt;Finally, we need to think about the impact of these optimizations – SuperFetch itself cause extra I/O and extra CPU usage, so how does one do the trade-off? The solution lies with prioritization – SuperFetch uses low priority I/O and low priority threads, so the CPU and Disk I/O overhead is minimal and does not interfere with the actual jobs being performed. In fact, SuperFetch reads only a few pages per second at Very Low Priority.  There is certainly a memory overhead which is caused by having to maintain information about what all is happening in the system, but that overhead is minimal and more than makes up with all the advantages provided.
&lt;p&gt; &lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-8222238350451482195&amp;page=RSS%3a+Key+I%2fO+Changes+in+Windows+Vista&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=vineetgupta.spaces.live.com&amp;amp;GT1=vineetgupta"&gt;</description><category>Windows Fundamentals</category><comments>http://vineetgupta.spaces.live.com/Blog/cns!8DE4BDC896BEE1AD!1118.entry#comment</comments><guid isPermaLink="true">http://vineetgupta.spaces.live.com/Blog/cns!8DE4BDC896BEE1AD!1118.entry</guid><pubDate>Mon, 26 Feb 2007 14:37:06 GMT</pubDate><slash:comments>3</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://vineetgupta.spaces.live.com/blog/cns!8DE4BDC896BEE1AD!1118/comments/feed.rss</wfw:commentRss><wfw:comment>http://vineetgupta.spaces.live.com/Blog/cns!8DE4BDC896BEE1AD!1118.entry#comment</wfw:comment><dcterms:modified>2007-03-31T15:30:45Z</dcterms:modified></item><item><title>Object Allocation on the Rotor GC Heap</title><link>http://vineetgupta.spaces.live.com/Blog/cns!8DE4BDC896BEE1AD!1116.entry</link><description>&lt;div&gt;The one and only &lt;a href="http://www.wintoolzone.com/"&gt;Kumar Gaurav Khanna&lt;/a&gt; has just posted &lt;a href="http://www.wintoolzone.com/articles/How_Rotor_Managed_New_Works.aspx"&gt;this&lt;/a&gt; entry on &amp;quot;How the SSCLI (a.k.a Rotor) managed &lt;em&gt;new&lt;/em&gt; works.&amp;quot; I was completely unfamiliar with most of the information here. As Gaurav says towards the end, this article reveals how much you can learn about the CLR by going thru SSCLI.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Great read, highly recommended!!!&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-8222238350451482195&amp;page=RSS%3a+Object+Allocation+on+the+Rotor+GC+Heap&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=vineetgupta.spaces.live.com&amp;amp;GT1=vineetgupta"&gt;</description><category>CLR</category><comments>http://vineetgupta.spaces.live.com/Blog/cns!8DE4BDC896BEE1AD!1116.entry#comment</comments><guid isPermaLink="true">http://vineetgupta.spaces.live.com/Blog/cns!8DE4BDC896BEE1AD!1116.entry</guid><pubDate>Mon, 12 Feb 2007 20:14:34 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogen