<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://blogs.msdn.com:443/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>MSDN Blogs</title><link>https://blogs.msdn.com:443/default.aspx</link><description>The Blogs of MSDN</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Tip #88: Did you know… To not stress your server, limit the number of concurrent requests</title><link>https://blogs.msdn.com:443/webdevelopertips/archive/2009/07/10/tip-88-did-you-know-to-not-stress-your-server-limit-the-number-of-concurrent-requests.aspx</link><pubDate>Sat, 11 Jul 2009 00:07:43 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9829189</guid><dc:creator>WebDevTools</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;The other day somebody ask me if there was a way to limit the amount of work that &lt;a href="http://learn.iis.net/page.aspx/640/using-site-analysis-to-crawl-a-web-site/"&gt;Site Analysis&lt;/a&gt; in &lt;a href="http://www.iis.net/extensions/SEOToolkit"&gt;IIS SEO Toolkit&lt;/a&gt; would cause to the server. This is interesting for a couple of reasons, &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;You might want to reduce the load that Site Analysis cause to your server at any given time &lt;/li&gt;    &lt;li&gt;You might have a Denial-of-service detection system such as our &lt;a href="http://www.iis.net/extensions/DynamicIPRestrictions"&gt;Dynamic IP Restrictions IIS module&lt;/a&gt; that will start failing requests based on number of requests in a certain amount of time &lt;/li&gt;    &lt;li&gt;Or If you like me have to go through a Proxy and it has a configured limit of number of requests per minute you are allowed to issue &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;In Beta 1 we do not support the Crawl-delay directive in the &lt;a href="http://en.wikipedia.org/wiki/Robots_Exclusion_Standard"&gt;Robots exclusion protocol&lt;/a&gt;; in future versions we will look at adding support this setting. The good news is that in Beta 1 we do have a configurable setting that can help you achieve this goals called &lt;strong&gt;Maximum Number of Concurrent Requests&lt;/strong&gt; that you can configure. &lt;/p&gt;  &lt;p&gt;To set it:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Go to the Site Analysis Reports page &lt;/li&gt;    &lt;li&gt;Select the option &amp;quot;Edit Feature Settings...&amp;quot; as show in the next image      &lt;br /&gt;&lt;a href="http://blogs.msdn.com/blogfiles/webdevelopertips/WindowsLiveWriter/Tip88DidyouknowTonotstressyourserverlimi_F0D5/image_4.png"&gt;&lt;img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="98" alt="image" src="http://blogs.msdn.com/blogfiles/webdevelopertips/WindowsLiveWriter/Tip88DidyouknowTonotstressyourserverlimi_F0D5/image_thumb_1.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;In the &amp;quot;Edit Feature Settings&amp;quot; dialog you will see the &lt;strong&gt;Maximum Number of Concurrent Requests &lt;/strong&gt;option that you can set to any value from 1 to 16. The default value is 8 which means at any given time we will issue 8 requests to the server.       &lt;br /&gt;&lt;a href="http://blogs.msdn.com/blogfiles/webdevelopertips/WindowsLiveWriter/Tip88DidyouknowTonotstressyourserverlimi_F0D5/image_2.png"&gt;&lt;img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="189" alt="image" src="http://blogs.msdn.com/blogfiles/webdevelopertips/WindowsLiveWriter/Tip88DidyouknowTonotstressyourserverlimi_F0D5/image_thumb.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/li&gt; &lt;/ol&gt;  Carlos Aguilar Mares, IIS Team  &lt;p&gt;&lt;i&gt;&lt;a href="http://blogs.msdn.com/carlosag/archive/2009/06/17/iis-seo-tip-do-not-stress-your-server-limit-the-number-of-concurrent-requests.aspx"&gt;View the original post&lt;/a&gt; &lt;/i&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;div class="wlWriterEditableSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:83d51f91-e3c2-460a-8d8c-d2b9f75a8249" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/IIS" rel="tag"&gt;IIS&lt;/a&gt;,&lt;a href="http://technorati.com/tags/SEO" rel="tag"&gt;SEO&lt;/a&gt;,&lt;a href="http://technorati.com/tags/tips+and+tricks" rel="tag"&gt;tips and tricks&lt;/a&gt;&lt;/div&gt;&lt;img src="https://blogs.msdn.com:443/aggbug.aspx?PostID=9829189" width="1" height="1"&gt;</description></item><item><title>Will you PROVISION already?!</title><link>https://blogs.msdn.com:443/steverac/archive/2009/07/11/will-you-provision-already.aspx</link><pubDate>Fri, 10 Jul 2009 23:51:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9829186</guid><dc:creator>steverac</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Have you tried your hand at vPRO yet?&amp;#160; If so, you know how cool it is.&amp;#160; f not, you should….and, just wait for ConfigMgr SP2.&amp;#160; Things get easier and better!&amp;#160; Two of the notable improvements are the ability to manage wireless systems and the ability to have control over auto-provisioning.&amp;#160; The later is a huge benefit.&amp;#160; With the SP1 version of vPRO the automatic provisioning will take place but it may be 24 hours before it is even attempted.&amp;#160; There really isn’t much control to speed things along – or is there?&amp;#160; Our handy trusty sendsched.vbs tool will do the trick!&amp;#160; Just like many other ConfigMgr client componens, the provisioning cycle has a schedule token we can ‘kick’ the client so that it asks for provisioning NOW!&amp;#160; The command line for running the tool locally is&lt;/p&gt;  &lt;p&gt;cscript sendsched.vbs {00000000-0000-0000-0000-000000000120}&lt;/p&gt;  &lt;p&gt;The tool can be used remotely tool with a slight modification of the command line to include the name of the remote system.&lt;/p&gt;&lt;img src="https://blogs.msdn.com:443/aggbug.aspx?PostID=9829186" width="1" height="1"&gt;</description><category domain="https://blogs.msdn.com:443/steverac/archive/tags/ConfigMgr+-+AMT/default.aspx">ConfigMgr - AMT</category></item><item><title>Parallel Computing at Imagine Cup 2009</title><link>https://blogs.msdn.com:443/pfxteam/archive/2009/07/10/9829175.aspx</link><pubDate>Fri, 10 Jul 2009 23:31:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9829175</guid><dc:creator>toub</dc:creator><slash:comments>0</slash:comments><description>&lt;P&gt;On Wednesday, Microsoft announced the Imagine Cup 2009 worldwide winners: &lt;BR&gt;&lt;A title=http://www.microsoft.com/presspass/press/2009/jul09/07-07ImagineCup2009WinnersPR.mspx href="http://www.microsoft.com/presspass/press/2009/jul09/07-07ImagineCup2009WinnersPR.mspx" mce_href="http://www.microsoft.com/presspass/press/2009/jul09/07-07ImagineCup2009WinnersPR.mspx"&gt;http://www.microsoft.com/presspass/press/2009/jul09/07-07ImagineCup2009WinnersPR.mspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Congratulations to Team Biollel that took first place in the Parallel Computing Award for their “&lt;I&gt;Parallel implementation of maximum likelihood method of phylogenetic tree construction for protein amino acid sequences using Task Parallel Library&lt;/I&gt;”!&lt;/P&gt;&lt;img src="https://blogs.msdn.com:443/aggbug.aspx?PostID=9829175" width="1" height="1"&gt;</description><category domain="https://blogs.msdn.com:443/pfxteam/archive/tags/Contests/default.aspx">Contests</category></item><item><title>That Was The Week That Was 7/6-7/10</title><link>https://blogs.msdn.com:443/xboxvoices/archive/2009/07/11/that-was-the-week-that-was-7-6-7-10.aspx</link><pubDate>Fri, 10 Jul 2009 23:28:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9829180</guid><dc:creator>GhostCatfish5</dc:creator><slash:comments>0</slash:comments><description>&amp;nbsp; 
&lt;UL&gt;
&lt;LI&gt;Through the weekend, the &lt;B&gt;Deal of the Week&lt;/B&gt; allows you to get the amazing action puzzle game &lt;EM&gt;N+&lt;/EM&gt; for only &lt;A class="" title="Deal of the Week" href="http://www.xbox.com/en-US/live/marketplace/dealoftheweek/" target=_blank mce_href="http://www.xbox.com/en-US/live/marketplace/dealoftheweek/"&gt;400 MS Points&lt;/A&gt;. It's one of the most addictive (and difficult!) games out there. (&lt;A href="http://www.xbox.com/en-US/live/marketplace/dealoftheweek/"&gt;http://www.xbox.com/en-US/live/marketplace/dealoftheweek/&lt;/A&gt;)&lt;/LI&gt;&lt;/UL&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;IMG title="1 vs 100" style="WIDTH: 338px; HEIGHT: 190px" height=190 alt="1 vs 100" src="http://www.xbox.com/NR/rdonlyres/A92841D6-1A4F-46A0-8EEE-70E5F7A594D6/0/ilm1vs10002.jpg" width=338 align=absMiddle mce_src="http://www.xbox.com/NR/rdonlyres/A92841D6-1A4F-46A0-8EEE-70E5F7A594D6/0/ilm1vs10002.jpg"&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;The &lt;EM&gt;1 vs 100 Live Beta&lt;/EM&gt; is getting cooler and cooler. If you haven't tried this innovative game yet, now's the time to do so. Prizes have been added to the &lt;A class="" title="Prizes in 1 vs 100" href="http://www.xbox.com/en-US/press/2009/0707-1vs100prizes.htm" target=_blank mce_href="http://www.xbox.com/en-US/press/2009/0707-1vs100prizes.htm"&gt;beta episodes&lt;/A&gt; and you could win an Xbox LIVE Arcade game and &lt;STRONG&gt;up to 10,000 MS Points&lt;/STRONG&gt;! &lt;EM&gt;1 vs 100&lt;/EM&gt; is exclusive, and free, to Xbox LIVE Gold members so go Gold to play.&lt;/LI&gt;
&lt;LI&gt;&lt;A class="" title="Halo 3: ODST Maps" href="http://www.xbox.com/en-US/press/2009/0707-ODSTMaps.htm" target=_blank mce_href="http://www.xbox.com/en-US/press/2009/0707-ODSTMaps.htm"&gt;New maps have been revealed&lt;/A&gt; for &lt;I&gt;Halo 3: ODST&lt;/I&gt; when it ships September 22.&lt;/LI&gt;
&lt;LI&gt;Our &lt;A class="" title="Gamer Spotlight" href="http://www.xbox.com/en-US/community/voices/trixie/gamerspotlight/2009/0708-LordKuragari.htm" target=_blank mce_href="http://www.xbox.com/en-US/community/voices/trixie/gamerspotlight/2009/0708-LordKuragari.htm"&gt;Gamer Spotlight&lt;/A&gt; shines on &lt;STRONG&gt;LordKuragari&lt;/STRONG&gt;, notable for having his face slapped by an irate parent.&lt;/LI&gt;
&lt;LI&gt;On July 19, you can play the &lt;STRONG&gt;Xbox Gamerchix&lt;/STRONG&gt; in &lt;I&gt;Halo 3&lt;/I&gt; in our &lt;A class="" title="Community Playdate: GamerchiX" href="http://www.xbox.com/en-US/community/calendar/playdate/2009/0719-gamerchix.htm" target=_blank mce_href="http://www.xbox.com/en-US/community/calendar/playdate/2009/0719-gamerchix.htm"&gt;Community Playdate&lt;/A&gt;. July 22 sees us &lt;A class="" title="GWF: Jessie James" href="http://www.xbox.com/en-US/community/calendar/gamewithfame/2009/0722-jessiejames.htm" target=_blank mce_href="http://www.xbox.com/en-US/community/calendar/gamewithfame/2009/0722-jessiejames.htm"&gt;Gaming with Fame&lt;/A&gt; in the persona of American songstress &lt;STRONG&gt;Jessie James&lt;/STRONG&gt;, as she plays NASCAR 09 with fans. And on a special Saturday event, July 25, you can &lt;A class="" title="Community Playdate: Xbox Staff" href="http://www.xbox.com/en-US/community/calendar/playdate/2009/0725-xboxstaff.htm" target=_blank mce_href="http://www.xbox.com/en-US/community/calendar/playdate/2009/0725-xboxstaff.htm"&gt;play members&lt;/A&gt; of the &lt;STRONG&gt;Xbox and Xbox.com staff&lt;/STRONG&gt; in &lt;I&gt;Castle Crashers&lt;/I&gt;! Come on out and play! Also, be sure to keep &lt;A class="" title="Community Playdate: GamerHusbands" href="http://www.xbox.com/en-US/community/calendar/playdate/2009/0816-gamerhusbands.htm" target=_blank mce_href="http://www.xbox.com/en-US/community/calendar/playdate/2009/0816-gamerhusbands.htm"&gt;August 16 open&lt;/A&gt;, because you can play the &lt;STRONG&gt;GamerHusbands&lt;/STRONG&gt; in &lt;I&gt;Call of Duty 4: Modern Warfare&lt;/I&gt; then.&lt;/LI&gt;
&lt;LI&gt;A few new &lt;STRONG&gt;game detail pages&lt;/STRONG&gt; went up on site including the much-awaited &lt;I&gt;&lt;A class="" title="Assassin's Creed II" href="http://www.xbox.com/en-US/games/a/assassinscreed2/" target=_blank mce_href="http://www.xbox.com/en-US/games/a/assassinscreed2/"&gt;Assassin's Creed II&lt;/A&gt;&lt;/I&gt;, and check out the highly rhythmic &lt;I&gt;&lt;A class="" title="Guitar Hero 5" href="http://www.xbox.com/en-US/games/g/guitarhero5/" target=_blank mce_href="http://www.xbox.com/en-US/games/g/guitarhero5/"&gt;Guitar Hero 5&lt;/A&gt;.&lt;/I&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;img src="https://blogs.msdn.com:443/aggbug.aspx?PostID=9829180" width="1" height="1"&gt;</description></item><item><title>LAgent: an agent framework in F# – part VII – An auction application</title><link>https://blogs.msdn.com:443/lucabol/archive/2009/07/10/lagent-an-agent-framework-in-f-part-vii-an-auction-application.aspx</link><pubDate>Fri, 10 Jul 2009 23:14:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9682539</guid><dc:creator>lucabol</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Here is an application that uses the framework we have been creating. It is an auction application and it is described in more detail &lt;a href="http://codebetter.com/blogs/matthew.podwysocki/archive/2009/05/20/f-actors-revisited.aspx"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Let’s go through it.&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="color: blue"&gt;type &lt;/span&gt;AuctionMessage =
  | Offer &lt;span style="color: blue"&gt;of &lt;/span&gt;int * AsyncAgent &lt;span style="color: green"&gt;// Make a bid
  &lt;/span&gt;| Inquire &lt;span style="color: blue"&gt;of &lt;/span&gt;AsyncAgent     &lt;span style="color: green"&gt;// Check the status
&lt;/span&gt;&lt;span style="color: blue"&gt;and &lt;/span&gt;AuctionReply =
  | StartBidding
  | Status &lt;span style="color: blue"&gt;of &lt;/span&gt;int * DateTime &lt;span style="color: green"&gt;// Asked sum and expiration
  &lt;/span&gt;| BestOffer                &lt;span style="color: green"&gt;// Ours is the best offer
  &lt;/span&gt;| BeatenOffer &lt;span style="color: blue"&gt;of &lt;/span&gt;int       &lt;span style="color: green"&gt;// Yours is beaten by another offer
  &lt;/span&gt;| AuctionConcluded &lt;span style="color: blue"&gt;of      &lt;/span&gt;&lt;span style="color: green"&gt;// Auction concluded
      &lt;/span&gt;AsyncAgent * AsyncAgent
  | AuctionFailed            &lt;span style="color: green"&gt;// Failed without any bids
  &lt;/span&gt;| AuctionOver              &lt;span style="color: green"&gt;// Bidding is closed
  
&lt;/span&gt;&lt;span style="color: blue"&gt;let &lt;/span&gt;timeToShutdown = 3000
&lt;span style="color: blue"&gt;let &lt;/span&gt;bidIncrement = 10 &lt;/pre&gt;

&lt;p&gt;This is the format of the messages that the clients can send and the action agent can reply to. F# is really good at this sort of thing. First, we need an auction agent:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;let &lt;/span&gt;auctionAgent seller minBid closing =
    &lt;span style="color: blue"&gt;let &lt;/span&gt;agent = spawnAgent (&lt;span style="color: blue"&gt;fun &lt;/span&gt;msg (isConcluded, maxBid, maxBidder) &lt;span style="color: blue"&gt;-&amp;gt;
                            match &lt;/span&gt;msg &lt;span style="color: blue"&gt;with
                            &lt;/span&gt;| Offer (_, client) &lt;span style="color: blue"&gt;when &lt;/span&gt;isConcluded &lt;span style="color: blue"&gt;-&amp;gt;
                                &lt;/span&gt;client &amp;lt;-- AuctionOver
                                (isConcluded, maxBid, maxBidder)
                            | Offer(bid, client) &lt;span style="color: blue"&gt;when &lt;/span&gt;not(isConcluded) &lt;span style="color: blue"&gt;-&amp;gt;
                                if &lt;/span&gt;bid &amp;gt;= maxBid + bidIncrement &lt;span style="color: blue"&gt;then
                                    if &lt;/span&gt;maxBid &amp;gt;= minBid &lt;span style="color: blue"&gt;then &lt;/span&gt;maxBidder &amp;lt;-- BeatenOffer bid                  
                                    client &amp;lt;-- BestOffer
                                    (isConcluded, bid, client)
                                &lt;span style="color: blue"&gt;else
                                    &lt;/span&gt;client &amp;lt;-- BeatenOffer maxBid
                                    (isConcluded, maxBid, maxBidder)
                            | Inquire client    &lt;span style="color: blue"&gt;-&amp;gt;
                                &lt;/span&gt;client &amp;lt;-- Status(maxBid, closing)
                                (isConcluded, maxBid, maxBidder))
                            (&lt;span style="color: blue"&gt;false&lt;/span&gt;, (minBid - bidIncrement), spawnWorker (&lt;span style="color: blue"&gt;fun &lt;/span&gt;_ &lt;span style="color: blue"&gt;-&amp;gt; &lt;/span&gt;()))                             &lt;/pre&gt;

&lt;p&gt;Notice that, if the action is concluded, the agent replies to offers by sending an &lt;em&gt;AuctionOver&lt;/em&gt; message. If the auction is still open, then, in case the bid is higher than the max, it sets a new max and notify the two parties involved; otherwise it notifies the bidder that the offer wasn’t successful. Also you can ask for the status of the auction.&lt;/p&gt;

&lt;p&gt;This is what the code above says. Maybe the code is simpler than words. Anyhow, we need to treat the case where no message is received for some amount of time.&lt;/p&gt;

&lt;pre class="code"&gt;agent &amp;lt;-- SetTimeoutHandler
            (closing - DateTime.Now).Milliseconds
            (&lt;span style="color: blue"&gt;fun &lt;/span&gt;(isConcluded: bool, maxBid, maxBidder) &lt;span style="color: blue"&gt;-&amp;gt;
                if &lt;/span&gt;maxBid &amp;gt;= minBid &lt;span style="color: blue"&gt;then
                  let &lt;/span&gt;reply = AuctionConcluded(seller, maxBidder)
                  maxBidder &amp;lt;-- reply
                  seller &amp;lt;-- reply
                &lt;span style="color: blue"&gt;else &lt;/span&gt;seller &amp;lt;-- AuctionFailed
                agent &amp;lt;-- SetTimeoutHandler
                    timeToShutdown
                    (&lt;span style="color: blue"&gt;fun &lt;/span&gt;(_:bool, _:int,_:AsyncAgent) &lt;span style="color: blue"&gt;-&amp;gt; &lt;/span&gt;StopProcessing)
                ContinueProcessing (&lt;span style="color: blue"&gt;true&lt;/span&gt;, maxBid, maxBidder))   
agent            &lt;/pre&gt;

&lt;p&gt;We start by waiting for the amount of time to the closing of the auction. If we get no messages, then two things might happen: we have an offer that is more than the minimum or we don’t. If we do, we tell everyone that it’s finished. Otherwise, we tell the seller that its item wasn’t successful.&amp;#160; In any case, we prepare the agent to shutdown by setting its next timeout to be &lt;em&gt;timeoutToShutdown&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;It is interesting that we set the timeout handler inside the timeout handler. This is not a problem because of the nature of message processing (aka it processes one message at the time).&lt;/p&gt;

&lt;p&gt;We then need a bunch of of symbols …&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;module &lt;/span&gt;Auction =
  &lt;span style="color: blue"&gt;let &lt;/span&gt;random = &lt;span style="color: blue"&gt;new &lt;/span&gt;Random()
  
  &lt;span style="color: blue"&gt;let &lt;/span&gt;minBid = 100
  &lt;span style="color: blue"&gt;let &lt;/span&gt;closing = DateTime.Now.AddMilliseconds 10000.
  
  &lt;span style="color: blue"&gt;let &lt;/span&gt;seller = spawnWorker (&lt;span style="color: blue"&gt;fun &lt;/span&gt;(msg:AuctionReply) &lt;span style="color: blue"&gt;-&amp;gt; &lt;/span&gt;())
  &lt;span style="color: blue"&gt;let &lt;/span&gt;auction = auctionAgent seller minBid closing&lt;/pre&gt;

&lt;p&gt;Not a very smart seller we have here … Next up is our definition of a client.&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;let rec &lt;/span&gt;c = spawnAgent (
                &lt;span style="color: blue"&gt;fun &lt;/span&gt;msg (max, current) &lt;span style="color: blue"&gt;-&amp;gt;
                    let &lt;/span&gt;processBid (aMax, aCurrent) =
                        &lt;span style="color: blue"&gt;if &lt;/span&gt;aMax &amp;gt;= top &lt;span style="color: blue"&gt;then
                            &lt;/span&gt;log &lt;span style="color: maroon"&gt;&amp;quot;too high for me&amp;quot;
                            &lt;/span&gt;(aMax, aCurrent)
                        &lt;span style="color: blue"&gt;elif &lt;/span&gt;aCurrent &amp;lt; aMax &lt;span style="color: blue"&gt;then
                              let &lt;/span&gt;aCurrent = aMax + increment
                              Thread.Sleep (1 + random.Next 1000)
                              auction &amp;lt;-- Offer(aCurrent, c)
                              (aMax, aCurrent)
                        &lt;span style="color: blue"&gt;else &lt;/span&gt;(aMax, aCurrent)                       
                    &lt;span style="color: blue"&gt;match &lt;/span&gt;msg &lt;span style="color: blue"&gt;with
                    &lt;/span&gt;| StartBidding      &lt;span style="color: blue"&gt;-&amp;gt;
                        &lt;/span&gt;auction &amp;lt;-- Inquire c
                        (max, current)
                    | Status(maxBid,_)  &lt;span style="color: blue"&gt;-&amp;gt;
                        &lt;/span&gt;log &amp;lt;| sprintf &lt;span style="color: maroon"&gt;&amp;quot;status(%d)&amp;quot; &lt;/span&gt;maxBid
                        &lt;span style="color: blue"&gt;let &lt;/span&gt;s = processBid (maxBid, current)
                        c &amp;lt;-- SetTimeoutHandler timeToShutdown (&lt;span style="color: blue"&gt;fun &lt;/span&gt;_ &lt;span style="color: blue"&gt;-&amp;gt; &lt;/span&gt;StopProcessing) 
                        s
                    | BestOffer &lt;span style="color: blue"&gt;-&amp;gt;
                        &lt;/span&gt;log &amp;lt;| sprintf &lt;span style="color: maroon"&gt;&amp;quot;bestOffer(%d)&amp;quot; &lt;/span&gt;current
                        processBid(max, current)
                    | BeatenOffer maxBid &lt;span style="color: blue"&gt;-&amp;gt;
                        &lt;/span&gt;log &amp;lt;| sprintf &lt;span style="color: maroon"&gt;&amp;quot;beatenOffer(%d)&amp;quot; &lt;/span&gt;maxBid
                        processBid(maxBid, current)
                    | AuctionConcluded(seller, maxBidder) &lt;span style="color: blue"&gt;-&amp;gt;
                        &lt;/span&gt;log &lt;span style="color: maroon"&gt;&amp;quot;auctionConcluded&amp;quot;
                        &lt;/span&gt;c &amp;lt;-- Stop
                        (max, current)
                    | AuctionOver &lt;span style="color: blue"&gt;-&amp;gt;
                        &lt;/span&gt;log &lt;span style="color: maroon"&gt;&amp;quot;auctionOver&amp;quot;
                        &lt;/span&gt;c &amp;lt;-- Stop
                        (max, current))
                 (0,0)
c&lt;/pre&gt;

&lt;p&gt;Something that I like about agents is the fact that you need to understand just small snippets of code at the time. For example, you can read the processing for BestOffer and figure out if it makes sense.&amp;#160; I have an easy time personalizing them as in : “Ok, the guy just got a notification that there has been a better offer, what is he going to do next?”.&lt;/p&gt;

&lt;p&gt;The code should be self explanatory for the most part. In essence, if you can offer more, do it otherwise wait for the auction to end. I’m not even sure the processing is completely right. I confess I’m just trying to do the same as Matthews code from the link above.&lt;/p&gt;

&lt;p&gt;We can then start up the whole thing and enjoy the cool output.&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;open &lt;/span&gt;Auction

(client 1 20 200) &amp;lt;-- StartBidding
(client 2 10 300) &amp;lt;-- StartBidding
(client 3 30 150) &amp;lt;-- StartBidding
Console.ReadLine() |&amp;gt; ignore  &lt;/pre&gt;

&lt;p&gt;Now for the nasty part. Implementing the framework.&lt;/p&gt;&lt;img src="https://blogs.msdn.com:443/aggbug.aspx?PostID=9682539" width="1" height="1"&gt;</description><category domain="https://blogs.msdn.com:443/lucabol/archive/tags/F_2300_/default.aspx">F#</category></item><item><title>Interested in parallel computing?  We’re hiring!</title><link>https://blogs.msdn.com:443/pfxteam/archive/2009/07/10/9829160.aspx</link><pubDate>Fri, 10 Jul 2009 23:12:49 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9829160</guid><dc:creator>toub</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;If you're reading this post, you most likely have an interest in parallel or distributed computing, writing concurrent software, and the like.&amp;#160; Take that interest a step further, and help us make the manycore era a successful reality by coming to work on the Parallel Computing Platform team at Microsoft.&lt;/p&gt;  &lt;p&gt;We currently have several positions available:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://members.microsoft.com/careers/search/details.aspx?JobID=67CEBBEF-CAE9-48D3-BF20-64EC212B91A0"&gt;Program Manager&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://members.microsoft.com/careers/search/details.aspx?JobID=64E081DF-946A-4BB7-997A-FB5E14B0B6F2"&gt;Group Program Manager&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://members.microsoft.com/careers/search/details.aspx?JobID=548C0D44-357A-46C2-9CC8-6071EACB59DE"&gt;Software Development Engineer in Test&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://members.microsoft.com/careers/search/details.aspx?JobID=2654FDF1-255E-4A66-AB99-5144D17445CE"&gt;Software Development Engineer&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;If you're interested in any of these, please submit your resume through the &amp;quot;Submit Resume&amp;quot; link on the relevant page. We look forward to receiving it!&lt;/p&gt;&lt;img src="https://blogs.msdn.com:443/aggbug.aspx?PostID=9829160" width="1" height="1"&gt;</description><category domain="https://blogs.msdn.com:443/pfxteam/archive/tags/Jobs/default.aspx">Jobs</category></item><item><title>Very Funny – Trailer for Office 2010 – The Movie</title><link>https://blogs.msdn.com:443/nickmalik/archive/2009/07/10/very-funny-trailer-for-office-2010-the-movie.aspx</link><pubDate>Fri, 10 Jul 2009 23:09:29 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9829159</guid><dc:creator>NickMalik</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Even non-geeks will get a huge kick out of this, and I’m betting that most of the folks who follow my blog will find it as funny as I did… Word up.&amp;#160; &lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:fcea72cc-f324-4f42-b212-0e7111a52df1" class="wlWriterEditableSmartContent"&gt;&lt;div id="56144ba9-d2ee-49bd-ba49-6f329af1abaa" style="margin: 0px; padding: 0px; display: inline;"&gt;&lt;div&gt;&lt;a href="http://www.youtube.com/watch?v=VUawhjxLS2I&amp;amp;hl=en&amp;amp;fs=1&amp;amp;rel=0&amp;amp;color1=0x5d1719&amp;amp;color2=0xcd311b&amp;amp;border=1" target="_new"&gt;&lt;img src="http://blogs.msdn.com/blogfiles/nickmalik/WindowsLiveWriter/VeryFunnyTrailerforOffice2010TheMovie_E333/video90aa969c4c7e.jpg" style="border-style: none" galleryimg="no" onload="var downlevelDiv = document.getElementById('56144ba9-d2ee-49bd-ba49-6f329af1abaa'); downlevelDiv.innerHTML = &amp;quot;&amp;lt;div&amp;gt;&amp;lt;object width=\&amp;quot;425\&amp;quot; height=\&amp;quot;355\&amp;quot;&amp;gt;&amp;lt;param name=\&amp;quot;movie\&amp;quot; value=\&amp;quot;http://www.youtube.com/v/VUawhjxLS2I&amp;amp;hl=en&amp;amp;fs=1&amp;amp;rel=0&amp;amp;color1=0x5d1719&amp;amp;color2=0xcd311b&amp;amp;border=1&amp;amp;hl=en\&amp;quot;&amp;gt;&amp;lt;\/param&amp;gt;&amp;lt;embed src=\&amp;quot;http://www.youtube.com/v/VUawhjxLS2I&amp;amp;hl=en&amp;amp;fs=1&amp;amp;rel=0&amp;amp;color1=0x5d1719&amp;amp;color2=0xcd311b&amp;amp;border=1&amp;amp;hl=en\&amp;quot; type=\&amp;quot;application/x-shockwave-flash\&amp;quot; width=\&amp;quot;425\&amp;quot; height=\&amp;quot;355\&amp;quot;&amp;gt;&amp;lt;\/embed&amp;gt;&amp;lt;\/object&amp;gt;&amp;lt;\/div&amp;gt;&amp;quot;;" alt=""&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;  &lt;p&gt;My only question for the MS Marketing guys who finally loosened up enough to pay for a viral video: What Took You So Long!&lt;/p&gt;  &lt;p&gt;Special kudos to Traffik, the agency that did the work.&amp;#160; Excellent Job!&lt;/p&gt;&lt;img src="https://blogs.msdn.com:443/aggbug.aspx?PostID=9829159" width="1" height="1"&gt;</description><category domain="https://blogs.msdn.com:443/nickmalik/archive/tags/Personal+and+Humor/default.aspx">Personal and Humor</category></item><item><title>Argh! More annoyances!</title><link>https://blogs.msdn.com:443/tzink/archive/2009/07/10/argh-more-annoyances.aspx</link><pubDate>Fri, 10 Jul 2009 23:03:50 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9829154</guid><dc:creator>tzink</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;You know, it's bad enough that these fracking Twitter spammers are polluting my Twitter following count (inflating it from zero to three).&amp;#160; I went and checked out the page that they redirect to and when I type into the address bar to navigate away from the page, I cannot!&amp;#160; Observe the sequence:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;I go to the web page and decide to navigate away.&amp;#160; I hit Ctrl + L to get to the address bar of my browser.     &lt;br /&gt;      &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;I type in &lt;a href="http://www.msn.com"&gt;http://www.msn.com&lt;/a&gt; and hit Enter.      &lt;br /&gt;      &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;I see the following popup:     &lt;br /&gt;      &lt;br /&gt;&lt;a href="http://blogs.msdn.com/blogfiles/tzink/WindowsLiveWriter/ArghMoreannoyances_E1D4/image_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/tzink/WindowsLiveWriter/ArghMoreannoyances_E1D4/image_thumb.png" width="428" height="466" /&gt;&lt;/a&gt;       &lt;br /&gt;      &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;I hit Cancel which takes me back to the spam page.&amp;#160; My navigation failed.&amp;#160; I didn't read the pop-up very closely so I went back to the previous page.&amp;#160; In fact, I didn't read this pop-up at all and assumed that the OK meant I wanted to buy into this stupid offer.     &lt;br /&gt;      &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;I do this a couple of times, not hitting OK and instead hitting Cancel, each time going back to the spam landing page.&amp;#160; Finally, I actually read this stupid pop-up (and who actually does this in real life?) and assume that hitting OK will direct me to MSN.&amp;#160; It does.&amp;#160; I have escaped the spammy page.&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;I find it very annoying when I try to navigate away from something and then I'm caught with a &amp;quot;Wait!&amp;#160; Don't go!&amp;#160; We'll throw in this special offer!&amp;quot;&amp;#160; If I take the time to hit Ctrl + L to get to the address bar (which doesn't work in IE8, btw, but I can't remember that program's shortcut sequence) then don't bug me with pop-ups.&amp;#160; I'm sure I want to go, that's why I took the time to manually type in a URL.&lt;/p&gt;  &lt;p&gt;Stupid spammers.&lt;/p&gt;&lt;img src="https://blogs.msdn.com:443/aggbug.aspx?PostID=9829154" width="1" height="1"&gt;</description><category domain="https://blogs.msdn.com:443/tzink/archive/tags/Miscellaneous/default.aspx">Miscellaneous</category></item><item><title>SQL Server 2008 Failover Clustering Whitepaper has been published</title><link>https://blogs.msdn.com:443/petersad/archive/2009/07/11/sql-server-2008-failover-clustering-whitepaper-has-been-published.aspx</link><pubDate>Fri, 10 Jul 2009 23:03:25 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9829153</guid><dc:creator>petersad</dc:creator><slash:comments>0</slash:comments><description>&lt;h6&gt;&amp;#160;&lt;/h6&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Summary:&lt;/b&gt; This white paper complements the existing documentation on planning, implementation, and administration of a SQL Server 2008 failover cluster, which can be found in Microsoft SQL Server 2008 Books Online. There are links to relevant existing content throughout the paper, which is intended primarily for a technical audience. This white paper covers failover cluster architecture and concepts for Windows Server (2003 and 2008) and SQL Server 2008; installation of a SQL Server 2008 failover cluster; upgrades and updates to SQL Server 2008 failover clustering; and maintenance and administration of SQL Server 2008.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;For further information please download the &lt;a href="http://download.microsoft.com/download/6/9/D/69D1FEA7-5B42-437A-B3BA-A4AD13E34EF6/SQLServer2008FailoverCluster.docx"&gt;SQL Server 2008 Failover Clustering&lt;/a&gt; whitepaper. &lt;/p&gt;&lt;img src="https://blogs.msdn.com:443/aggbug.aspx?PostID=9829153" width="1" height="1"&gt;</description><category domain="https://blogs.msdn.com:443/petersad/archive/tags/setup/default.aspx">setup</category><category domain="https://blogs.msdn.com:443/petersad/archive/tags/install/default.aspx">install</category><category domain="https://blogs.msdn.com:443/petersad/archive/tags/SQL+Server+2008/default.aspx">SQL Server 2008</category><category domain="https://blogs.msdn.com:443/petersad/archive/tags/Clustering/default.aspx">Clustering</category></item><item><title>Hey WPF Button, where are your States?</title><link>https://blogs.msdn.com:443/jeetenk/archive/2009/07/10/hey-wpf-button-where-are-your-states.aspx</link><pubDate>Fri, 10 Jul 2009 22:58:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9829148</guid><dc:creator>jeetenk</dc:creator><slash:comments>0</slash:comments><description>&lt;P&gt;As you may know, when you create a template for a Silverlight control, the States pane in Blend populates with States ready for you to select-and-design. This is because Silverlight controls are designed to work with States, and each Silverlight control advertises the States it works with. But WPF shipped before States did and consequently WPF controls know nothing about States. It’s actually the magic in the WPF Toolkit that makes WPF controls work with States. When Blend 3 ships, its installer will also install the WPF Toolkit for you, but until then you can install it yourself from here: &lt;A href="http://www.codeplex.com/wpf/Release/ProjectReleases.aspx" mce_href="http://www.codeplex.com/wpf/Release/ProjectReleases.aspx"&gt;http://www.codeplex.com/wpf/Release/ProjectReleases.aspx&lt;/A&gt;. &lt;BR&gt;This means that when you create a new template for a WPF control, the States pane is empty initially. But it only takes a few moments to add the correctly-named States and from there you’re on par with the Silverlight experience and you’re ready to select-and-design as usual.&lt;/P&gt;
&lt;P&gt;So, here’s a list of the WPF controls that work with States along with the state groups and states you’ll need to add.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Button, GridViewColumnHeader, RepeatButton&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;CommonStates:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Normal, MouseOver, Pressed, Disabled&lt;/P&gt;
&lt;P&gt;FocusStates:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Unfocused, Focused&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;CheckBox, RadioButton&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;CommonStates:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Normal, MouseOver, Pressed, Disabled&lt;/P&gt;
&lt;P&gt;CheckStates:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Unchecked, Checked, Indeterminate&lt;/P&gt;
&lt;P&gt;FocusStates:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Unfocused, Focused&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;ListBoxItem&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;CommonStates:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Normal, MouseOver&lt;/P&gt;
&lt;P&gt;SelectionStates:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Unselected, Selected&lt;/P&gt;
&lt;P&gt;FocusStates:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Unfocused, Focused&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;ProgressBar&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;CommonStates:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Determinate, Indeterminate&lt;/P&gt;
&lt;P&gt;FocusStates:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Unfocused, Focused&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;TextBox, RichTextBox&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;CommonStates:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Normal, MouseOver, Disabled, ReadOnly&lt;/P&gt;
&lt;P&gt;FocusStates:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Unfocused, Focused&lt;BR&gt;&lt;/P&gt;&lt;img src="https://blogs.msdn.com:443/aggbug.aspx?PostID=9829148" width="1" height="1"&gt;</description><category domain="https://blogs.msdn.com:443/jeetenk/archive/tags/WPF/default.aspx">WPF</category><category domain="https://blogs.msdn.com:443/jeetenk/archive/tags/Blend/default.aspx">Blend</category><category domain="https://blogs.msdn.com:443/jeetenk/archive/tags/Control+Templates/default.aspx">Control Templates</category><category domain="https://blogs.msdn.com:443/jeetenk/archive/tags/VSM/default.aspx">VSM</category></item><item><title>Governments begin to take note of a new model for health information data sharing and exchange</title><link>https://blogs.msdn.com:443/healthblog/archive/2009/07/10/governments-begin-to-take-note-of-a-new-model-for-health-information-data-sharing-and-exchange.aspx</link><pubDate>Fri, 10 Jul 2009 22:53:25 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9829140</guid><dc:creator>hlthblog</dc:creator><slash:comments>0</slash:comments><description>On July 22nd of last year I made a post on HealthBlog titled “ A possible sea change in the way we share health data ”.&amp;#160; I wrote&amp;#160; this entry while attending last year’s World Congress Leadership Summit in Boston.&amp;#160; Here’s part of what I said in that post: “In 2004, George Bush proclaimed that most Americans would have an electronic health record by 2014.&amp;#160; So here we are 4 years later, and despite a lot of focus on establishing the Office of the National Coordinator for Health IT,...(&lt;a href="https://blogs.msdn.com:443/healthblog/archive/2009/07/10/governments-begin-to-take-note-of-a-new-model-for-health-information-data-sharing-and-exchange.aspx"&gt;read more&lt;/a&gt;)&lt;img src="https://blogs.msdn.com:443/aggbug.aspx?PostID=9829140" width="1" height="1"&gt;</description></item><item><title>It turns out that Twitter spam *is* possible</title><link>https://blogs.msdn.com:443/tzink/archive/2009/07/10/it-turns-out-that-twitter-spam-is-possible.aspx</link><pubDate>Fri, 10 Jul 2009 22:53:19 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9829139</guid><dc:creator>tzink</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;A couple of weeks ago, I &lt;a href="http://blogs.msdn.com/tzink/archive/2009/06/25/is-twitter-spam-possible.aspx"&gt;blogged&lt;/a&gt; on the topic of whether or not Twitter spam was possible.&amp;#160; It turns out that not only is it possible, but it's rampant and really annoying.&lt;/p&gt;  &lt;p&gt;I signed up for Twitter a couple of weeks ago and without even having written a single thing, I already have 3 followers.&amp;#160; But there's a catch, they're all spammers!&amp;#160; My followers look like this:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/tzink/WindowsLiveWriter/ItturnsoutthatTwitterspamispossible_DF61/image_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/tzink/WindowsLiveWriter/ItturnsoutthatTwitterspamispossible_DF61/image_thumb.png" width="407" height="231" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;That scribbled out red blob is a link to a URL redirection site which points to a spam landing page.&amp;#160; And speaking of URL shorteners, this past week All Spammed Up wrote an article &lt;a href="http://www.allspammedup.com/2009/07/url-shortening-services-exploited-by-spammers/"&gt;highlighting&lt;/a&gt; this phenomenon.&amp;#160; In an age of Twitter where you only have 140 characters to get your point across, services like &lt;a href="http://www.tinyurl.com"&gt;TinyURL&lt;/a&gt; are useful for compressing really long links so you can save precious characters in the link.&amp;#160; But that's not the only one, there's &lt;a href="http://snipurl.com"&gt;SnipURL&lt;/a&gt;, &lt;a href="http://bit.ly"&gt;Bit.ly&lt;/a&gt; and &lt;a href="http://cli.gs"&gt;Cligs&lt;/a&gt;.&amp;#160; The former two have been used in spam for a long time, the latter two I gleaned from my Twitter &amp;quot;followers&amp;quot;.&amp;#160; I don't know whether or not they are used in spam.&lt;/p&gt;  &lt;p&gt;I checked out all of these sites... and I couldn't believe the insecurity running on them!&amp;#160; It was unreal!&amp;#160; All I had to do was enter in a URL, click the button and bam -- I had a compressed URL ready for me to use.&lt;/p&gt;  &lt;p&gt;Now remember Terry Zink's Rule of Free Stuff - If you give something away for free, people will abuse it.&amp;#160; This is no different, a spammer could easily automate the creation of compressed links and use those to send out spam (or create twitter followers, or live spaces blog sites, or Yahoo Groups invites, or...).&amp;#160; There was no CAPTCHA on the site either, so all that would need to be done is have a spammer write a script to plug tons of these things in there.&amp;#160; A spam filter could not easily key on the URL in the message to block the message since the root domain is all the same; the filter would have to travel through to the site and then extract the URL to see if it was good or not.&lt;/p&gt;  &lt;p&gt;I then thought &amp;quot;Well, maybe these guys should, at the very least, do their own reputation filtering and stop these things at the source.&amp;quot;&amp;#160; Why couldn't a shortening service subscribe to URIBL, SURBL or Invaluement and perform reputation and prevent abusive domains from being compressed?&amp;#160; I tried it out on my Twitter followers and the results were that the domains that I was redirected to were &lt;em&gt;not&lt;/em&gt; listed on any of those sites.&amp;#160; This means that these are URLs that are avoiding the bad reputation listing meaning that even if these sites did do some input validation, it wouldn't matter (for my limited sample set of 3 which I am incorrectly extrapolating to the entire data set to make a point).&lt;/p&gt;  &lt;p&gt;My uberpoint is that shortening services need to clamp down on their openness.&amp;#160; Yes, I know they want to simplify things but I can guarantee that spammers will start to exploit that freedom and will ruin it for everybody.&lt;/p&gt;&lt;img src="https://blogs.msdn.com:443/aggbug.aspx?PostID=9829139" width="1" height="1"&gt;</description><category domain="https://blogs.msdn.com:443/tzink/archive/tags/Reputation/default.aspx">Reputation</category><category domain="https://blogs.msdn.com:443/tzink/archive/tags/Security/default.aspx">Security</category></item><item><title>Silverlight 3 Launch</title><link>https://blogs.msdn.com:443/brunoterkaly/archive/2009/07/10/silverlight-3-launch.aspx</link><pubDate>Fri, 10 Jul 2009 22:26:30 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9829126</guid><dc:creator>BrunoTerkaly</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&amp;nbsp; &lt;p&gt;I am sitting at the Hotel Intercontinental in San Francisco, where I’m witnessing the launch of Silverlight 3. Developers want one thing – to create interfaces that customers care about. Interactive technologies are evolving quickly. Development and design are converging, collaborative workflow is a necessity, and people expect intuitive interfaces and rich experiences.  &lt;p&gt;&lt;strong&gt;Dealing with Complexity&lt;/strong&gt;  &lt;p&gt;The software development experience is still complex. Our tools and platforms must be robust enough to help with the complexity. Integration is expensive and re-writing code over and over is difficult.  &lt;p&gt;&lt;strong&gt;If I wasn’t employed at Microsoft….&lt;/strong&gt;  &lt;p&gt;I’d be learning &lt;a href="http://www.microsoft.com/silverlight"&gt;Silverlight&lt;/a&gt;. Well, I’m learning it regardless, because it brings so much power on top of the aging world of HTML. Less than a couple dozen elements comprise the initial, relatively simple design of HTML. It has grown, but is unable to deliver rich interactive experiences on par with Silverlight. I’ve done this demo showing how to build an end to end application where Silverlight talks to Azure tables and displays data in a fancy list box. I also show an ASP.NET version. Along the way you learn about REST-ful services, VS 2008, while building up various projects from scratch.  &lt;p&gt;&lt;strong&gt;Calling out to all MSDN Readers - Can you gather a group of people?&lt;/strong&gt;  &lt;p&gt;Get a group of people together. We can have as few as 10. But the more the merrier. I can even invite people via Live Meeting and we can do an online version, with attendees from ANYWHERE. Just email me at &lt;a href="mailto:bterkaly@microsoft.com"&gt;bterkaly@microsoft.com&lt;/a&gt; and let me know if you’ve got a nice group of smart people that are ready to dive in. Even Larry the Cable Guy would say, “get er done!”  &lt;p&gt;Doesn’t get much better – a live presentation where you can ultimately repeat my steps and tell your colleagues that you can build up a Silverlight app talking to the cloud. I want to help people get jobs. At the next Professional Developers Conference (November) we are releasing Azure. And you know what that means – there won’t be enough developers that can talk to cloud data from a rich client application. So now is the perfect time to jump in.  &lt;p&gt;&lt;strong&gt;Prediction: &lt;/strong&gt;&lt;a href="http://www.microsoft.com/expression"&gt;SketchFlow&lt;/a&gt;&lt;strong&gt; is going to be popular&lt;/strong&gt;  &lt;p&gt;It is the end-to-end solution to make rough ideas real. SketchFlow is a dynamic prototyping feature found in Expression Studio 3 and it revolutionizes the speed and efficiency of prototyping the vision for an application. Rapidly demonstrate and iterate on ideas, application flows, screen layouts, and the functionality of an application.  &lt;p&gt;&lt;strong&gt;Win a trip to PDC on INETA&lt;/strong&gt;  &lt;p&gt;PDC is coming to Los Angles this November and you could be there! INETA will be giving away 2 scholarships to the conference including air, hotel and conference pass. All we ask is you take some time to build an application using some 3rd party components. This could be something new or even something that you have been working on for awhile, it could even be something you are doing at work. All you have to do is take a 5 minute video telling us why your application is so cool and you are in the running. The judges will be evaluating submissions on many different criteria so even if you are new to a component you still have a good chance to win. So what are you waiting for. Get busy, the deadline to get submissions in is August 25th. Get all the details at &lt;a href="http://www.ineta.org/codechallenge"&gt;http://www.ineta.org/codechallenge&lt;/a&gt;  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;A Unique WCF Learning Opportunity&lt;/strong&gt;  &lt;p&gt;I took Juval’s Master Architect class. Juval’s understanding of WCF is world renown. He’s worked directly with the product teams at Microsoft. Master WCF in five intense days with Microsoft Regional Director Juval Lowy covering WCF programming, design guidelines, pitfalls, his original techniques and best practices. &lt;a href="http://www.idesign.net/idesign/DesktopDefault.aspx?tabindex=0&amp;amp;tabid=20"&gt;Class Outline&lt;/a&gt; -&lt;b&gt;October 5-9&lt;sup&gt;th&lt;/sup&gt;, San Jose CA. &lt;/b&gt;&lt;a href="mailto:sales@idesign.net?subject=Requesting%20more%20information%20on%20the%20October%20WCF%20Master%20Class"&gt;&lt;b&gt;Registration and Information&lt;/b&gt;&lt;/a&gt;  &lt;p&gt;Thanks for reading. ~Bruno&lt;/p&gt;&lt;img src="https://blogs.msdn.com:443/aggbug.aspx?PostID=9829126" width="1" height="1"&gt;</description></item><item><title>Working with Azure Table Storage from PHP</title><link>https://blogs.msdn.com:443/bags/archive/2009/07/10/working-with-azure-table-storage-from-php.aspx</link><pubDate>Fri, 10 Jul 2009 22:26:28 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9829125</guid><dc:creator>rob.bagby</dc:creator><slash:comments>0</slash:comments><description>&lt;h3&gt;Introduction&lt;/h3&gt; &lt;p&gt;Windows Azure Table Storage is a non-relational structured storage system in the cloud that offers massive scalability, durability and high availability.&amp;nbsp; The service is exposed with a RESTful API.&amp;nbsp; As such, it is easily consumable from a variety of platforms, including PHP.&amp;nbsp; In this post, I will illustrate how to consume Azure Table Storage via the RESTful API.&amp;nbsp; It is important to note that on July 31, 2009 we will reach Milestone 2 on the &lt;a href="http://phpazure.codeplex.com/" target="_blank"&gt;PHP SDK for Windows Azure&lt;/a&gt;.&amp;nbsp; Milestone 2 focuses on support for Azure Table Storage.&amp;nbsp; Accordingly, in all of the code you see in this blog post and the accompanying screencasts (&lt;a href="http://www.youtube.com/watch?v=xvshHNwlU78" target="_blank"&gt;Part I&lt;/a&gt; and &lt;a href="http://www.youtube.com/watch?v=vVDJ_rs9ZXI" target="_blank"&gt;Part II&lt;/a&gt;) illustrate accessing Azure Table Storage the “hard way”.&amp;nbsp; Much of the work I had to do by hand in the accompanying example here will be taken care of for you by the SDK.&amp;nbsp; That said, let’s dig in…&lt;/p&gt; &lt;h3&gt;&amp;nbsp;&lt;/h3&gt; &lt;h3&gt;PHP Interop Series&lt;/h3&gt; &lt;p&gt;This is part of a small series of blog posts and screencasts that I am doing on interoperability between PHP and the Microsoft stack.&amp;nbsp; My goal is to illustrate some features of the MS stack that PHP developers can take advantage of, as well as to illustrate how it is done.&lt;/p&gt; &lt;h3&gt;&amp;nbsp;&lt;/h3&gt; &lt;h3&gt;Watch the Screencasts&lt;/h3&gt; &lt;p&gt;I have created 2 screencasts that accompany this blog post that you can watch.&amp;nbsp; You can view them here:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://www.youtube.com/watch?v=xvshHNwlU78" target="_blank"&gt;Working with Azure Table Storage From PHP - Part I&lt;/a&gt;  &lt;li&gt;&lt;a href="http://www.youtube.com/watch?v=vVDJ_rs9ZXI" target="_blank"&gt;Working with Azure Table Storage From PHP - Part II&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h3&gt;What is Windows Azure Table Storage&lt;/h3&gt; &lt;p&gt;As stated in the intro, Windows Azure Table Storage is a non-relational structured storage system in the cloud that offers massive scalability, durability and high availability.&amp;nbsp; While the goal of this post is not to dig deep into what Azure Table Storage is, I think it is best to at least provide a high-level overview of what it is and why you should care.&amp;nbsp; Looking at the first sentence in this paragraph, there are 4 major points that need to be covered: 1) non-relational storage system, 2) in the cloud, 3) massive scalability and 4) durability, high availability.&amp;nbsp; &lt;/p&gt; &lt;h4&gt;&amp;nbsp;&lt;/h4&gt; &lt;h4&gt;Non-Relational Structured Storage System&lt;/h4&gt; &lt;p&gt;It is important to note that while we refer to this storage abstraction as tables, they do not conform to tables in the traditional sense.&amp;nbsp; To start with, the container for tables is not a database, rather a Storage Account.&amp;nbsp; You establish this storage account in the Azure Services Developer Portal (&lt;a href="http://blogs.msdn.com/bags/archive/2009/04/14/azure-application-part-2-access-azure-table-storage.aspx" target="_blank"&gt;see this blog post for full details&lt;/a&gt;).&amp;nbsp; The Storage Account acts as the parent namespace for Table Storage, therefore you will not have any naming collisions with others that have similarly named tables.&amp;nbsp; &lt;/p&gt; &lt;p&gt;A second major difference is that Azure tables do not conform to the traditional rows and columns structure.&amp;nbsp; Azure tables contain entities.&amp;nbsp; I think of entities as property bags.&amp;nbsp; These entities contain 3 or more properties which are typed name-value pairs.&amp;nbsp; I say 3 or more properties because every entity in Azure Tables must contain a PartitionKey, a RowKey and a TimeStamp property (I will go into a bit more detail on the role of these properties later in this post).&amp;nbsp; An interesting byproduct of this design is that tables are completely schema-less.&amp;nbsp; For instance, you are not precluded from adding 2 entities into the same table that have completely different schemas.&amp;nbsp; I do not want to address the inevitable debate that surfaces whenever this statement comes up, but suffice it to say that it is up to the developer to protect the schema in their tables.&amp;nbsp; The figure below illustrates how it is structured.&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/bags/WindowsLiveWriter/WorkingwithAzureTableStoragefromPHP_68B7/image_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/bags/WindowsLiveWriter/WorkingwithAzureTableStoragefromPHP_68B7/image_thumb.png" width="497" height="290"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;A third major difference is that there are no relational capabilities in Windows Azure Tables.&amp;nbsp; Many people look at these differences (between this structured storage system and a traditional RDBMS system) and focus on what is missing.&amp;nbsp; The simple reality is that Azure Table Storage is what it is… which is a structured storage system that provides massive scalability.&amp;nbsp; &lt;/p&gt; &lt;h4&gt;&amp;nbsp;&lt;/h4&gt; &lt;h4&gt;In the Cloud&lt;/h4&gt; &lt;p&gt;Windows Azure is a cloud platform.&amp;nbsp; The data in Windows Azure Table Storage is stored in Microsoft Data Centers around the world and are accessible via HTTP.&amp;nbsp; &lt;/p&gt; &lt;h4&gt;&amp;nbsp;&lt;/h4&gt; &lt;h4&gt;Massive Scalability&lt;/h4&gt; &lt;p&gt;The typical means of scaling databases is to scale up – buy bigger and bigger boxes.&amp;nbsp; However, after a while you run out of either bigger boxes or money.&amp;nbsp; At that point you have to scale out.&amp;nbsp; In the database world, this process is know as horizontal partitioning or sharding.&amp;nbsp; In RDBMS tables, this means that differing rows of data are stored on different physical partitions.&amp;nbsp; For example, I might store a subset of customers and their orders on one partition and another subset on another (perhaps customers with last names A-M on one and N-Z on another – or perhaps customers in Europe on one, customers in Asia on another …).&amp;nbsp; &lt;/p&gt; &lt;p&gt;You might correctly infer that the more flexible you are in your ability to move data from one partition to another, the more scalability your system will have.&amp;nbsp; For instance, at one extreme, if all of your data must be on the same partition, you can only scale up (not out) and when you reach that threshold, you can scale no more.&amp;nbsp; At the other extreme, if you are able to store each record / entity on a differing partition, you have infinite scalability.&amp;nbsp; Now don’t go getting excited.&amp;nbsp; When data is stored across different partitions, it is quite costly to query it.&amp;nbsp; You are forced to query each partition independently.&amp;nbsp; As a result, you need to take special care to ensure that data that you want to query together remains on the same partition, while still allowing for the scalability required.&lt;/p&gt; &lt;p&gt;As mentioned earlier, every entity in an Azure Table is required to have a PartitionKey property.&amp;nbsp; This PartitionKey provides you with the control to determine which records must be stored on the same partition.&amp;nbsp; Windows Azure is free to move Entities with different PartitionKeys to differing nodes when it needs to, for scaling or load balancing purposes.&amp;nbsp; If you think about it, that is pretty cool.&amp;nbsp; You don’t have to worry about moving the data about.&amp;nbsp; Azure will handle that for you.&amp;nbsp; However, you do need to realize that if you query data across PartionKeys, it will be rather expensive.&amp;nbsp; It is the classic give-take.&amp;nbsp; &lt;/p&gt; &lt;h4&gt;&amp;nbsp;&lt;/h4&gt; &lt;h4&gt;Durability, High Availability&lt;/h4&gt; &lt;p&gt;Data in Windows Azure is replicated at least 3 times.&amp;nbsp; Further, as described above, Windows Azure will move data about for load balancing purposes (as well as for scaling).&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h3&gt;The REST API&lt;/h3&gt; &lt;p&gt;I published &lt;a href="http://blogs.msdn.com/bags/archive/2009/04/04/azure-table-storage-the-rest-and-ado-net-data-services-story.aspx" target="_blank"&gt;a blog post a month or so ago that described ad nauseum the REST API for Windows Azure Table Storage&lt;/a&gt;.&amp;nbsp; I would urge you to take a look at that post, or at least watch the first &lt;a href="http://www.youtube.com/watch?v=xvshHNwlU78" target="_blank"&gt;screencast that accompanies this post&lt;/a&gt;.&amp;nbsp; The understanding of the REST API, as well as the message signing process was key to me to be able to put together the following code.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h3&gt;Writing the PHP Implementation&lt;/h3&gt; &lt;h4&gt;Caveat (again)&lt;/h4&gt; &lt;p&gt;I realize I have stated this before, but I want to mention again that on July 31, 2009, we will be releasing Milestone 2 of the &lt;a href="http://phpazure.codeplex.com/" target="_blank"&gt;PHP SDK for Windows Azure&lt;/a&gt;.&amp;nbsp; This milestone will include code to greatly ease the process of working with Azure Table Storage.&amp;nbsp; Much of the following code will be unnecessary.&amp;nbsp; That said, I think it is very cool to illustrate accessing Table Storage from PHP without the SDK.&amp;nbsp; It illustrates the benefits of exposing an open RESTful API.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h4&gt;Wine.php&lt;/h4&gt; &lt;p&gt;In my code, I want to work with classes.&amp;nbsp; To that end, I first created a Wine class as seen here:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&amp;lt;?php
        class &lt;/span&gt;Wine
        &lt;span style="color: purple"&gt;{
            &lt;/span&gt;&lt;span style="color: blue"&gt;public $ShortWineName &lt;/span&gt;&lt;span style="color: purple"&gt;= &lt;/span&gt;&lt;span style="color: olive"&gt;""&lt;/span&gt;;
            &lt;span style="color: blue"&gt;public $WineLabelUrl &lt;/span&gt;&lt;span style="color: purple"&gt;= &lt;/span&gt;&lt;span style="color: olive"&gt;""&lt;/span&gt;;
            &lt;span style="color: blue"&gt;public $BottlePrice &lt;/span&gt;&lt;span style="color: purple"&gt;= &lt;/span&gt;&lt;span style="color: red"&gt;0.00&lt;/span&gt;;
            &lt;span style="color: blue"&gt;public $Description &lt;/span&gt;&lt;span style="color: purple"&gt;= &lt;/span&gt;&lt;span style="color: olive"&gt;""&lt;/span&gt;;
            &lt;span style="color: blue"&gt;public $Vintage &lt;/span&gt;&lt;span style="color: purple"&gt;= &lt;/span&gt;&lt;span style="color: olive"&gt;""&lt;/span&gt;;
            &lt;span style="color: blue"&gt;public $WineID &lt;/span&gt;&lt;span style="color: purple"&gt;= &lt;/span&gt;&lt;span style="color: red"&gt;0&lt;/span&gt;;
            
            &lt;span style="color: blue"&gt;public $PartitionKey &lt;/span&gt;&lt;span style="color: purple"&gt;= &lt;/span&gt;&lt;span style="color: olive"&gt;""&lt;/span&gt;;
            &lt;span style="color: blue"&gt;public $RowKey &lt;/span&gt;&lt;span style="color: purple"&gt;= &lt;/span&gt;&lt;span style="color: olive"&gt;""&lt;/span&gt;;
            &lt;span style="color: blue"&gt;public $TimeStamp&lt;/span&gt;;
    
            &lt;span style="color: blue"&gt;public function &lt;/span&gt;__construct&lt;span style="color: purple"&gt;()
            {
            
            }
        }
&lt;/span&gt;&lt;span style="color: blue"&gt;?&amp;gt;        &lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;PHPTableStorageHelper.php&lt;/h4&gt;
&lt;p&gt;This class is a little helper I wrote.&amp;nbsp; It performs the following functions: 1) Calculates the appropriate URI for my Table (and page) 2) Signs the message, 3) Creates the HTTP Headers for the Request (including the Authorization header containing the signed message, 4) Issues the Request using CURL, 5) Parses the Response HTTP Headers and 6) Returns the Reponse Body.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;GetResponse Method Signature&lt;/h4&gt;&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;    public static function &lt;/span&gt;GetResponse&lt;span style="color: purple"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;$account_name&lt;/span&gt;&lt;span style="color: purple"&gt;, 
             &lt;/span&gt;&lt;span style="color: blue"&gt;$shared_key&lt;/span&gt;&lt;span style="color: purple"&gt;, 
            &lt;/span&gt;&lt;span style="color: blue"&gt;$table_name&lt;/span&gt;&lt;span style="color: purple"&gt;, 
            &lt;/span&gt;&lt;span style="color: blue"&gt;$pageSize&lt;/span&gt;&lt;span style="color: purple"&gt;, 
            &amp;amp;&lt;/span&gt;&lt;span style="color: blue"&gt;$nextPartition&lt;/span&gt;&lt;span style="color: purple"&gt;, 
            &amp;amp;&lt;/span&gt;&lt;span style="color: blue"&gt;$nextRow&lt;/span&gt;&lt;span style="color: purple"&gt;){

        &lt;/span&gt;&lt;span style="color: green"&gt;//Get the base uri
        &lt;/span&gt;&lt;span style="color: blue"&gt;$service_uri &lt;/span&gt;&lt;span style="color: purple"&gt;= &lt;/span&gt;self&lt;span style="color: purple"&gt;::&lt;/span&gt;getUri&lt;span style="color: purple"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;$account_name&lt;/span&gt;&lt;span style="color: purple"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;$table_name&lt;/span&gt;&lt;span style="color: purple"&gt;)&lt;/span&gt;;
            
        &lt;span style="color: green"&gt;//Limit the results by the pageSize
        &lt;/span&gt;&lt;span style="color: blue"&gt;$query &lt;/span&gt;&lt;span style="color: purple"&gt;= &lt;/span&gt;&lt;span style="color: olive"&gt;''&lt;/span&gt;;
        &lt;span style="color: blue"&gt;if &lt;/span&gt;&lt;span style="color: purple"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;$pageSize &lt;/span&gt;&lt;span style="color: purple"&gt;&amp;gt; &lt;/span&gt;&lt;span style="color: red"&gt;0&lt;/span&gt;&lt;span style="color: purple"&gt;)
            &lt;/span&gt;&lt;span style="color: blue"&gt;$query &lt;/span&gt;&lt;span style="color: purple"&gt;= &lt;/span&gt;&lt;span style="color: olive"&gt;'?$top='&lt;/span&gt;&lt;span style="color: purple"&gt;.&lt;/span&gt;&lt;span style="color: blue"&gt;$pageSize&lt;/span&gt;;

        &lt;span style="color: green"&gt;//Add a filter for paging (if the partition and row were passed
        &lt;/span&gt;&lt;span style="color: blue"&gt;if &lt;/span&gt;&lt;span style="color: purple"&gt;(&lt;/span&gt;strlen&lt;span style="color: purple"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;$nextPartition&lt;/span&gt;&lt;span style="color: purple"&gt;) &amp;gt; &lt;/span&gt;&lt;span style="color: red"&gt;0 &lt;/span&gt;&lt;span style="color: purple"&gt;&amp;amp;&amp;amp; &lt;/span&gt;strlen&lt;span style="color: purple"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;$nextRow&lt;/span&gt;&lt;span style="color: purple"&gt;) &amp;gt; &lt;/span&gt;&lt;span style="color: red"&gt;0&lt;/span&gt;&lt;span style="color: purple"&gt;)
        {
            &lt;/span&gt;&lt;span style="color: green"&gt;//See if we have already created a query
            &lt;/span&gt;&lt;span style="color: blue"&gt;if &lt;/span&gt;&lt;span style="color: purple"&gt;(&lt;/span&gt;strlen&lt;span style="color: purple"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;$query&lt;/span&gt;&lt;span style="color: purple"&gt;) &amp;gt; &lt;/span&gt;&lt;span style="color: red"&gt;0&lt;/span&gt;&lt;span style="color: purple"&gt;)
                &lt;/span&gt;&lt;span style="color: blue"&gt;$query &lt;/span&gt;&lt;span style="color: purple"&gt;.= &lt;/span&gt;&lt;span style="color: olive"&gt;'&amp;amp;'&lt;/span&gt;;
            &lt;span style="color: blue"&gt;else
                $query &lt;/span&gt;&lt;span style="color: purple"&gt;.= &lt;/span&gt;&lt;span style="color: olive"&gt;'?'&lt;/span&gt;;
        
            &lt;span style="color: green"&gt;//Add the NextPartitionKey and NextRowKey QueryString parameters
            &lt;/span&gt;&lt;span style="color: blue"&gt;$query &lt;/span&gt;&lt;span style="color: purple"&gt;.= &lt;/span&gt;&lt;span style="color: olive"&gt;'NextPartitionKey'&lt;/span&gt;&lt;span style="color: purple"&gt;.&lt;/span&gt;&lt;span style="color: olive"&gt;'='&lt;/span&gt;&lt;span style="color: purple"&gt;.&lt;/span&gt;rawurlencode&lt;span style="color: purple"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;$nextPartition&lt;/span&gt;&lt;span style="color: purple"&gt;)&lt;/span&gt;;
            &lt;span style="color: blue"&gt;$query &lt;/span&gt;&lt;span style="color: purple"&gt;.= &lt;/span&gt;&lt;span style="color: olive"&gt;'&amp;amp;NextRowKey'&lt;/span&gt;&lt;span style="color: purple"&gt;.&lt;/span&gt;&lt;span style="color: olive"&gt;'='&lt;/span&gt;&lt;span style="color: purple"&gt;.&lt;/span&gt;rawurlencode&lt;span style="color: purple"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;$nextRow&lt;/span&gt;&lt;span style="color: purple"&gt;)&lt;/span&gt;;
        &lt;span style="color: purple"&gt;}

        &lt;/span&gt;&lt;span style="color: blue"&gt;$service_uri &lt;/span&gt;&lt;span style="color: purple"&gt;.= &lt;/span&gt;&lt;span style="color: blue"&gt;$query&lt;/span&gt;;

        &lt;span style="color: green"&gt;//Get the date (GMT)
        &lt;/span&gt;&lt;span style="color: blue"&gt;$date &lt;/span&gt;&lt;span style="color: purple"&gt;= &lt;/span&gt;self&lt;span style="color: purple"&gt;::&lt;/span&gt;GetGMTDate&lt;span style="color: purple"&gt;()&lt;/span&gt;;
    
        &lt;span style="color: green"&gt;//Get the signature
        &lt;/span&gt;&lt;span style="color: blue"&gt;$signed_message &lt;/span&gt;&lt;span style="color: purple"&gt;= &lt;/span&gt;self&lt;span style="color: purple"&gt;::&lt;/span&gt;GetSignature&lt;span style="color: purple"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;$date&lt;/span&gt;&lt;span style="color: purple"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;$account_name&lt;/span&gt;&lt;span style="color: purple"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;$table_name&lt;/span&gt;&lt;span style="color: purple"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;$shared_key&lt;/span&gt;&lt;span style="color: purple"&gt;)&lt;/span&gt;;
    
        &lt;span style="color: green"&gt;//Get the http headers array
        &lt;/span&gt;&lt;span style="color: blue"&gt;$headers &lt;/span&gt;&lt;span style="color: purple"&gt;= &lt;/span&gt;self&lt;span style="color: purple"&gt;::&lt;/span&gt;GetHttpHeaders&lt;span style="color: purple"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;$date&lt;/span&gt;&lt;span style="color: purple"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;$signed_message&lt;/span&gt;&lt;span style="color: purple"&gt;)&lt;/span&gt;;
                
        &lt;span style="color: blue"&gt;$session &lt;/span&gt;&lt;span style="color: purple"&gt;= &lt;/span&gt;curl_init&lt;span style="color: purple"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;$service_uri&lt;/span&gt;&lt;span style="color: purple"&gt;)&lt;/span&gt;;
        curl_setopt&lt;span style="color: purple"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;$session&lt;/span&gt;&lt;span style="color: purple"&gt;, &lt;/span&gt;CURLOPT_HEADER&lt;span style="color: purple"&gt;, &lt;/span&gt;&lt;span style="color: red"&gt;1&lt;/span&gt;&lt;span style="color: purple"&gt;)&lt;/span&gt;;

        curl_setopt&lt;span style="color: purple"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;$session&lt;/span&gt;&lt;span style="color: purple"&gt;, &lt;/span&gt;CURLOPT_HTTPHEADER&lt;span style="color: purple"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;$headers&lt;/span&gt;&lt;span style="color: purple"&gt;)&lt;/span&gt;;
        curl_setopt&lt;span style="color: purple"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;$session&lt;/span&gt;&lt;span style="color: purple"&gt;, &lt;/span&gt;CURLOPT_RETURNTRANSFER&lt;span style="color: purple"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;true&lt;/span&gt;&lt;span style="color: purple"&gt;)&lt;/span&gt;;
        &lt;span style="color: blue"&gt;$response &lt;/span&gt;&lt;span style="color: purple"&gt;= &lt;/span&gt;curl_exec&lt;span style="color: purple"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;$session&lt;/span&gt;&lt;span style="color: purple"&gt;)
            or &lt;/span&gt;&lt;span style="color: blue"&gt;die&lt;/span&gt;&lt;span style="color: purple"&gt;(&lt;/span&gt;&lt;span style="color: olive"&gt;'Curl error: ' &lt;/span&gt;&lt;span style="color: purple"&gt;. &lt;/span&gt;curl_error&lt;span style="color: purple"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;$session&lt;/span&gt;&lt;span style="color: purple"&gt;))&lt;/span&gt;;
    
        &lt;span style="color: green"&gt;//Split the response into headers and the actual response body
        &lt;/span&gt;&lt;span style="color: blue"&gt;list&lt;/span&gt;&lt;span style="color: purple"&gt;( &lt;/span&gt;&lt;span style="color: blue"&gt;$outheaders&lt;/span&gt;&lt;span style="color: purple"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;$body &lt;/span&gt;&lt;span style="color: purple"&gt;)= &lt;/span&gt;explode&lt;span style="color: purple"&gt;( &lt;/span&gt;&lt;span style="color: olive"&gt;"\r\n\r\n"&lt;/span&gt;&lt;span style="color: purple"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;$response&lt;/span&gt;&lt;span style="color: purple"&gt;, &lt;/span&gt;&lt;span style="color: red"&gt;2 &lt;/span&gt;&lt;span style="color: purple"&gt;)&lt;/span&gt;;
    
        &lt;span style="color: green"&gt;//Split the outheaders into an array and set the ref arguments
        &lt;/span&gt;&lt;span style="color: blue"&gt;$outheadersArray &lt;/span&gt;&lt;span style="color: purple"&gt;= &lt;/span&gt;self&lt;span style="color: purple"&gt;::&lt;/span&gt;http_parse_headers&lt;span style="color: purple"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;$outheaders&lt;/span&gt;&lt;span style="color: purple"&gt;)&lt;/span&gt;;
        &lt;span style="color: blue"&gt;if &lt;/span&gt;&lt;span style="color: purple"&gt;(&lt;/span&gt;array_key_exists&lt;span style="color: purple"&gt;(&lt;/span&gt;&lt;span style="color: olive"&gt;'x-ms-continuation-NextPartitionKey'&lt;/span&gt;&lt;span style="color: purple"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;$outheadersArray&lt;/span&gt;&lt;span style="color: purple"&gt;))
            &lt;/span&gt;&lt;span style="color: blue"&gt;$nextPartition &lt;/span&gt;&lt;span style="color: purple"&gt;= &lt;/span&gt;&lt;span style="color: blue"&gt;$outheadersArray&lt;/span&gt;&lt;span style="color: purple"&gt;[&lt;/span&gt;&lt;span style="color: olive"&gt;'x-ms-continuation-NextPartitionKey'&lt;/span&gt;&lt;span style="color: purple"&gt;]&lt;/span&gt;;
        &lt;span style="color: blue"&gt;else
            $nextPartition &lt;/span&gt;&lt;span style="color: purple"&gt;= &lt;/span&gt;&lt;span style="color: olive"&gt;""&lt;/span&gt;;
        &lt;span style="color: blue"&gt;if &lt;/span&gt;&lt;span style="color: purple"&gt;(&lt;/span&gt;array_key_exists&lt;span style="color: purple"&gt;(&lt;/span&gt;&lt;span style="color: olive"&gt;'x-ms-continuation-NextRowKey'&lt;/span&gt;&lt;span style="color: purple"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;$outheadersArray&lt;/span&gt;&lt;span style="color: purple"&gt;))
            &lt;/span&gt;&lt;span style="color: blue"&gt;$nextRow &lt;/span&gt;&lt;span style="color: purple"&gt;= &lt;/span&gt;&lt;span style="color: blue"&gt;$outheadersArray&lt;/span&gt;&lt;span style="color: purple"&gt;[&lt;/span&gt;&lt;span style="color: olive"&gt;'x-ms-continuation-NextRowKey'&lt;/span&gt;&lt;span style="color: purple"&gt;]&lt;/span&gt;;
        &lt;span style="color: blue"&gt;else
            $nextRow &lt;/span&gt;&lt;span style="color: purple"&gt;= &lt;/span&gt;&lt;span style="color: olive"&gt;""&lt;/span&gt;;
        
        curl_close&lt;span style="color: purple"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;$session&lt;/span&gt;&lt;span style="color: purple"&gt;)&lt;/span&gt;;
    
        &lt;span style="color: blue"&gt;return $body&lt;/span&gt;;
&lt;span style="color: purple"&gt;    }&lt;/span&gt;&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;The core of this helper class is the GetResponse method.&amp;nbsp; This method takes in the account name containing the table to query, the table name, the shared key for use in signing the method and some arguments used for paging.&amp;nbsp; I realize that this method doesn’t allow you to really query a table, rather just return pages of records, but that is ok for the purposes of this post.&lt;/p&gt;
&lt;h4&gt;Calculates the appropriate URI&lt;/h4&gt;
&lt;p&gt;The class declares a constant used as a template for the URI to our table.&amp;nbsp; It is as follows:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;    const &lt;/span&gt;uriTemplate &lt;span style="color: purple"&gt;= &lt;/span&gt;&lt;span style="color: olive"&gt;"http://%s.table.core.windows.net/%s"&lt;/span&gt;;&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;The first placeholder (%s) in the template is replaced with the account name, while the second is replaced with the table.&amp;nbsp; The first line of code in the method simply does this replacement:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;    $service_uri &lt;/span&gt;&lt;span style="color: purple"&gt;= &lt;/span&gt;self&lt;span style="color: purple"&gt;::&lt;/span&gt;getUri&lt;span style="color: purple"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;$account_name&lt;/span&gt;&lt;span style="color: purple"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;$table_name&lt;/span&gt;&lt;span style="color: purple"&gt;)&lt;/span&gt;;&lt;/pre&gt;
&lt;p&gt;The next bit of code simply adds a few querystring parameters for paging:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: green"&gt;    //Limit the results by the pageSize
    &lt;/span&gt;&lt;span style="color: blue"&gt;$query &lt;/span&gt;&lt;span style="color: purple"&gt;= &lt;/span&gt;&lt;span style="color: olive"&gt;''&lt;/span&gt;;
    &lt;span style="color: blue"&gt;if &lt;/span&gt;&lt;span style="color: purple"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;$pageSize &lt;/span&gt;&lt;span style="color: purple"&gt;&amp;gt; &lt;/span&gt;&lt;span style="color: red"&gt;0&lt;/span&gt;&lt;span style="color: purple"&gt;)
        &lt;/span&gt;&lt;span style="color: blue"&gt;$query &lt;/span&gt;&lt;span style="color: purple"&gt;= &lt;/span&gt;&lt;span style="color: olive"&gt;'?$top='&lt;/span&gt;&lt;span style="color: purple"&gt;.&lt;/span&gt;&lt;span style="color: blue"&gt;$pageSize&lt;/span&gt;;

    &lt;span style="color: green"&gt;//Add a filter for paging (if the partition and row were passed
    &lt;/span&gt;&lt;span style="color: blue"&gt;if &lt;/span&gt;&lt;span style="color: purple"&gt;(&lt;/span&gt;strlen&lt;span style="color: purple"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;$nextPartition&lt;/span&gt;&lt;span style="color: purple"&gt;) &amp;gt; &lt;/span&gt;&lt;span style="color: red"&gt;0 &lt;/span&gt;&lt;span style="color: purple"&gt;&amp;amp;&amp;amp; &lt;/span&gt;strlen&lt;span style="color: purple"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;$nextRow&lt;/span&gt;&lt;span style="color: purple"&gt;) &amp;gt; &lt;/span&gt;&lt;span style="color: red"&gt;0&lt;/span&gt;&lt;span style="color: purple"&gt;)
    {
        &lt;/span&gt;&lt;span style="color: green"&gt;//See if we have already created a query
        &lt;/span&gt;&lt;span style="color: blue"&gt;if &lt;/span&gt;&lt;span style="color: purple"&gt;(&lt;/span&gt;strlen&lt;span style="color: purple"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;$query&lt;/span&gt;&lt;span style="color: purple"&gt;) &amp;gt; &lt;/span&gt;&lt;span style="color: red"&gt;0&lt;/span&gt;&lt;span style="color: purple"&gt;)
            &lt;/span&gt;&lt;span style="color: blue"&gt;$query &lt;/span&gt;&lt;span style="color: purple"&gt;.= &lt;/span&gt;&lt;span style="color: olive"&gt;'&amp;amp;'&lt;/span&gt;;
        &lt;span style="color: blue"&gt;else
            $query &lt;/span&gt;&lt;span style="color: purple"&gt;.= &lt;/span&gt;&lt;span style="color: olive"&gt;'?'&lt;/span&gt;;
        
        &lt;span style="color: green"&gt;//Add the NextPartitionKey and NextRowKey QueryString parameters
        &lt;/span&gt;&lt;span style="color: blue"&gt;$query &lt;/span&gt;&lt;span style="color: purple"&gt;.= &lt;/span&gt;&lt;span style="color: olive"&gt;'NextPartitionKey'&lt;/span&gt;&lt;span style="color: purple"&gt;.&lt;/span&gt;&lt;span style="color: olive"&gt;'='&lt;/span&gt;&lt;span style="color: purple"&gt;.&lt;/span&gt;rawurlencode&lt;span style="color: purple"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;$nextPartition&lt;/span&gt;&lt;span style="color: purple"&gt;)&lt;/span&gt;;
        &lt;span style="color: blue"&gt;$query &lt;/span&gt;&lt;span style="color: purple"&gt;.= &lt;/span&gt;&lt;span style="color: olive"&gt;'&amp;amp;NextRowKey'&lt;/span&gt;&lt;span style="color: purple"&gt;.&lt;/span&gt;&lt;span style="color: olive"&gt;'='&lt;/span&gt;&lt;span style="color: purple"&gt;.&lt;/span&gt;rawurlencode&lt;span style="color: purple"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;$nextRow&lt;/span&gt;&lt;span style="color: purple"&gt;)&lt;/span&gt;;
    &lt;span style="color: purple"&gt;}

    &lt;/span&gt;&lt;span style="color: blue"&gt;$service_uri &lt;/span&gt;&lt;span style="color: purple"&gt;.= &lt;/span&gt;&lt;span style="color: blue"&gt;$query&lt;/span&gt;;&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;h4&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4&gt;Sign the message&lt;/h4&gt;
&lt;p&gt;The next 2 lines of code get the signed message that is to be used for the Authorization HTTP header.&amp;nbsp; &lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: green"&gt;    //Get the date (GMT)
    &lt;/span&gt;&lt;span style="color: blue"&gt;$date &lt;/span&gt;&lt;span style="color: purple"&gt;= &lt;/span&gt;self&lt;span style="color: purple"&gt;::&lt;/span&gt;GetGMTDate&lt;span style="color: purple"&gt;()&lt;/span&gt;;
    
    &lt;span style="color: green"&gt;//Get the signature
    &lt;/span&gt;&lt;span style="color: blue"&gt;$signed_message &lt;/span&gt;&lt;span style="color: purple"&gt;= &lt;/span&gt;self&lt;span style="color: purple"&gt;::&lt;/span&gt;GetSignature&lt;span style="color: purple"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;$date&lt;/span&gt;&lt;span style="color: purple"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;$account_name&lt;/span&gt;&lt;span style="color: purple"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;$table_name&lt;/span&gt;&lt;span style="color: purple"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;$shared_key&lt;/span&gt;&lt;span style="color: purple"&gt;)&lt;/span&gt;;&lt;/pre&gt;&lt;pre class="code"&gt;Firstly, we get the current date in GMT format.&amp;nbsp; Next we call a helper method that creates a string to sign and signs it with the private key.&amp;nbsp; Here is that helper method:&lt;/pre&gt;&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;    public static function &lt;/span&gt;GetSignature&lt;span style="color: purple"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;$date&lt;/span&gt;&lt;span style="color: purple"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;$account_name&lt;/span&gt;&lt;span style="color: purple"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;$table_name&lt;/span&gt;&lt;span style="color: purple"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;$key&lt;/span&gt;&lt;span style="color: purple"&gt;){
            
        &lt;/span&gt;&lt;span style="color: blue"&gt;$message_to_sign &lt;/span&gt;&lt;span style="color: purple"&gt;= &lt;/span&gt;&lt;span style="color: olive"&gt;"&lt;/span&gt;&lt;span style="color: blue"&gt;$date&lt;/span&gt;&lt;span style="color: olive"&gt;\n/&lt;/span&gt;&lt;span style="color: blue"&gt;$account_name&lt;/span&gt;&lt;span style="color: olive"&gt;/&lt;/span&gt;&lt;span style="color: blue"&gt;$table_name&lt;/span&gt;&lt;span style="color: olive"&gt;"&lt;/span&gt;;
        &lt;span style="color: blue"&gt;$signed_message &lt;/span&gt;&lt;span style="color: purple"&gt;= &lt;/span&gt;base64_encode&lt;span style="color: purple"&gt;(&lt;/span&gt;hash_hmac&lt;span style="color: purple"&gt;(&lt;/span&gt;&lt;span style="color: olive"&gt;'sha256'&lt;/span&gt;&lt;span style="color: purple"&gt;, 
                                                  &lt;/span&gt;&lt;span style="color: blue"&gt;$message_to_sign&lt;/span&gt;&lt;span style="color: purple"&gt;, 
                                                  &lt;/span&gt;base64_decode&lt;span style="color: purple"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;$key&lt;/span&gt;&lt;span style="color: purple"&gt;),&lt;/span&gt;&lt;span style="color: blue"&gt;true&lt;/span&gt;&lt;span style="color: purple"&gt;))&lt;/span&gt;;
    
        &lt;span style="color: blue"&gt;return &lt;/span&gt;&lt;span style="color: olive"&gt;"SharedKeyLite &lt;/span&gt;&lt;span style="color: blue"&gt;$account_name&lt;/span&gt;&lt;span style="color: olive"&gt;:"&lt;/span&gt;&lt;span style="color: purple"&gt;.&lt;/span&gt;&lt;span style="color: blue"&gt;$signed_message&lt;/span&gt;;
&lt;span style="color: purple"&gt;    }&lt;/span&gt;&lt;/pre&gt;&lt;pre class="code"&gt;&lt;span style="color: purple"&gt;&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;h4&gt;Create the HTTP Headers&lt;/h4&gt;
&lt;p&gt;The next line after returning the signature simply calls a helper method to return an array containing the HTTP headers:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: green"&gt;    //Get the http headers array
    &lt;/span&gt;&lt;span style="color: blue"&gt;$headers &lt;/span&gt;&lt;span style="color: purple"&gt;= &lt;/span&gt;self&lt;span style="color: purple"&gt;::&lt;/span&gt;GetHttpHeaders&lt;span style="color: purple"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;$date&lt;/span&gt;&lt;span style="color: purple"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;$signed_message&lt;/span&gt;&lt;span style="color: purple"&gt;)&lt;/span&gt;;&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;Here is the helper method:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;    public static function &lt;/span&gt;GetHttpHeaders&lt;span style="color: purple"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;$date&lt;/span&gt;&lt;span style="color: purple"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;$signed_message&lt;/span&gt;&lt;span style="color: purple"&gt;){
            &lt;/span&gt;&lt;span style="color: blue"&gt;return array&lt;/span&gt;&lt;span style="color: purple"&gt;(&lt;/span&gt;&lt;span style="color: olive"&gt;"x-ms-date:&lt;/span&gt;&lt;span style="color: blue"&gt;$date&lt;/span&gt;&lt;span style="color: olive"&gt;"&lt;/span&gt;&lt;span style="color: purple"&gt;, 
                         &lt;/span&gt;&lt;span style="color: olive"&gt;"Authorization:&lt;/span&gt;&lt;span style="color: blue"&gt;$signed_message&lt;/span&gt;&lt;span style="color: olive"&gt;"&lt;/span&gt;&lt;span style="color: purple"&gt;, 
                         &lt;/span&gt;&lt;span style="color: olive"&gt;"Accept:application/atom+xml, 
                         application/xml"&lt;/span&gt;&lt;span style="color: purple"&gt;)&lt;/span&gt;;
    &lt;span style="color: purple"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;Issue the Request&lt;/h4&gt;
&lt;p&gt;The next few lines use CURL to issue the HTTP GET Request to the URI we calculated, passing the HTTP headers&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;    $session &lt;/span&gt;&lt;span style="color: purple"&gt;= &lt;/span&gt;curl_init&lt;span style="color: purple"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;$service_uri&lt;/span&gt;&lt;span style="color: purple"&gt;)&lt;/span&gt;;
    curl_setopt&lt;span style="color: purple"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;$session&lt;/span&gt;&lt;span style="color: purple"&gt;, &lt;/span&gt;CURLOPT_HEADER&lt;span style="color: purple"&gt;, &lt;/span&gt;&lt;span style="color: red"&gt;1&lt;/span&gt;&lt;span style="color: purple"&gt;)&lt;/span&gt;;

    curl_setopt&lt;span style="color: purple"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;$session&lt;/span&gt;&lt;span style="color: purple"&gt;, &lt;/span&gt;CURLOPT_HTTPHEADER&lt;span style="color: purple"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;$headers&lt;/span&gt;&lt;span style="color: purple"&gt;)&lt;/span&gt;;
    curl_setopt&lt;span style="color: purple"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;$session&lt;/span&gt;&lt;span style="color: purple"&gt;, &lt;/span&gt;CURLOPT_RETURNTRANSFER&lt;span style="color: purple"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;true&lt;/span&gt;&lt;span style="color: purple"&gt;)&lt;/span&gt;;
&lt;span style="color: blue"&gt;    $response &lt;/span&gt;&lt;span style="color: purple"&gt;= &lt;/span&gt;curl_exec&lt;span style="color: purple"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;$session&lt;/span&gt;&lt;span style="color: purple"&gt;)
        or &lt;/span&gt;&lt;span style="color: blue"&gt;die&lt;/span&gt;&lt;span style="color: purple"&gt;(&lt;/span&gt;&lt;span style="color: olive"&gt;'Curl error: ' &lt;/span&gt;&lt;span style="color: purple"&gt;. &lt;/span&gt;curl_error&lt;span style="color: purple"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;$session&lt;/span&gt;&lt;span style="color: purple"&gt;))&lt;/span&gt;;&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;Parse the Response HTTP Headers&lt;/h4&gt;
&lt;p&gt;The next few lines parse the HTTP Headers from the response.&amp;nbsp; CURL doesn’t give you access to an array of headers.&amp;nbsp; You have to do this yourself.&amp;nbsp; We have to in order to parse out the continuation headers that are returned.&amp;nbsp; These provide a pointer to us for paging.&amp;nbsp; Remember earlier when we added the querystring parameters?&amp;nbsp; We used the values passed here from a previous Response.&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: green"&gt;    //Split the response into headers and the actual response body
&lt;/span&gt;&lt;span style="color: green"&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;    list&lt;/span&gt;&lt;span style="color: purple"&gt;( &lt;/span&gt;&lt;span style="color: blue"&gt;$outheaders&lt;/span&gt;&lt;span style="color: purple"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;$body &lt;/span&gt;&lt;span style="color: purple"&gt;)= &lt;/span&gt;explode&lt;span style="color: purple"&gt;( &lt;/span&gt;&lt;span style="color: olive"&gt;"\r\n\r\n"&lt;/span&gt;&lt;span style="color: purple"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;$response&lt;/span&gt;&lt;span style="color: purple"&gt;, &lt;/span&gt;&lt;span style="color: red"&gt;2 &lt;/span&gt;&lt;span style="color: purple"&gt;)&lt;/span&gt;;

&lt;span style="color: green"&gt;    //Split the outheaders into an array and set the ref arguments
&lt;/span&gt;&lt;span style="color: blue"&gt;    $outheadersArray &lt;/span&gt;&lt;span style="color: purple"&gt;= &lt;/span&gt;self&lt;span style="color: purple"&gt;::&lt;/span&gt;http_parse_headers&lt;span style="color: purple"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;$outheaders&lt;/span&gt;&lt;span style="color: purple"&gt;)&lt;/span&gt;;
&lt;span style="color: blue"&gt;    if &lt;/span&gt;&lt;span style="color: purple"&gt;(&lt;/span&gt;array_key_exists&lt;span style="color: purple"&gt;(&lt;/span&gt;&lt;span style="color: olive"&gt;'x-ms-continuation-NextPartitionKey'&lt;/span&gt;&lt;span style="color: purple"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;$outheadersArray&lt;/span&gt;&lt;span style="color: purple"&gt;))
        &lt;/span&gt;&lt;span style="color: blue"&gt;$nextPartition &lt;/span&gt;&lt;span style="color: purple"&gt;= &lt;/span&gt;&lt;span style="color: blue"&gt;$outheadersArray&lt;/span&gt;&lt;span style="color: purple"&gt;[&lt;/span&gt;&lt;span style="color: olive"&gt;'x-ms-continuation-NextPartitionKey'&lt;/span&gt;&lt;span style="color: purple"&gt;]&lt;/span&gt;;
&lt;span style="color: blue"&gt;    else
        $nextPartition &lt;/span&gt;&lt;span style="color: purple"&gt;= &lt;/span&gt;&lt;span style="color: olive"&gt;""&lt;/span&gt;;
&lt;span style="color: blue"&gt;    if &lt;/span&gt;&lt;span style="color: purple"&gt;(&lt;/span&gt;array_key_exists&lt;span style="color: purple"&gt;(&lt;/span&gt;&lt;span style="color: olive"&gt;'x-ms-continuation-NextRowKey'&lt;/span&gt;&lt;span style="color: purple"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;$outheadersArray&lt;/span&gt;&lt;span style="color: purple"&gt;))
        &lt;/span&gt;&lt;span style="color: blue"&gt;$nextRow &lt;/span&gt;&lt;span style="color: purple"&gt;= &lt;/span&gt;&lt;span style="color: blue"&gt;$outheadersArray&lt;/span&gt;&lt;span style="color: purple"&gt;[&lt;/span&gt;&lt;span style="color: olive"&gt;'x-ms-continuation-NextRowKey'&lt;/span&gt;&lt;span style="color: purple"&gt;]&lt;/span&gt;;
&lt;span style="color: blue"&gt;    else
        $nextRow &lt;/span&gt;&lt;span style="color: purple"&gt;= &lt;/span&gt;&lt;span style="color: olive"&gt;""&lt;/span&gt;;&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;Here is the helper method http_parse_headers:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;    static function &lt;/span&gt;http_parse_headers&lt;span style="color: purple"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;$headers&lt;/span&gt;&lt;span style="color: purple"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;false&lt;/span&gt;&lt;span style="color: purple"&gt;){
        &lt;/span&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt;&lt;span style="color: purple"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;$headers &lt;/span&gt;&lt;span style="color: purple"&gt;=== &lt;/span&gt;&lt;span style="color: blue"&gt;false&lt;/span&gt;&lt;span style="color: purple"&gt;){
            &lt;/span&gt;&lt;span style="color: blue"&gt;return false&lt;/span&gt;;
        &lt;span style="color: purple"&gt;}
    
        &lt;/span&gt;&lt;span style="color: blue"&gt;$headers &lt;/span&gt;&lt;span style="color: purple"&gt;= &lt;/span&gt;str_replace&lt;span style="color: purple"&gt;(&lt;/span&gt;&lt;span style="color: olive"&gt;"\r"&lt;/span&gt;&lt;span style="color: purple"&gt;, &lt;/span&gt;&lt;span style="color: olive"&gt;""&lt;/span&gt;&lt;span style="color: purple"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;$headers&lt;/span&gt;&lt;span style="color: purple"&gt;)&lt;/span&gt;;
        &lt;span style="color: blue"&gt;$headers &lt;/span&gt;&lt;span style="color: purple"&gt;= &lt;/span&gt;explode&lt;span style="color: purple"&gt;(&lt;/span&gt;&lt;span style="color: olive"&gt;"\n"&lt;/span&gt;&lt;span style="color: purple"&gt;,&lt;/span&gt;&lt;span style="color: blue"&gt;$headers&lt;/span&gt;&lt;span style="color: purple"&gt;)&lt;/span&gt;;
    
        &lt;span style="color: blue"&gt;foreach&lt;/span&gt;&lt;span style="color: purple"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;$headers as $value&lt;/span&gt;&lt;span style="color: purple"&gt;){
            &lt;/span&gt;&lt;span style="color: blue"&gt;$header &lt;/span&gt;&lt;span style="color: purple"&gt;= &lt;/span&gt;explode&lt;span style="color: purple"&gt;(&lt;/span&gt;&lt;span style="color: olive"&gt;": "&lt;/span&gt;&lt;span style="color: purple"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;$value&lt;/span&gt;&lt;span style="color: purple"&gt;)&lt;/span&gt;;

            &lt;span style="color: blue"&gt;if&lt;/span&gt;&lt;span style="color: purple"&gt;(&lt;/span&gt;count&lt;span style="color: purple"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;$header&lt;/span&gt;&lt;span style="color: purple"&gt;) == &lt;/span&gt;&lt;span style="color: red"&gt;1&lt;/span&gt;&lt;span style="color: purple"&gt;){
                &lt;/span&gt;&lt;span style="color: blue"&gt;$headerdata&lt;/span&gt;&lt;span style="color: purple"&gt;[&lt;/span&gt;&lt;span style="color: olive"&gt;'status'&lt;/span&gt;&lt;span style="color: purple"&gt;] = &lt;/span&gt;&lt;span style="color: blue"&gt;$header&lt;/span&gt;&lt;span style="color: purple"&gt;[&lt;/span&gt;&lt;span style="color: red"&gt;0&lt;/span&gt;&lt;span style="color: purple"&gt;]&lt;/span&gt;; 
            &lt;span style="color: purple"&gt;}
            &lt;/span&gt;&lt;span style="color: blue"&gt;elseif&lt;/span&gt;&lt;span style="color: purple"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;$header&lt;/span&gt;&lt;span style="color: purple"&gt;[&lt;/span&gt;&lt;span style="color: red"&gt;0&lt;/span&gt;&lt;span style="color: purple"&gt;] &amp;amp;&amp;amp; &lt;/span&gt;&lt;span style="color: blue"&gt;$header&lt;/span&gt;&lt;span style="color: purple"&gt;[&lt;/span&gt;&lt;span style="color: red"&gt;1&lt;/span&gt;&lt;span style="color: purple"&gt;]){
                &lt;/span&gt;&lt;span style="color: blue"&gt;$headerdata&lt;/span&gt;&lt;span style="color: purple"&gt;[&lt;/span&gt;&lt;span style="color: blue"&gt;$header&lt;/span&gt;&lt;span style="color: purple"&gt;[&lt;/span&gt;&lt;span style="color: red"&gt;0&lt;/span&gt;&lt;span style="color: purple"&gt;]] = &lt;/span&gt;&lt;span style="color: blue"&gt;$header&lt;/span&gt;&lt;span style="color: purple"&gt;[&lt;/span&gt;&lt;span style="color: red"&gt;1&lt;/span&gt;&lt;span style="color: purple"&gt;]&lt;/span&gt;;
            &lt;span style="color: purple"&gt;}
        }
    
        &lt;/span&gt;&lt;span style="color: blue"&gt;return $headerdata&lt;/span&gt;;
&lt;span style="color: purple"&gt;    }&lt;/span&gt;&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;Return the Response Body&lt;/h4&gt;
&lt;p&gt;The last 2 lines simply clean up and return the response body.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; curl_close&lt;span style="color: purple"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;$session&lt;/span&gt;&lt;span style="color: purple"&gt;)&lt;/span&gt;;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;return $body&lt;/span&gt;;&lt;/p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;WineContext.php&lt;/h3&gt;
&lt;p&gt;This class calls our helper class above, parses the ATOM Formatted response and returns a collection of the Wine class.&amp;nbsp; I’m not going to go into any detail, as it is pretty straightforward:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;    public static function &lt;/span&gt;GetWinePage&lt;span style="color: purple"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;$table_name&lt;/span&gt;&lt;span style="color: purple"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;$pageSize&lt;/span&gt;&lt;span style="color: purple"&gt;, &amp;amp;&lt;/span&gt;&lt;span style="color: blue"&gt;$nextPartition&lt;/span&gt;&lt;span style="color: purple"&gt;, &amp;amp;&lt;/span&gt;&lt;span style="color: blue"&gt;$nextRow&lt;/span&gt;&lt;span style="color: purple"&gt;)
    {
        &lt;/span&gt;&lt;span style="color: blue"&gt;include_once&lt;/span&gt;&lt;span style="color: purple"&gt;(&lt;/span&gt;&lt;span style="color: olive"&gt;'config.php'&lt;/span&gt;&lt;span style="color: purple"&gt;)&lt;/span&gt;;

        
        &lt;span style="color: blue"&gt;$wines &lt;/span&gt;&lt;span style="color: purple"&gt;= &lt;/span&gt;&lt;span style="color: blue"&gt;array&lt;/span&gt;&lt;span style="color: purple"&gt;()&lt;/span&gt;;
        &lt;span style="color: blue"&gt;$response &lt;/span&gt;&lt;span style="color: purple"&gt;= &lt;/span&gt;PHPTableStorageHelper&lt;span style="color: purple"&gt;::&lt;/span&gt;GetResponse&lt;span style="color: purple"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;$accountName&lt;/span&gt;&lt;span style="color: purple"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;$sharedKey&lt;/span&gt;&lt;span style="color: purple"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;$table_name&lt;/span&gt;&lt;span style="color: purple"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;$pageSize&lt;/span&gt;&lt;span style="color: purple"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;$nextPartition&lt;/span&gt;&lt;span style="color: purple"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;$nextRow&lt;/span&gt;&lt;span style="color: purple"&gt;)&lt;/span&gt;;

        &lt;span style="color: green"&gt;//Load the xml into simplexml and register the namespaces
        //referenced in the xml
        &lt;/span&gt;&lt;span style="color: blue"&gt;$dom &lt;/span&gt;&lt;span style="color: purple"&gt;= &lt;/span&gt;&lt;span style="color: blue"&gt;new &lt;/span&gt;SimpleXMLElement&lt;span style="color: purple"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;$response&lt;/span&gt;&lt;span style="color: purple"&gt;)&lt;/span&gt;;

        &lt;span style="color: green"&gt;//Create vars for the namespaces.  
        //Calls to children takes the namespace (if exists)
        &lt;/span&gt;&lt;span style="color: blue"&gt;$metadataNS &lt;/span&gt;&lt;span style="color: purple"&gt;= &lt;/span&gt;&lt;span style="color: olive"&gt;"http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"&lt;/span&gt;;
        &lt;span style="color: blue"&gt;$dataservicesNS &lt;/span&gt;&lt;span style="color: purple"&gt;= &lt;/span&gt;&lt;span style="color: olive"&gt;"http://schemas.microsoft.com/ado/2007/08/dataservices"&lt;/span&gt;;
        
        &lt;span style="color: green"&gt;//Iterate over the entity nodes
        &lt;/span&gt;&lt;span style="color: blue"&gt;foreach&lt;/span&gt;&lt;span style="color: purple"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;$dom&lt;/span&gt;&lt;span style="color: purple"&gt;-&amp;gt;&lt;/span&gt;entry &lt;span style="color: blue"&gt;as $entry&lt;/span&gt;&lt;span style="color: purple"&gt;) {
            &lt;/span&gt;&lt;span style="color: green"&gt;//Get a reference to the properties node
            &lt;/span&gt;&lt;span style="color: blue"&gt;$properties &lt;/span&gt;&lt;span style="color: purple"&gt;= &lt;/span&gt;&lt;span style="color: blue"&gt;$entry&lt;/span&gt;&lt;span style="color: purple"&gt;-&amp;gt;&lt;/span&gt;content&lt;span style="color: purple"&gt;-&amp;gt;&lt;/span&gt;children&lt;span style="color: purple"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;$metadataNS&lt;/span&gt;&lt;span style="color: purple"&gt;)-&amp;gt;&lt;/span&gt;children&lt;span style="color: purple"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;$dataservicesNS&lt;/span&gt;&lt;span style="color: purple"&gt;)&lt;/span&gt;;
            
            &lt;span style="color: green"&gt;//Create the wine
            &lt;/span&gt;&lt;span style="color: blue"&gt;$wine &lt;/span&gt;&lt;span style="color: purple"&gt;= &lt;/span&gt;&lt;span style="color: blue"&gt;new &lt;/span&gt;Wine&lt;span style="color: purple"&gt;()&lt;/span&gt;;
            &lt;span style="color: blue"&gt;$wine&lt;/span&gt;&lt;span style="color: purple"&gt;-&amp;gt;&lt;/span&gt;WineID &lt;span style="color: purple"&gt;= &lt;/span&gt;&lt;span style="color: blue"&gt;(int)&lt;/span&gt;&lt;span style="color: purple"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;$properties&lt;/span&gt;&lt;span style="color: purple"&gt;-&amp;gt;&lt;/span&gt;WineID&lt;span style="color: purple"&gt;)&lt;/span&gt;;
            &lt;span style="color: blue"&gt;$wine&lt;/span&gt;&lt;span style="color: purple"&gt;-&amp;gt;&lt;/span&gt;ShortWineName &lt;span style="color: purple"&gt;= &lt;/span&gt;&lt;span style="color: blue"&gt;(string)&lt;/span&gt;&lt;span style="color: purple"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;$properties&lt;/span&gt;&lt;span style="color: purple"&gt;-&amp;gt;&lt;/span&gt;ShortWineName&lt;span style="color: purple"&gt;)&lt;/span&gt;;
            &lt;span style="color: blue"&gt;$wine&lt;/span&gt;&lt;span style="color: purple"&gt;-&amp;gt;&lt;/span&gt;Description &lt;span style="color: purple"&gt;= &lt;/span&gt;&lt;span style="color: blue"&gt;(string)&lt;/span&gt;&lt;span style="color: purple"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;$properties&lt;/span&gt;&lt;span style="color: purple"&gt;-&amp;gt;&lt;/span&gt;Description&lt;span style="color: purple"&gt;)&lt;/span&gt;;
            &lt;span style="color: blue"&gt;$wine&lt;/span&gt;&lt;span style="color: purple"&gt;-&amp;gt;&lt;/span&gt;BottlePrice &lt;span style="color: purple"&gt;= &lt;/span&gt;&lt;span style="color: blue"&gt;(float)&lt;/span&gt;&lt;span style="color: purple"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;$properties&lt;/span&gt;&lt;span style="color: purple"&gt;-&amp;gt;&lt;/span&gt;BottlePrice&lt;span style="color: purple"&gt;)&lt;/span&gt;;
            &lt;span style="color: blue"&gt;$wine&lt;/span&gt;&lt;span style="color: purple"&gt;-&amp;gt;&lt;/span&gt;Vintage &lt;span style="color: purple"&gt;= &lt;/span&gt;&lt;span style="color: blue"&gt;(string)&lt;/span&gt;&lt;span style="color: purple"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;$properties&lt;/span&gt;&lt;span style="color: purple"&gt;-&amp;gt;&lt;/span&gt;Vintage&lt;span style="color: purple"&gt;)&lt;/span&gt;;
            &lt;span style="color: blue"&gt;$wine&lt;/span&gt;&lt;span style="color: purple"&gt;-&amp;gt;&lt;/span&gt;WineLabelUrl &lt;span style="color: purple"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;(string)&lt;/span&gt;&lt;span style="color: purple"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;$properties&lt;/span&gt;&lt;span style="color: purple"&gt;-&amp;gt;&lt;/span&gt;WineLabelUrl&lt;span style="color: purple"&gt;)&lt;/span&gt;;

            &lt;span style="color: green"&gt;//Add the wine to the array
            &lt;/span&gt;&lt;span style="color: blue"&gt;$wines&lt;/span&gt;&lt;span style="color: purple"&gt;[] = &lt;/span&gt;&lt;span style="color: blue"&gt;$wine&lt;/span&gt;;
        &lt;span style="color: purple"&gt;}
        
        &lt;/span&gt;&lt;span style="color: blue"&gt;return $wines&lt;/span&gt;;
    &lt;span style="color: purple"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;Catalog.php&lt;/h3&gt;
&lt;p&gt;Now on to consuming our classes.&amp;nbsp; I’m not going to get into all of the paging logic and UI code.&amp;nbsp; At the end of this post is a link where you can download all of the files.&amp;nbsp; The paging code should be pretty self-explanatory.&amp;nbsp; I do want to show you the code that calls our context and writes the HTML, though.&amp;nbsp; Firstly, I included the context and the wine classes:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&amp;lt;?php
    include&lt;/span&gt;&lt;span style="color: purple"&gt;(&lt;/span&gt;&lt;span style="color: olive"&gt;'Wine.php'&lt;/span&gt;&lt;span style="color: purple"&gt;)&lt;/span&gt;;
    &lt;span style="color: blue"&gt;include&lt;/span&gt;&lt;span style="color: purple"&gt;(&lt;/span&gt;&lt;span style="color: olive"&gt;'WineContext.php'&lt;/span&gt;&lt;span style="color: purple"&gt;)&lt;/span&gt;;
&lt;span style="color: blue"&gt;?&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;Next, at the appropriate place in the HTML, I call our context and return the array of wines.&amp;nbsp; I then iterate over the results, outputting the appropriate HTML.&lt;/p&gt;
&lt;p&gt;&lt;span style="color: blue"&gt;&amp;lt;?php&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green"&gt;//Get the data&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;$table_name&lt;/span&gt;&lt;span style="color: purple"&gt;=&lt;/span&gt;&lt;span style="color: olive"&gt;"Wines"&lt;/span&gt;;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;$wines&lt;/span&gt;&lt;span style="color: purple"&gt;=&lt;/span&gt;CohoStorageData&lt;span style="color: purple"&gt;::&lt;/span&gt;GetWinePage&lt;span style="color: purple"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;$table_name&lt;/span&gt;&lt;span style="color: purple"&gt;,&lt;/span&gt;&lt;span style="color: red"&gt;2&lt;/span&gt;&lt;span style="color: purple"&gt;,&lt;/span&gt;&lt;span style="color: blue"&gt;$nextPartition&lt;/span&gt;&lt;span style="color: purple"&gt;,&lt;/span&gt;&lt;span style="color: blue"&gt;$nextRow&lt;/span&gt;&lt;span style="color: purple"&gt;)&lt;/span&gt;;&lt;br&gt;&lt;br&gt;&lt;span style="color: green"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Add the next row returned from the service to the array&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;$nextRowArray&lt;/span&gt;&lt;span style="color: purple"&gt;[] =&lt;/span&gt;&lt;span style="color: blue"&gt;$nextRow&lt;/span&gt;;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green"&gt;//Iterate over the results&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;foreach &lt;/span&gt;&lt;span style="color: purple"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;$wines as $wine&lt;/span&gt;&lt;span style="color: purple"&gt;)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;echo&lt;/span&gt;&lt;span style="color: olive"&gt;'&amp;lt;tr&amp;gt;'&lt;/span&gt;;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;echo&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: olive"&gt;'&amp;lt;td&amp;gt;'&lt;/span&gt;;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;echo&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: olive"&gt;'&amp;lt;table width="100%" border="0" align="center" cellpadding="8" cellspacing="0" class="thinblueline" style="background-color: White;"&amp;gt;'&lt;/span&gt;;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;echo&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: olive"&gt;'&amp;lt;tr&amp;gt;'&lt;/span&gt;;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;echo&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: olive"&gt;'&amp;lt;td valign="top"&amp;gt;'&lt;/span&gt;;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;echo&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: olive"&gt;'&amp;lt;img src="'&lt;/span&gt;&lt;span style="color: purple"&gt;.&lt;/span&gt;&lt;span style="color: blue"&gt;$wine&lt;/span&gt;&lt;span style="color: purple"&gt;-&amp;gt;&lt;/span&gt;WineLabelUrl &lt;span style="color: purple"&gt;.&lt;/span&gt;&lt;span style="color: olive"&gt;'" /&amp;gt;'&lt;/span&gt;;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;echo&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: olive"&gt;'&amp;lt;/td&amp;gt;'&lt;/span&gt;;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;echo&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: olive"&gt;'&amp;lt;td valign="top"&amp;gt;'&lt;/span&gt;;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;echo&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: olive"&gt;'&amp;lt;strong&amp;gt;'&lt;/span&gt;;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;echo&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $wine&lt;/span&gt;&lt;span style="color: purple"&gt;-&amp;gt;&lt;/span&gt;ShortWineName;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;echo&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: olive"&gt;'&amp;lt;/strong&amp;gt;'&lt;/span&gt;;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;echo&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: olive"&gt;'&amp;lt;br /&amp;gt;'&lt;/span&gt;;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;echo&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: olive"&gt;'&amp;lt;span&amp;gt;'&lt;/span&gt;;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;echo&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $wine&lt;/span&gt;&lt;span style="color: purple"&gt;-&amp;gt;&lt;/span&gt;Description;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;echo&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: olive"&gt;'&amp;lt;/span&amp;gt;'&lt;/span&gt;;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;echo&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: olive"&gt;'&amp;lt;br /&amp;gt;'&lt;/span&gt;;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;echo&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: olive"&gt;'&amp;lt;br /&amp;gt;'&lt;/span&gt;;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;echo&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: olive"&gt;'&amp;lt;/td&amp;gt;'&lt;/span&gt;;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;echo&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: olive"&gt;'&amp;lt;td width="80" align="right" valign="top"&amp;gt;'&lt;/span&gt;;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;echo&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: olive"&gt;'&amp;lt;strong&amp;gt;'&lt;/span&gt;;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;echo&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: olive"&gt;'$'&lt;/span&gt;&lt;span style="color: purple"&gt;.&lt;/span&gt;number_format&lt;span style="color: purple"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;$wine&lt;/span&gt;&lt;span style="color: purple"&gt;-&amp;gt;&lt;/span&gt;BottlePrice&lt;span style="color: purple"&gt;,&lt;/span&gt;&lt;span style="color: red"&gt;2&lt;/span&gt;&lt;span style="color: purple"&gt;,&lt;/span&gt;&lt;span style="color: olive"&gt;'.'&lt;/span&gt;&lt;span style="color: purple"&gt;,&lt;/span&gt;&lt;span style="color: olive"&gt;' '&lt;/span&gt;&lt;span style="color: purple"&gt;)&lt;/span&gt;;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;echo&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: olive"&gt;'&amp;lt;/strong&amp;gt;'&lt;/span&gt;;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;echo&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: olive"&gt;'&amp;lt;br /&amp;gt;'&lt;/span&gt;;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;echo&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: olive"&gt;'&amp;lt;br /&amp;gt;'&lt;/span&gt;;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;echo&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: olive"&gt;'&amp;lt;img id="ImageButton1" productid="'&lt;/span&gt;&lt;span style="color: purple"&gt;.&lt;/span&gt;&lt;span style="color: blue"&gt;$wine&lt;/span&gt;&lt;span style="color: purple"&gt;-&amp;gt;&lt;/span&gt;WineID &lt;span style="color: purple"&gt;.&lt;/span&gt;&lt;span style="color: olive"&gt;'" cssclass="noUnderline" onclick="ItemSelected" src="images/selectbutton.gif" /&amp;gt;'&lt;/span&gt;;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;echo&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: olive"&gt;'&amp;lt;/td&amp;gt;'&lt;/span&gt;;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;echo&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: olive"&gt;'&amp;lt;/tr&amp;gt;'&lt;/span&gt;;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;echo&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: olive"&gt;'&amp;lt;/table&amp;gt;'&lt;/span&gt;;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;echo&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: olive"&gt;'&amp;lt;/td&amp;gt;'&lt;/span&gt;;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;echo&lt;/span&gt;&lt;span style="color: olive"&gt;'&amp;lt;/tr&amp;gt;'&lt;/span&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: purple"&gt;}&lt;br&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;?&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;Get the code&lt;/h3&gt;
&lt;p&gt;You can download the code &lt;a href="http://cid-3c8d41bb553e84f5.skydrive.live.com/browse.aspx/PHPAzureTableSample?authkey=XcqxlQeS5HA%24 " target="_blank"&gt;here&lt;/a&gt;.&amp;nbsp; Don’t forget to add the appropriate account name and key in config.php.&amp;nbsp; Also, this code has no provisions for creating the tables or adding the records.&amp;nbsp; If you want direction on that, please follow &lt;a href="http://blogs.msdn.com/bags/archive/2009/04/09/building-an-azure-application-from-the-ground-up.aspx" target="_blank"&gt;this blog series&lt;/a&gt;.&amp;nbsp; It will illustrate how to do it (in .NET not PHP).&amp;nbsp; Otherwise, you can wait until July 31 (or shortly thereafter) and I will illustrate these features in the SDK for PHP.&lt;/p&gt;&lt;img src="https://blogs.msdn.com:443/aggbug.aspx?PostID=9829125" width="1" height="1"&gt;</description><category domain="https://blogs.msdn.com:443/bags/archive/tags/REST/default.aspx">REST</category><category domain="https://blogs.msdn.com:443/bags/archive/tags/Azure/default.aspx">Azure</category><category domain="https://blogs.msdn.com:443/bags/archive/tags/PHP/default.aspx">PHP</category><category domain="https://blogs.msdn.com:443/bags/archive/tags/Azure+Table+Storage/default.aspx">Azure Table Storage</category></item><item><title>Sum of a SQL Analysis Services calculated measure within a Reporting Services report gives #Error</title><link>https://blogs.msdn.com:443/sql_pfe_blog/archive/2009/07/10/sum-of-a-sql-analysis-services-calculated-measure-within-a-reporting-services-report-gives-error.aspx</link><pubDate>Fri, 10 Jul 2009 22:23:35 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9829122</guid><dc:creator>sqlpfebl</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Summing a SQL Analysis Services calculated measure result within a Reporting Services report gives #Error but the same calculated measure output can be summed within Analysis Services perfectly fine.  &lt;p&gt;Environment: SQL Server 2008 Analysis Services and Reporting Services + SP1, Report builder 2.0 sp1. This should be applicable to all SQL 2008 and 2005&amp;nbsp; Reporting Services versions prior as well. &lt;p&gt;&amp;nbsp; &lt;p&gt;If you look at&amp;nbsp; a report builder report, an expression of " =Sum(Fields!highsales.Value)" on a Analysis Services calculated member gives #Error. The zeros in column "highsales" are numeric values.  &lt;p&gt;The report (see screen shot #1 below) is generated base on the following MDX:  &lt;p&gt;&amp;nbsp; &lt;p&gt;with  &lt;p&gt;member measures.[highsales] as  &lt;p&gt;iif ([Measures].[Internet Sales Amount]&amp;gt; 20000000,  &lt;p&gt;measures.[internet sales amount], 0)  &lt;p&gt;member measures.[highsales2] as  &lt;p&gt;iif ([Measures].[Internet Sales Amount]&amp;gt; 20000000,  &lt;p&gt;measures.[internet sales amount], null)  &lt;p&gt;select  &lt;p&gt;{measures.highsales,measures.highsales2} on 0,  &lt;p&gt;{[Product].[Category].[Category], [Product].[Category].[ssas total]} on 1  &lt;p&gt;from [Adventure Works]  &lt;p&gt;&amp;nbsp; &lt;p&gt;Screen shot #1  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/sql_pfe_blog/WindowsLiveWriter/SumofaSQLAnalysisServicescalculatedmeasu_F487/clip_image001_2.jpg"&gt;&lt;img title="clip_image001" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="137" alt="clip_image001" src="http://blogs.msdn.com/blogfiles/sql_pfe_blog/WindowsLiveWriter/SumofaSQLAnalysisServicescalculatedmeasu_F487/clip_image001_thumb.jpg" width="432" border="0"&gt;&lt;/a&gt;  &lt;p&gt;If we calculate the total within Analysis Services using MDX, it gives the correct result (screen shot #2).  &lt;p&gt;Screen shot #2  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/sql_pfe_blog/WindowsLiveWriter/SumofaSQLAnalysisServicescalculatedmeasu_F487/clip_image002_2.jpg"&gt;&lt;img title="clip_image002" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="327" alt="clip_image002" src="http://blogs.msdn.com/blogfiles/sql_pfe_blog/WindowsLiveWriter/SumofaSQLAnalysisServicescalculatedmeasu_F487/clip_image002_thumb.jpg" width="440" border="0"&gt;&lt;/a&gt;  &lt;p&gt;&lt;strong&gt;Why does Reporting Services report return an error? &lt;/strong&gt;  &lt;p&gt;To find out more about the #Error, we can try the same report in BIDS and take a look at the warnings shown in the "Error List" pane.&amp;nbsp; It should contain a detailed error message indicating why the #Error occurred.&amp;nbsp; This information, unfortunately, is not currently surfaced in Report Builder 2.0.&amp;nbsp; &lt;p&gt;The warning we can see from BIDS  &lt;p&gt;&lt;font color="#ff0000"&gt;Warning&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [rsAggregateOfMixedDataTypes] The Value expression for the textrun 'Textbox8.Paragraphs[0].TextRuns[0]' uses an aggregate function on data of varying data types.&amp;nbsp; Aggregate functions other than First, Last, Previous, Count, and CountDistinct can only aggregate data of a single data type.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; C:\sumZeroGivesError.rdl&lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;p&gt;The error message indicates Reporting Services is receiving different data types within the column "highsales" and Reporting Services cannot sum over incompatible types.  &lt;p&gt;To see what are the actual data types seen by Reporting Services, we can add a new table to the report bound to the data set. &lt;strong&gt;&lt;em&gt;In the detail group scope, put the following expression in a TextBox value: =Fields!highsales.Value.GetType().Name&lt;/em&gt;&lt;/strong&gt;  &lt;p&gt;The output (Screen shot #4) shows the data type for the 0 values here are &lt;b&gt;Int16&lt;/b&gt; (or &lt;b&gt;DOUBLE&lt;/b&gt; if we switch the 0 to 0.0).  &lt;p&gt;Screen shot #4  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/sql_pfe_blog/WindowsLiveWriter/SumofaSQLAnalysisServicescalculatedmeasu_F487/clip_image003_2.jpg"&gt;&lt;img title="clip_image003" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="153" alt="clip_image003" src="http://blogs.msdn.com/blogfiles/sql_pfe_blog/WindowsLiveWriter/SumofaSQLAnalysisServicescalculatedmeasu_F487/clip_image003_thumb.jpg" width="495" border="0"&gt;&lt;/a&gt;  &lt;p&gt;Although we tend to think 0 and 28318144.6507 are "sum-able", the sum function in Reporting Services can only sum single type. We have two different data types.&amp;nbsp; That's why an error is raised  &lt;p&gt;Ref: See the footnote on the Type column of the Aggregate Functions table in the Report Definition Language Specification (&lt;a href="http://www.microsoft.com/australia/servers/sql/technologies/reporting/rdlspec.mspx"&gt;http://www.microsoft.com/australia/servers/sql/technologies/reporting/rdlspec.mspx&lt;/a&gt;):  &lt;p&gt;&lt;i&gt;For all aggregates other than First, Last and Count, the data type of the aggregated expression is expected to be fixed.&amp;nbsp; If values (other than null) are encountered of multiple data types, it is an error.&lt;/i&gt;  &lt;p&gt;&lt;b&gt;Solution Suggestion&lt;/b&gt;  &lt;p&gt;In order to fix the problem, we can convert the field to a particular type before passing the value to sum.&amp;nbsp; For example, if we have all the numbers in integer, we can use &lt;strong&gt;&lt;em&gt;"=Sum(CInt(Fields!Foo.Value))".&lt;/em&gt;&lt;/strong&gt;&amp;nbsp; In the example here, we have the number in decimal, we use "=Sum(CDec(Fields!highsales.Value))" to resolve the issue (Screen shot #5).  &lt;p&gt;Screens shot #5  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/sql_pfe_blog/WindowsLiveWriter/SumofaSQLAnalysisServicescalculatedmeasu_F487/clip_image004_2.jpg"&gt;&lt;img title="clip_image004" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="137" alt="clip_image004" src="http://blogs.msdn.com/blogfiles/sql_pfe_blog/WindowsLiveWriter/SumofaSQLAnalysisServicescalculatedmeasu_F487/clip_image004_thumb.jpg" width="450" border="0"&gt;&lt;/a&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;b&gt;C S John Lam &lt;/b&gt;| Premier Field Engineer - SQL Analysis Services &lt;/p&gt;&lt;img src="https://blogs.msdn.com:443/aggbug.aspx?PostID=9829122" width="1" height="1"&gt;</description><category domain="https://blogs.msdn.com:443/sql_pfe_blog/archive/tags/Reporting+Services/default.aspx">Reporting Services</category><category domain="https://blogs.msdn.com:443/sql_pfe_blog/archive/tags/Analysis+Services/default.aspx">Analysis Services</category></item><item><title>AD Lookup with ADAM/ADLDS</title><link>https://blogs.msdn.com:443/sfu/archive/2009/07/10/ad-lookup-with-adam-adlds.aspx</link><pubDate>Fri, 10 Jul 2009 22:17:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9829137</guid><dc:creator>sfu</dc:creator><slash:comments>0</slash:comments><description>AD Lookup with ADAM/ADLDS With removal of UNM in Vista/W2K8, it became really problematic to map users in non-AD environments to use with Vista/LH NFS Servers and Clients. For client, a workaround was discovered which was essentially a registry tweak and did allow more than user to be able to access the resources. Now, a guide exists that details the steps to install and configure ADLDS (Active Directory Lightweight Directory Services) and to use it with NFS for UNIX identity information source....(&lt;a href="https://blogs.msdn.com:443/sfu/archive/2009/07/10/ad-lookup-with-adam-adlds.aspx"&gt;read more&lt;/a&gt;)&lt;img src="https://blogs.msdn.com:443/aggbug.aspx?PostID=9829137" width="1" height="1"&gt;</description><category domain="https://blogs.msdn.com:443/sfu/archive/tags/Server+for+NFS/default.aspx">Server for NFS</category><category domain="https://blogs.msdn.com:443/sfu/archive/tags/Active+Directory+Lookup/default.aspx">Active Directory Lookup</category><category domain="https://blogs.msdn.com:443/sfu/archive/tags/Windows+Vista/default.aspx">Windows Vista</category><category domain="https://blogs.msdn.com:443/sfu/archive/tags/Client+for+NFS/default.aspx">Client for NFS</category><category domain="https://blogs.msdn.com:443/sfu/archive/tags/Windows+Server+2008/default.aspx">Windows Server 2008</category><category domain="https://blogs.msdn.com:443/sfu/archive/tags/ADAM/default.aspx">ADAM</category><category domain="https://blogs.msdn.com:443/sfu/archive/tags/ADLDS/default.aspx">ADLDS</category></item><item><title>Chalkbot at the Tour de France</title><link>https://blogs.msdn.com:443/stevecla01/archive/2009/07/10/chalkbot-at-the-tour-de-france.aspx</link><pubDate>Fri, 10 Jul 2009 22:01:56 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9829107</guid><dc:creator>stevecla01</dc:creator><slash:comments>0</slash:comments><description>&lt;object width="560" height="340"&gt;&lt;param name="movie" value="http://www.youtube.com/v/5Jb-KT4r6NY&amp;amp;hl=en&amp;amp;fs=1&amp;amp;color1=0x3a3a3a&amp;amp;color2=0x999999"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/5Jb-KT4r6NY&amp;amp;hl=en&amp;amp;fs=1&amp;amp;color1=0x3a3a3a&amp;amp;color2=0x999999" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"&gt;&lt;/embed&gt;&lt;/object&gt;  &lt;p&gt;&lt;a href="http://www.nike.com/nikeos/p/livestrong/en_US/chalk_messages"&gt;&lt;strong&gt;Chalkbot&lt;/strong&gt;&lt;/a&gt; is a project from Nike and Lance Armstrong’s Livestrong foundation. The Tour De France is no stranger to messages of inspiration painted on roads but they’ve taken this one step further with Chalkbot. It’s a robotic “chalk painter” that sprays yellow inked messages on the roads that have been sent from the web or via text messages. &lt;/p&gt;  &lt;p&gt;Head to &lt;a href="http://www.nike.com/nikeos/p/livestrong/en_US/chalk_messages"&gt;wearyellow.com&lt;/a&gt; to get your own message in the Tour and if you submit a message you’ll receive a confirmation email along with the GPS coordinates of where along the Tour de France route the message landed. You can follow Chalkbot on &lt;a href="http://twitter.com/chalkbot"&gt;Twitter&lt;/a&gt; too of course and the Chalkot site allows you to create wallpapers for your PC, Mac or iPhone that come out like this…&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/stevecla01/WindowsLiveWriter/ChalkbotattheTourdeFrance_143BA/wallpaper_iPhone.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="wallpaper_iPhone" border="0" alt="wallpaper_iPhone" src="http://blogs.msdn.com/blogfiles/stevecla01/WindowsLiveWriter/ChalkbotattheTourdeFrance_143BA/wallpaper_iPhone_thumb.jpg" width="164" height="244" /&gt;&lt;/a&gt; &lt;a href="http://blogs.msdn.com/blogfiles/stevecla01/WindowsLiveWriter/ChalkbotattheTourdeFrance_143BA/wallpaper_1920x1200.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="wallpaper_1920x1200" border="0" alt="wallpaper_1920x1200" src="http://blogs.msdn.com/blogfiles/stevecla01/WindowsLiveWriter/ChalkbotattheTourdeFrance_143BA/wallpaper_1920x1200_thumb.jpg" width="244" height="154" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Oh....and before you ask, the spray on chalk is fully bio-degradable and uses soy protein as a binder...so it’ll wash off!&lt;/p&gt;&lt;div class="wlWriterHeaderFooter" style="margin:0px; padding:0px 0px 0px 0px;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;
tweetmeme_url = 'http://blogs.msdn.com/stevecla01/archive/2009/07/10/chalkbot-at-the-tour-de-france.aspx';
tweetmeme_source = 'stevelca';
&lt;/script&gt;
&lt;script type="text/javascript" src="http://tweetmeme.com/i/scripts/button.js"&gt;&lt;/script&gt;&lt;/div&gt;&lt;img src="https://blogs.msdn.com:443/aggbug.aspx?PostID=9829107" width="1" height="1"&gt;</description><category domain="https://blogs.msdn.com:443/stevecla01/archive/tags/Geek+Stuff/default.aspx">Geek Stuff</category></item><item><title>Cyber Attacks Demonstrate Why Smart Grid Will Require Best in Class Security; Microsoft Offers Security Development Lifecycle Paper</title><link>https://blogs.msdn.com:443/mspowerutilities/archive/2009/07/10/cyber-attacks-demonstrate-why-smart-grid-will-require-best-in-class-security-microsoft-offers-security-development-lifecycle-paper.aspx</link><pubDate>Fri, 10 Jul 2009 21:32:38 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9829092</guid><dc:creator>MSPowerUtilities</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;The &lt;a href="http://www.breitbart.com/article.php?id=CNG.a6c27e3843e8f645f9e395649a3a85e5.c51&amp;amp;show_article=1"&gt;recent news of major, relentless cyber attacks&lt;/a&gt; on the State Department, White House, and Pentagon, as well as South Korean targets, sadly demonstrate why so much time, money and effort is being spent on ensuring that critical infrastructure, particularly that of the utility grid, is protected and secure.  &lt;p&gt;The lesson couldn’t be more stark as you consider that, as utility companies try to make the grid smarter by adding more devices, sensors, monitors and communication equipment, they will open new doors into the grid’s information network and create more vulnerabilities.&amp;nbsp; &lt;p&gt;There’s no question it’s a new day in utility security concerns. In the past, utility companies were lulled into a false sense of security. Legacy control systems were originally designed to be electrically disconnected from the Internet so that security implementations would be minimal, if they were considered at all.  &lt;p&gt;Surely, this is no longer the case. The Obama administration and North American Electric Reliability Corporation are aggressively studying system vulnerabilities and what utilities need to do to protect their critical infrastructure.  &lt;p&gt;Microsoft has established a unique approach to the development of security measures because of our extensive experience as the target of those who continuously look for vulnerabilities. As a result, Microsoft has taken the approach that security should not be just a bolt-on after-thought for its software solutions. We have endeavored to build a whole new class of products with security as a key area of focus and established a complete methodology for developing secure software, including design, coding, and test practices. The slogan we’ve developed along the way is “Secure by Design, Secure by Development, Secure by Deployment.”  &lt;p&gt;We believe that building security into products during each progressive step of the development process is more effective than addressing security after the fact. Utilities that are required to demonstrate exacting security prowess will come to appreciate this inside-out approach.  &lt;p&gt;While all new products from Microsoft must make their way through this process, it has become very clear that intruders have moved from targeting Microsoft code to attacking partner applications as well. Thus, to fully protect a company’s critical infrastructure, it is imperative that all deployed software adhere to good security practices.  &lt;p&gt;To help our partners understand this security approach we’ve recently posted on our Web site The &lt;a href="http://download.microsoft.com/download/B/9/5/B95C6EEC-7F2B-4E18-8C6C-D5EC9B2C9669/SDL_Guidance_Utilities.pdf" target="_blank"&gt;Microsoft Security Development Lifecycle&lt;/a&gt;: Key Resources for Software Development. The SDL process is part of Microsoft’s continuing effort to enable a more secure and trustworthy computing ecosystem and provides an in-depth description of the Microsoft SDL methodology and requirements.  &lt;p&gt;&lt;a href="http://www.microsoft.com/industry/manufacturing/utilities/default.mspx"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="image" border="0" alt="image" align="right" src="http://blogs.msdn.com/blogfiles/mspowerutilities/WindowsLiveWriter/CyberAttacksDemonstrateWhySmartGridWillR_F6AF/image_3.png" width="194" height="197"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;It’s our hope you will benefit from understanding the Security Development Lifecycle as a result of reading this paper. As usual, should you need more information, please don’t hesitate to contact us. – Larry Cochrane, &lt;i&gt;Worldwide Utilities Industry Technology Strategist/Architect&lt;/i&gt; &lt;p&gt;&lt;a href="http://download.microsoft.com/download/B/9/5/B95C6EEC-7F2B-4E18-8C6C-D5EC9B2C9669/SDL_Guidance_Utilities.pdf"&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="https://blogs.msdn.com:443/aggbug.aspx?PostID=9829092" width="1" height="1"&gt;</description></item><item><title>XPS Document API Now Available for Printer Driver Filter Modules</title><link>https://blogs.msdn.com:443/wdkdocs/archive/2009/07/10/xps-document-api-now-available-for-printer-driver-filter-modules.aspx</link><pubDate>Fri, 10 Jul 2009 21:32:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9829094</guid><dc:creator>wdkblog</dc:creator><slash:comments>0</slash:comments><description>&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;If you are a Print Driver developer using the XPS Filter Pipeline, you can now use unmanaged XPS functions that were previously only available as .NET managed code. Because these functions were originally written for .NET, they could not be called from a Print driver until now. &lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;These XPS functions will enable driver developers to modify XPS documents in greater detail when they are in the &lt;/FONT&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/aa506195.aspx"&gt;&lt;FONT size=3 face=Calibri&gt;filter pipeline&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3 face=Calibri&gt;. This will make it possible to make custom changes to the documents before they get to the printer.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;In addition, this API allows you to have access to the document metadata and content.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;This API was previously unavailable to Print Driver developers, but has been recently converted to unmanaged code and is now documented in the Windows SDK. The new documentation includes overviews of the XPS Object Model and complete coverage of all interfaces, methods, structures, and enumerators that are implemented by the XPS API. &lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;For more information, see the XPS Document Programming Guide and Reference at &lt;/FONT&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/dd316976(VS.85).aspx"&gt;&lt;FONT color=#0000ff size=3 face=Calibri&gt;http://msdn.microsoft.com/en-us/library/dd316976(VS.85).aspx&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3 face=Calibri&gt;.&lt;/FONT&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="https://blogs.msdn.com:443/aggbug.aspx?PostID=9829094" width="1" height="1"&gt;</description><category domain="https://blogs.msdn.com:443/wdkdocs/archive/tags/Printing/default.aspx">Printing</category><category domain="https://blogs.msdn.com:443/wdkdocs/archive/tags/XPS/default.aspx">XPS</category></item><item><title>I’m a VB</title><link>https://blogs.msdn.com:443/usisvde/archive/2009/07/10/i-m-a-vb.aspx</link><pubDate>Fri, 10 Jul 2009 21:24:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9815554</guid><dc:creator>Bruce Kyle</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/vbasic/dd776132.aspx"&gt;&lt;img style="border-right-width: 0px; margin: 0px 0px 5px 5px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="dd776132_IMAVB_150px(en-us,MSDN_10)" border="0" alt="dd776132_IMAVB_150px(en-us,MSDN_10)" align="right" src="http://blogs.msdn.com/blogfiles/usisvde/WindowsLiveWriter/ImaVB_10373/dd776132_IMAVB_150px(en-us,MSDN_10)_3.jpg" width="150" height="113" /&gt;&lt;/a&gt; Who is the “typical VB.NET developer”? Is there one? There are millions of VB.NET developers in the world, and they each have their own unique story. &lt;/p&gt;  &lt;p&gt;We decided to talk to some of them to find out what kinds of applications they’re building, what technologies they’re using, and what their favorite features are. Watch the interviews and find out for yourself who today's VB.NET developers really are!&lt;/p&gt;  &lt;p&gt;For more information, see &lt;a href="http://msdn.microsoft.com/en-us/vbasic/dd776132.aspx"&gt;I'm a VB!&lt;/a&gt; on MSDN.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color: #548dd4; font-size: 14pt" lang="EN-GB"&gt;Bruce D. Kyle&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="color: black; font-size: 14pt" lang="EN-GB"&gt;        &lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="color: gray; font-size: 10pt"&gt;ISV Architect Evangelist&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="font-size: 10pt"&gt; | &lt;span style="color: gray"&gt;Microsoft Corporation&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;a href="http://www.facebook.com/brucedkyle"&gt;&lt;span style="color: windowtext; font-size: 10pt; text-decoration: none"&gt;&lt;img id="Picture 7" border="0" alt="cid:image010.png@01C9DEED.1FDB2200" src="http://wqblcw.bay.livefilestore.com/y1phiYtqdt01WbX-WEkFeHdgc-vGh3uFaTXPkWWsSxBgSwGmjVFtf3ng7PyxsJc3-Yqi2QynvaL6yg/Facebook.gif" width="16" height="16" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size: 10pt"&gt; &lt;/span&gt;&lt;a href="http://www.linkedin.com/in/bdkyle"&gt;&lt;span style="color: windowtext; font-size: 10pt; text-decoration: none"&gt;&lt;img id="Picture 8" border="0" alt="cid:image011.png@01C9DEED.1FDB2200" src="http://wqblcw.bay.livefilestore.com/y1pR3zivTY9cjlrke7b1fEP372RxZzpJ97ZTTpGTudkvE0tRfmeEg40fNMS0rYICJm5cdx_5r9hgZY/linkedin.gif" width="16" height="16" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size: 10pt"&gt;&amp;#160;&lt;/span&gt;&lt;a href="http://twitter.com/brucedkyle"&gt;&lt;span style="color: windowtext; font-size: 10pt; text-decoration: none"&gt;&lt;img id="Picture 9" border="0" alt="cid:image012.gif@01C9DEED.1FDB2200" src="http://wqblcw.bay.livefilestore.com/y1pFQPRF30RihrH1twKjGCuXhhRR0tWxZDxgoEr_pwDvZJ3mD5Mgm7JM0szdleOWYSOIAXrYJeaHqo/Twitter.gif" width="16" height="16" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/MVP" rel="tag"&gt;MVP&lt;/a&gt;,&lt;a href="http://technorati.com/tags/VB" rel="tag"&gt;VB&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Developers" rel="tag"&gt;Developers&lt;/a&gt;     &lt;br /&gt;Windows Live Tags: &lt;a href="http://windows.live.com/connect/tag/MVP" rel="clubhouseTag"&gt;MVP&lt;/a&gt;,&lt;a href="http://windows.live.com/connect/tag/VB" rel="clubhouseTag"&gt;VB&lt;/a&gt;,&lt;a href="http://windows.live.com/connect/tag/Developers" rel="clubhouseTag"&gt;Developers&lt;/a&gt;    &lt;br /&gt;WordPress Tags: &lt;a href="http://wordpress.com/tag/MVP" rel="Tag"&gt;MVP&lt;/a&gt;,&lt;a href="http://wordpress.com/tag/VB" rel="Tag"&gt;VB&lt;/a&gt;,&lt;a href="http://wordpress.com/tag/Developers" rel="Tag"&gt;Developers&lt;/a&gt;&lt;/p&gt;&lt;img src="https://blogs.msdn.com:443/aggbug.aspx?PostID=9815554" width="1" height="1"&gt;</description><category domain="https://blogs.msdn.com:443/usisvde/archive/tags/Video+Podcasts/default.aspx">Video Podcasts</category><category domain="https://blogs.msdn.com:443/usisvde/archive/tags/MSDN/default.aspx">MSDN</category><category domain="https://blogs.msdn.com:443/usisvde/archive/tags/Developer+Tools/default.aspx">Developer Tools</category></item><item><title>Todd’s Useful TFS Links</title><link>https://blogs.msdn.com:443/tmancini/archive/2009/07/10/todd-s-useful-tfs-links.aspx</link><pubDate>Fri, 10 Jul 2009 21:19:28 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9829086</guid><dc:creator>tmancini</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Here are a bunch of links that I routine share with folks; I’ll update this post as I discover other worthy links.&lt;/p&gt;  &lt;h2&gt;The Team System Home Page&lt;/h2&gt;  &lt;p&gt;&lt;a href="http://microsoft.com/teamsystem" target="_blank"&gt;Visual Studio Team System&lt;/a&gt;&lt;/p&gt;  &lt;h2&gt;Installation&lt;/h2&gt;  &lt;p&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=FF12844F-398C-4FE9-8B0D-9E84181D9923&amp;amp;displaylang=en" target="_blank"&gt;TFS 2008 Installation Guide (download)&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms253183.aspx" target="_blank"&gt;Troubleshooting Team Foundation Server&lt;/a&gt; (I love this one – absolutely come here first if you run into any problems not answered in the installation guide.)&lt;/p&gt;  &lt;h2&gt;Administration&lt;/h2&gt;  &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms252466.aspx" target="_blank"&gt;Administering TFS (Online)&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://go.microsoft.com/fwlink/?LinkID=125172" target="_blank"&gt;TFS Administration Guide (download)&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/tfsao/" target="_blank"&gt;TFS Setup, Administration and Operations Blog&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/teams_wit_tools" target="_blank"&gt;Work Item Tracking and Reporting blog&lt;/a&gt;&lt;/p&gt;  &lt;h2&gt;Maintenance&lt;/h2&gt;  &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms404879(VS.80).aspx" target="_blank"&gt;How to Move Team Foundation Server&lt;/a&gt; (In here you’ll find how to do 3 types of moves: &lt;a href="http://msdn.microsoft.com/en-us/library/ms404869(VS.80).aspx" target="_blank"&gt;One Hardware Config to Another&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/ms404883(VS.80).aspx" target="_blank"&gt;From One Environment to Another&lt;/a&gt; and &lt;a href="http://msdn.microsoft.com/en-us/library/ms404854(VS.80).aspx" target="_blank"&gt;From a Single-Server to a Dual-Server&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/dstfs" target="_blank"&gt;Developer Support for TFS blog&lt;/a&gt; (awesome tips and tricks)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/tfs_migration/" target="_blank"&gt;TFS Migration Blog&lt;/a&gt; (Discusses how to migrate data from other systems into TFS, and how to integrate TFS with other systems.)&lt;/p&gt;  &lt;h2&gt;General&lt;/h2&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/bharry" target="_blank"&gt;Brian Harry’s blog&lt;/a&gt; (The Man for TFS)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/buckh" target="_blank"&gt;Buck Hodge’s blog&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/jeffbe" target="_blank"&gt;Jeff Beehler’s blog&lt;/a&gt; (Team System and Visual Studio)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/jimlamb" target="_blank"&gt;Jim Lamb’s blog&lt;/a&gt; (Everything you’ve ever wanted to know about Build but were afraid to ask)&lt;/p&gt;&lt;img src="https://blogs.msdn.com:443/aggbug.aspx?PostID=9829086" width="1" height="1"&gt;</description></item><item><title>Customizing a Microsoft Auto Code Review (OACR) Project</title><link>https://blogs.msdn.com:443/wdkdocs/archive/2009/07/10/customizing-a-microsoft-auto-code-review-oacr-project.aspx</link><pubDate>Fri, 10 Jul 2009 21:09:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9829085</guid><dc:creator>wdkblog</dc:creator><slash:comments>3</slash:comments><description>&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/dd445214.aspx"&gt;&lt;FONT color=#0000ff size=3 face=Calibri&gt;Microsoft Auto Code Review&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3 face=Calibri&gt; (known by the acronym OACR) integrates &lt;/FONT&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/aa468782.aspx"&gt;&lt;FONT color=#0000ff size=3 face=Calibri&gt;PREfast for Drivers (PFD)&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3 face=Calibri&gt; into the WDK &lt;/FONT&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/ms792409.aspx"&gt;&lt;FONT color=#0000ff size=3 face=Calibri&gt;build&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3 face=Calibri&gt; environment and is available when you install the latest WDK for Windows 7. OACR automatically begins working when you open a build environment window, so you can start using OACR and PFD without any special setup. &lt;/FONT&gt;&lt;/P&gt;
&lt;TABLE style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; BORDER-COLLAPSE: collapse; BORDER-TOP: medium none; BORDER-RIGHT: medium none; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-yfti-tbllook: 1184; mso-padding-alt: 0in 5.4pt 0in 5.4pt" class=MsoTableGrid border=1 cellSpacing=0 cellPadding=0 class="MsoTableGrid"&gt;
&lt;TBODY&gt;
&lt;TR style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes"&gt;
&lt;TD style="BORDER-BOTTOM: black 1pt solid; BORDER-LEFT: black 1pt solid; PADDING-BOTTOM: 0in; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 6.65in; PADDING-RIGHT: 5.4pt; BORDER-TOP: black 1pt solid; BORDER-RIGHT: black 1pt solid; PADDING-TOP: 0in; mso-border-alt: solid black .5pt; mso-border-themecolor: text1" vAlign=top width=638&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;Side note- the name game&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;When you expand the acronym OACR it should spell &lt;/FONT&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/dd445214.aspx"&gt;&lt;FONT color=#0000ff size=3 face=Calibri&gt;Microsoft Auto Code Review&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;. For some reason, and I won’t mention names, it was inadvertently converted to &lt;I style="mso-bidi-font-style: normal"&gt;Windows Auto Code Review&lt;/I&gt; in earlier documentation. Go figure. This oversight has been corrected and the expanded name will appear as it should in future documentation&lt;SPAN style="mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;. I apologize for any confusion this mix-up might have caused.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;I style="mso-bidi-font-style: normal"&gt;&lt;SPAN style="FONT-FAMILY: 'Comic Sans MS'"&gt; &lt;/SPAN&gt;&lt;/I&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/B&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;H2 style="MARGIN: 10pt 0in 0pt"&gt;&lt;FONT color=#17365d size=4 face=Calibri&gt;OACR configuration files &lt;/FONT&gt;&lt;/H2&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;OACR uses two configuration files &lt;I style="mso-bidi-font-style: normal"&gt;OACR.ini&lt;/I&gt; &lt;I style="mso-bidi-font-style: normal"&gt;and OACRUser.ini&lt;/I&gt; to set preferences and to configure projects. Projects are your build targets, that is, a project is whatever driver or library you are building with the WDK build utility. The names of projects are determined by the directory where you are building and settings in the configuration file, &lt;I style="mso-bidi-font-style: normal"&gt;OACR.ini&lt;/I&gt;, and by the &lt;I style="mso-bidi-font-style: normal"&gt;projects.mk&lt;/I&gt; file. The &lt;I style="mso-bidi-font-style: normal"&gt;OACRuser.ini &lt;/I&gt;file can be used by individuals to override the project settings in the &lt;I style="mso-bidi-font-style: normal"&gt;OACR.ini&lt;/I&gt; configuration file. The location of the &lt;I style="mso-bidi-font-style: normal"&gt;OACRUser.ini&lt;/I&gt; file is specified by the UserIniLocation setting in the &lt;I style="mso-bidi-font-style: normal"&gt;OACR.ini&lt;/I&gt; file. The default setting in the WDK is as follows:&lt;/FONT&gt;&lt;/P&gt;&lt;PRE style="MARGIN-LEFT: 0.5in"&gt;&lt;FONT face=Consolas&gt;UserIniLocation=%BASEDIR%\config\&lt;/FONT&gt;&lt;o:p&gt;&lt;FONT face=Consolas&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/PRE&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;If you want to use an &lt;I style="mso-bidi-font-style: normal"&gt;OACRUser.ini &lt;/I&gt;file, you will need to create the file and the &lt;I style="mso-bidi-font-style: normal"&gt;%BASEDIR% \config&lt;/I&gt; directory. The file and the directory are not provided when you install the WDK. The %BASEDIR% is the root directory of your WDK installation (for example, &lt;I style="mso-bidi-font-style: normal"&gt;C:\WinDDK\7600\&lt;/I&gt;).&lt;/FONT&gt;&lt;/P&gt;
&lt;H2 style="MARGIN: 10pt 0in 0pt"&gt;&lt;FONT color=#17365d size=4 face=Calibri&gt;OACR projects in the WDK&lt;/FONT&gt;&lt;/H2&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;In the WDK, OACR is configured for two projects: &lt;B style="mso-bidi-font-weight: normal"&gt;WDKsamples&lt;/B&gt; and &lt;B style="mso-bidi-font-weight: normal"&gt;Root&lt;/B&gt;. The &lt;B style="mso-bidi-font-weight: normal"&gt;WDKsamples&lt;/B&gt; project settings are used any time you build something under the &lt;I style="mso-bidi-font-style: normal"&gt;%BASEDIR%&lt;/I&gt; of WDK (for example, &lt;I style="mso-bidi-font-style: normal"&gt;C:\WinDDK\7600\&lt;/I&gt;). The &lt;B style="mso-bidi-font-weight: normal"&gt;Root&lt;/B&gt; project is the default build project and is used for anything built outside of the WDK directory structure (for example, C&lt;I style="mso-bidi-font-style: normal"&gt;:\myproj\src&lt;/I&gt;). &lt;/FONT&gt;&lt;/P&gt;
&lt;H2 style="MARGIN: 10pt 0in 0pt"&gt;&lt;FONT color=#17365d size=4 face=Calibri&gt;Creating a private project using a custom include file&lt;/FONT&gt;&lt;/H2&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;You can add your own projects to the default OACR configuration file, as described in &lt;/FONT&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/dd445212.aspx"&gt;&lt;FONT color=#0000ff size=3 face=Calibri&gt;Creating or Modifying an OACR Project&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3 face=Calibri&gt;. However, if you want to create a private project and you don’t want to add it to the &lt;I style="mso-bidi-font-style: normal"&gt;OACR.ini&lt;/I&gt; file, you can set up and environment variable and point to an include file. The settings in the include file are then added to &lt;I style="mso-bidi-font-style: normal"&gt;OACR.ini&lt;/I&gt;. Wait! What about the &lt;I style="mso-bidi-font-style: normal"&gt;OACRUser.ini&lt;/I&gt; configuration file? Why can’t you use that? Well, the &lt;I style="mso-bidi-font-style: normal"&gt;OACRUser.ini&lt;/I&gt; file is used to override the project settings in the &lt;I style="mso-bidi-font-style: normal"&gt;OACR.ini&lt;/I&gt; configuration file and cannot be used to add projects. Here is how you go about creating a private project.&lt;/FONT&gt;&lt;/P&gt;
&lt;H3 style="MARGIN: 10pt 0in 0pt"&gt;&lt;FONT color=#17365d size=3 face=Calibri&gt;1. Shutdown the OACR Monitor&lt;/FONT&gt;&lt;/H3&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;Right click the OACR Monitor icon in the taskbar and click &lt;B style="mso-bidi-font-weight: normal"&gt;Close&lt;/B&gt;. Or type &lt;B style="mso-bidi-font-weight: normal"&gt;oacr stop&lt;/B&gt; in a build environment window. Close any build environment window you have open. You need to stop OACR and close the windows so that OACR can pick up the changes you will make in the following steps.&lt;/FONT&gt;&lt;/P&gt;
&lt;H3 style="MARGIN: 10pt 0in 0pt"&gt;&lt;FONT color=#17365d size=3 face=Calibri&gt;2. Set the environment variable OACRUserFIles&lt;/FONT&gt;&lt;/H3&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;Edit the System Properties on your computer and create the &lt;B style="mso-bidi-font-weight: normal"&gt;OACRUserFIles&lt;/B&gt; environment variable. Set the variable to point to a directory where you will create and store your private OACR project configuration file. &lt;/FONT&gt;&lt;/P&gt;&lt;PRE style="MARGIN-LEFT: 0.5in"&gt;&lt;FONT face=Consolas&gt;set OACRUserFIles=c:\myOACRprojects&lt;/FONT&gt;&lt;/PRE&gt;
&lt;H3 style="MARGIN: 10pt 0in 0pt"&gt;&lt;FONT color=#17365d size=3 face=Calibri&gt;3. Add the #include directive to the &lt;I style="mso-bidi-font-style: normal"&gt;OACR.ini&lt;/I&gt; file&lt;/FONT&gt;&lt;/H3&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;The &lt;I style="mso-bidi-font-style: normal"&gt;OACR.ini&lt;/I&gt; file is in the &lt;/FONT&gt;&lt;EM&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; COLOR: black; FONT-SIZE: 8pt; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi"&gt;%BASEDIR%&lt;/SPAN&gt;&lt;/EM&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; COLOR: black; FONT-SIZE: 8pt"&gt;\&lt;EM&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi"&gt;version&lt;/SPAN&gt;&lt;/EM&gt;\&lt;EM&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi"&gt;bin&lt;/SPAN&gt;&lt;/EM&gt;\&lt;EM&gt;&lt;SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi"&gt;arch\&lt;/SPAN&gt;&lt;/EM&gt;OACR &lt;/SPAN&gt;&lt;FONT size=3 face=Calibri&gt;directory. Add the following line at the end of the file:&lt;/FONT&gt;&lt;/P&gt;&lt;PRE style="MARGIN-LEFT: 0.5in"&gt;&lt;FONT face=Consolas&gt;#include optional %OACRUserFiles%\oacr.include.ini&lt;/FONT&gt;&lt;/PRE&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;The &lt;I style="mso-bidi-font-style: normal"&gt;oacr.include.ini&lt;/I&gt; file is optional, so OACR does not complain if it doesn’t exist.&lt;/FONT&gt;&lt;/P&gt;
&lt;H3 style="MARGIN: 10pt 0in 0pt"&gt;&lt;FONT color=#17365d size=3 face=Calibri&gt;4. Create the include file and define your OACR projects&lt;/FONT&gt;&lt;/H3&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;Create the &lt;I style="mso-bidi-font-style: normal"&gt;oacr.include.ini&lt;/I&gt; file in the &lt;I style="mso-bidi-font-style: normal"&gt;%OACRUserFIles%&lt;/I&gt; directory. This include file is where you define your private OACR projects. For example, the following settings in the &lt;I style="mso-bidi-font-style: normal"&gt;oacr.include.ini&lt;/I&gt; file create a project called MyProject.&lt;/FONT&gt;&lt;/P&gt;&lt;PRE style="MARGIN-LEFT: 0.5in"&gt;&lt;FONT face=Consolas&gt;; project 'myProject': the code under src; relies on %OACRUserFIles%\project.mk&lt;/FONT&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN-LEFT: 0.5in"&gt;&lt;FONT face=Consolas&gt;[MyProject]&lt;/FONT&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN-LEFT: 0.5in"&gt;&lt;FONT face=Consolas&gt;; WarningLocations=^%BASEDIR%\\src&lt;/FONT&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN-LEFT: 0.5in"&gt;&lt;FONT face=Consolas&gt;WarningNumbers=&amp;lt;level0&amp;gt;;&amp;lt;level1&amp;gt;;&amp;lt;level2&amp;gt;;&amp;lt;level3_PFD_samples&amp;gt;;&lt;/FONT&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN-LEFT: 0.5in"&gt;&lt;FONT face=Consolas&gt;ErrorNumbers=&amp;lt;level0&amp;gt;;&amp;lt;level1&amp;gt;;&lt;/FONT&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN-LEFT: 0.5in"&gt;&lt;FONT face=Consolas&gt;; Use PFD's settings for these&lt;/FONT&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN-LEFT: 0.5in"&gt;&lt;FONT face=Consolas&gt;PREfastOptions=/MAXPATHS=256 /STACKHOGTHRESHOLD=1024&lt;/FONT&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN-LEFT: 0.5in"&gt;&lt;FONT face=Consolas&gt;%_PREFAST_CYCLOMATIC%=2147483647&lt;/FONT&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN-LEFT: 0.5in"&gt;&lt;FONT face=Consolas&gt;%PREFAST_DRIVERS%=0&lt;/FONT&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN-LEFT: 0.5in"&gt;&lt;FONT face=Consolas&gt;[MyProject:x86] &lt;/FONT&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN-LEFT: 0.5in"&gt;&lt;FONT face=Consolas&gt;[MyProject:x86fre] &lt;/FONT&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN-LEFT: 0.5in"&gt;&lt;FONT face=Consolas&gt;[MyProject:x86chk]&lt;/FONT&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN-LEFT: 0.5in"&gt;&lt;FONT face=Consolas&gt;[MyProject:amd64] &lt;/FONT&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN-LEFT: 0.5in"&gt;&lt;FONT face=Consolas&gt;[MyProject:amd64fre] &lt;/FONT&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN-LEFT: 0.5in"&gt;&lt;FONT face=Consolas&gt;[MyProject:amd64chk]&lt;/FONT&gt;&lt;/PRE&gt;
&lt;H3 style="MARGIN: 10pt 0in 0pt"&gt;&lt;FONT color=#17365d size=3 face=Calibri&gt;5. Create a &lt;I style="mso-bidi-font-style: normal"&gt;project.mk&lt;/I&gt; file in the target project directory&lt;/FONT&gt;&lt;/H3&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;Just as with any new OACR project that you add to the &lt;I style="mso-bidi-font-style: normal"&gt;OACR.ini&lt;/I&gt; file, you need to create a &lt;I style="mso-bidi-font-style: normal"&gt;project.mk&lt;/I&gt; file and place that in the root directory of your source files. For more information, see &lt;/FONT&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/dd445212.aspx"&gt;&lt;FONT color=#0000ff size=3 face=Calibri&gt;Creating or Modifying an OACR Project&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3 face=Calibri&gt; . The &lt;I style="mso-bidi-font-style: normal"&gt;project.mk&lt;/I&gt; file for MyProject, would look like this:&lt;/FONT&gt;&lt;/P&gt;&lt;PRE style="MARGIN-LEFT: 0.5in"&gt;&lt;FONT face=Consolas&gt;_project_=MyProject&lt;/FONT&gt;&lt;/PRE&gt;
&lt;H3 style="MARGIN: 10pt 0in 0pt"&gt;&lt;FONT color=#17365d size=3 face=Calibri&gt;6. Restart the OACR Monitor &lt;/FONT&gt;&lt;/H3&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;Open a new build environment window to start OACR. You need to open a new build environment window so that your %&lt;I style="mso-bidi-font-style: normal"&gt;OACRUserFIles&lt;/I&gt;% environment variable is used. When OACR starts up it reads the &lt;I style="mso-bidi-font-style: normal"&gt;oacr.include.ini&lt;/I&gt; file and treats its content as if it were part of &lt;I style="mso-bidi-font-style: normal"&gt;Oacr.ini&lt;/I&gt;. &lt;/FONT&gt;&lt;/P&gt;
&lt;H3 style="MARGIN: 10pt 0in 0pt"&gt;&lt;FONT color=#17365d size=3 face=Calibri&gt;7. Verify that your OACR project is configured correctly &lt;/FONT&gt;&lt;/H3&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;In a build environment window, use the &lt;B style="mso-bidi-font-weight: normal"&gt;oacr checkini&lt;/B&gt; command to verify that your configuration files are set up correctly.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;You should see something similar to the following:&lt;/FONT&gt;&lt;/P&gt;&lt;PRE style="MARGIN-LEFT: 0.5in"&gt;&lt;FONT face=Consolas&gt;c:\WinDDK\7138.0.0&amp;gt;oacr checkini&lt;/FONT&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN-LEFT: 0.5in"&gt;&lt;FONT face=Consolas&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE style="MARGIN-LEFT: 0.5in"&gt;&lt;FONT face=Consolas&gt;Configuration : C:\WinDDK\7138.0.0\bin\x86\OACR\oacr.ini&lt;/FONT&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN-LEFT: 0.5in"&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Includes&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;: C:\WinDDK\7138.0.0\bin\oacr_base.ini&lt;/FONT&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN-LEFT: 0.5in"&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;C:\MyOACRProjects\oacr.include.ini&lt;/FONT&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN-LEFT: 0.5in"&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Defines&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;: x86&lt;/FONT&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN-LEFT: 0.5in"&gt;&lt;FONT face=Consolas&gt;Customizations: C:\WinDDK\7138.0.0\config\oacruser.ini&lt;/FONT&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN-LEFT: 0.5in"&gt;&lt;o:p&gt;&lt;FONT face=Consolas&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN-LEFT: 0.5in"&gt;&lt;FONT face=Consolas&gt;No problems found&lt;/FONT&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;o:p&gt;&lt;FONT face=Consolas&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/PRE&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;Use the &lt;B style="mso-bidi-font-weight: normal"&gt;oacr showconfig&lt;/B&gt; &lt;I style="mso-bidi-font-style: normal"&gt;project&lt;/I&gt; command to verify that OACR can successfully read your project settings.&lt;/FONT&gt;&lt;/P&gt;&lt;PRE style="MARGIN-LEFT: 0.5in"&gt;&lt;FONT face=Consolas&gt;oacr showconfig MyProject&lt;/FONT&gt;&lt;/PRE&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;If your project is set up correctly, OACR shows the project configuration. &lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;Note that you can also use the OACR commands &lt;B style="mso-bidi-font-weight: normal"&gt;oacr stop&lt;/B&gt; and &lt;B style="mso-bidi-font-weight: normal"&gt;oacr monitor&lt;/B&gt; to stop and start OACR. These commands are useful if you need to make changes to fix problems in the configuration files.&lt;/FONT&gt;&lt;/P&gt;
&lt;H3 style="MARGIN: 10pt 0in 0pt"&gt;&lt;FONT color=#17365d size=3 face=Calibri&gt;8. Build your driver or library &lt;/FONT&gt;&lt;/H3&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;After you have verified that your OACR project is setup correctly, you can build your driver or library just as you are accustomed to doing. You only need to open a build environment window and navigate to you build target directory. OACR will use all of your project-specific settings. &lt;/FONT&gt;&lt;/P&gt;
&lt;H2 style="MARGIN: 10pt 0in 0pt"&gt;&lt;FONT color=#17365d size=4 face=Calibri&gt;What Next?&lt;/FONT&gt;&lt;/H2&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;There is a lot you can do to customize the build environment and your OACR and PFD settings. But the good news is you don’t have to. You can build your driver code just as you always have and still benefit from the integration of OACR in the WDK build environment. &lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;To learn more, read the documentation about &lt;/FONT&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/dd445214.aspx"&gt;&lt;FONT color=#0000ff size=3 face=Calibri&gt;Microsoft Auto Code Review&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3 face=Calibri&gt; (OACR) and &lt;/FONT&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/aa468782.aspx"&gt;&lt;FONT color=#0000ff size=3 face=Calibri&gt;PREfast for Drivers (PFD)&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3 face=Calibri&gt; and check for new information in the monthly updates on MSDN. Also see the &lt;/FONT&gt;&lt;A href="http://go.microsoft.com/fwlink/?linkid=154232"&gt;&lt;FONT color=#0000ff size=3 face=Calibri&gt;Static Driver Tools blog&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3 face=Calibri&gt;, it provides a wealth of information about using and customizing the static analysis tools, including PFD and &lt;/FONT&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/aa469108.aspx"&gt;&lt;FONT color=#0000ff size=3 face=Calibri&gt;Static Driver Verifier&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3 face=Calibri&gt;. A recent blog posting describes the steps to create a “Static Driver Verifier Prerequisites” filter. For more information, see &lt;/FONT&gt;&lt;A href="http://blogs.msdn.com/staticdrivertools/archive/2009/05/07/make-static-driver-verifier-more-efficient-add-a-preset-filter-to-pfd-oacr-defect-viewer.aspx"&gt;&lt;FONT color=#0000ff size=3 face=Calibri&gt;Make Static Driver Verifier More Efficient: Add a Preset Filter to PFD/OACR Defect Viewer&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3 face=Calibri&gt; .&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp; -- Dave Hagen [MSFT], Programming Writer&lt;/FONT&gt;&lt;/P&gt;&lt;img src="https://blogs.msdn.com:443/aggbug.aspx?PostID=9829085" width="1" height="1"&gt;</description><category domain="https://blogs.msdn.com:443/wdkdocs/archive/tags/Windows+7/default.aspx">Windows 7</category><category domain="https://blogs.msdn.com:443/wdkdocs/archive/tags/building+drivers/default.aspx">building drivers</category></item><item><title>silverlight 3 rtm – mais alguns links</title><link>https://blogs.msdn.com:443/cguimar/archive/2009/07/10/silverlight-3-rtm-mais-alguns-links.aspx</link><pubDate>Fri, 10 Jul 2009 21:04:17 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9829078</guid><dc:creator>cezar guimarães</dc:creator><slash:comments>0</slash:comments><description>mais alguns links interessantes sobre silverlight 3. http://weblogs.asp.net/scottgu/archive/2009/07/10/silverlight-3-released.aspx http://www.nikhilk.net/Entry.aspx?id=234 http://timheuer.com/blog/archive/2009/07/09/free-silverlight-application-themes-silverlight-3.aspx &amp;#160;...(&lt;a href="https://blogs.msdn.com:443/cguimar/archive/2009/07/10/silverlight-3-rtm-mais-alguns-links.aspx"&gt;read more&lt;/a&gt;)&lt;img src="https://blogs.msdn.com:443/aggbug.aspx?PostID=9829078" width="1" height="1"&gt;</description><category domain="https://blogs.msdn.com:443/cguimar/archive/tags/Silverlight/default.aspx">Silverlight</category></item><item><title>New Migration and Integration Solutions Page on MSDN</title><link>https://blogs.msdn.com:443/mitrik/archive/2009/07/10/new-migration-and-integration-solutions-page-on-msdn.aspx</link><pubDate>Fri, 10 Jul 2009 21:03:02 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9829077</guid><dc:creator>mmitrik</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Today we launched a new page on MSDN that will serve as the central hub for all things related to conversion to and integration with TFS.&amp;#160; This new &lt;a href="http://msdn.microsoft.com/en-us/teamsystem/bb840033.aspx"&gt;Migration and Integration Solutions&lt;/a&gt; page consolidates all of the offerings in this space, including the tools provided by Microsoft, tools developed by partners and the community, and partners offering services in this area.&amp;#160; We have also included some community related content to the page, linking to the blogs of people on the migration team, and have included a space to link to related projects on CodePlex.&lt;/p&gt;  &lt;p&gt;We’re currently in development of multiple efforts in this space, so we plan to have more updates on this page soon.&amp;#160; Overall, our goal is for this site to serve as the one-stop-shop for converters and integration tools, and we hope to include links to all of the offerings build by partners and the community.&amp;#160; If you know of a tool that isn’t listed here, please let me know and I’ll work to get it included on the site.&lt;/p&gt;&lt;img src="https://blogs.msdn.com:443/aggbug.aspx?PostID=9829077" width="1" height="1"&gt;</description><category domain="https://blogs.msdn.com:443/mitrik/archive/tags/Migration/default.aspx">Migration</category><category domain="https://blogs.msdn.com:443/mitrik/archive/tags/TFS/default.aspx">TFS</category><category domain="https://blogs.msdn.com:443/mitrik/archive/tags/Community/default.aspx">Community</category><category domain="https://blogs.msdn.com:443/mitrik/archive/tags/TFSMIS/default.aspx">TFSMIS</category></item><item><title>Overview of New Features in Expression Blend 3 + SketchFlow: Part 1</title><link>https://blogs.msdn.com:443/expression/archive/2009/07/10/overview-of-new-features-in-expression-blend-3-sketchflow-part-1.aspx</link><pubDate>Fri, 10 Jul 2009 21:01:47 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9829076</guid><dc:creator>xprblog</dc:creator><slash:comments>0</slash:comments><description>As you all have probably seen by now, we released the release candidate of Expression Blend 3 + SketchFlow to coincide with the release of Silverlight 3 today. The previous post was just a short one letting you know about the release and where to download everything from. In this post, let’s actually go over in a bit more detail on some of the new features. There are a lot of new features in Expression Blend 3, so this post will be split into two parts. If you want a more comprehensive overview of...(&lt;a href="https://blogs.msdn.com:443/expression/archive/2009/07/10/overview-of-new-features-in-expression-blend-3-sketchflow-part-1.aspx"&gt;read more&lt;/a&gt;)&lt;img src="https://blogs.msdn.com:443/aggbug.aspx?PostID=9829076" width="1" height="1"&gt;</description><category domain="https://blogs.msdn.com:443/expression/archive/tags/Expression+Blend/default.aspx">Expression Blend</category><category domain="https://blogs.msdn.com:443/expression/archive/tags/Blend+Features/default.aspx">Blend Features</category><category domain="https://blogs.msdn.com:443/expression/archive/tags/Cool+New+Feature_2100_/default.aspx">Cool New Feature!</category></item></channel></rss>