<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8993904770210432487</id><updated>2012-02-16T03:37:55.329-05:00</updated><category term='Visual Studio'/><category term='Technology'/><category term='Hacks'/><category term='TFS'/><category term='Regular Expressions'/><category term='Music'/><category term='SQL Server'/><category term='Power Tools'/><category term='Entertainment'/><category term='AzMan'/><category term='Geek'/><category term='Pivot Tables'/><category term='Security'/><category term='TSQL'/><category term='C#'/><category term='Windows Phone 7'/><category term='Browser'/><category term='Firefox'/><category term='Rants'/><category term='Blog Engines'/><category term='Debugging'/><category term='Humor'/><category term='Unit Testing'/><category term='Blog'/><category term='Utilities'/><title type='text'>Whirling, Transient Nodes of Thought</title><subtitle type='html'>Random Tech Groks from the Short, Stocky Bald Guy</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://boyd.aspectdatasystems.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8993904770210432487/posts/default'/><link rel='alternate' type='text/html' href='http://boyd.aspectdatasystems.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>MaryAnn Campbell</name><uri>http://www.blogger.com/profile/13588806410993702811</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>15</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8993904770210432487.post-1622637326500246804</id><published>2012-01-16T13:07:00.001-05:00</published><updated>2012-01-16T13:07:49.379-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Geek'/><category scheme='http://www.blogger.com/atom/ns#' term='Technology'/><category scheme='http://www.blogger.com/atom/ns#' term='Humor'/><title type='text'>Remembering Y2k</title><content type='html'>&lt;p&gt;I just stumbled upon an old email I sent out to my fellow geeks on 2/25/99. The industry was full-bore into Y2k refactoring of all systems to prevent potentially cataclysmic consequences (purportedly anyways). That’s all any of us talked about. The email was in regards to a conversation I had late at night with my wife MaryAnn. Here are the details from that evening’s events:&lt;/p&gt;  &lt;p&gt;   &lt;hr /&gt;    &lt;br /&gt;Late last night (Feb 25, 1999) I was working on my home PC with my wife MaryAnn sitting on the bed behind me. I was pretty involved with what I was doing because of the importance of the software that I was installing. MaryAnn was making out a grocery list, asking me the occasional question about it as I worked. Here's the dialogue:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;MaryAnn:&lt;/strong&gt; &lt;em&gt;&amp;quot;Oh, by the way, do we still want a humidifier? When I was at Wal-Mart the other day, I saw a humidifier for $19.99.&amp;quot;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Boyd:&lt;/strong&gt; &lt;em&gt;&amp;quot;&lt;strong&gt;A humidifier for 1999????&lt;/strong&gt; Since when did anyone care what year a humidifier was supposed to be used in??? What the heck is it.....Y2K compliant or something???? What, are we gonna have a world-wide crash of all pre-Y2k model humidifiers??? That’s the stupidest thing I’ve ever heard of!&amp;quot;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Needless to say, MaryAnn looked at me with a &amp;quot;did you check your brain at the door?&amp;quot; look on her face. When I finally comprehended that she meant $19.99 and not the year 1999, we both had a good crack up for a good 10 minutes or so. I was crying.&lt;/p&gt;  &lt;p&gt;I guess it's more obvious with some of us than with others that we've been spending way too much time slinging code.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8993904770210432487-1622637326500246804?l=boyd.aspectdatasystems.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyd.aspectdatasystems.com/feeds/1622637326500246804/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8993904770210432487&amp;postID=1622637326500246804&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8993904770210432487/posts/default/1622637326500246804'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8993904770210432487/posts/default/1622637326500246804'/><link rel='alternate' type='text/html' href='http://boyd.aspectdatasystems.com/2012/01/remembering-y2k.html' title='Remembering Y2k'/><author><name>MaryAnn Campbell</name><uri>http://www.blogger.com/profile/13588806410993702811</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8993904770210432487.post-2809357711187793708</id><published>2012-01-07T19:53:00.001-05:00</published><updated>2012-01-10T11:03:59.652-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TSQL'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server'/><category scheme='http://www.blogger.com/atom/ns#' term='Pivot Tables'/><category scheme='http://www.blogger.com/atom/ns#' term='Rants'/><title type='text'>Pivot Tables in TSQL: A Rant</title><content type='html'>&lt;p&gt;One of my biggest complaints in the industry to which I currently belong is the arrogance, ego and on occasion downright foolishness I see quite often when it comes to educating others on understanding what should be simple concepts (after a bit of explanation that is). I don’t mean that to be a blanket statement. Those attitudes are surely not prevalent everywhere. I know some incredibly intelligent folks who are very, very good at teaching others. But those negative characteristics are quite prevalent nevertheless. Here’s a perfect, textbook example of what I’m talking about. Pretend your resident n00b programmer asks someone experienced what an interface is. Here’s the status-quo answer given:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;“An Interface is a Contract”&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Huh? Wha? What the heck does that mean? And yet that’s what I’ve seen in many a book. It’s the answer provided me by interviewees in many an interview I’ve given (most times with no further explanation on usefulness). And it’s also the response during many a conversation with someone who knows what an interface is. But too often I’ve seen those new to programming shake their heads up and down eagerly indicating they understand that statement completely. But in reality, they don’t. They’re clueless. Their code shows it quite clearly. And only when I pull them aside and get them to confide in me does the Truth come out: &lt;strong&gt;&lt;em&gt;They’re freaking clueless.&lt;/em&gt;&lt;/strong&gt; And rightfully so. I’ve counseled many people over the years on what an interface is and the virtues of them. So many never understood them until I explained. When I explain in non-geek-textbook-speak, the light goes on and they’re finally reconciled on the beauty of interfaces.&lt;/p&gt;  &lt;p&gt;But this isn’t about interfaces. We’re wanting to talk about &lt;strong&gt;Pivot Tables&lt;/strong&gt; today.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h4&gt;What the Experts Say about Pivot Tables&lt;/h4&gt;  &lt;p&gt;Here’s what they say:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;“A Pivot Table is a transformation of flat data into something more clear.”&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Um, yea. Clear. Right. Speaking of clear, that explanation is clear as mud. Even &lt;a title="Pivot Table Definition" href="http://en.wikipedia.org/wiki/Pivot_table" target="_blank"&gt;Wikipedia’s description&lt;/a&gt; doesn’t help the n00b who’s desperately looking for answers (though a person could probably pull the answer out of their example). That is if that n00b even knew that they need to find out what a pivot table is. The closest they come to answering the question is the word “rotation” used in the definition. Good effort, but still not there. The closest I’ve seen out there to the Truth is the &lt;a title="Pivot Table Definition" href="http://searchsqlserver.techtarget.com/definition/pivot-table" target="_blank"&gt;WhatIs (TechTarget)&lt;/a&gt; definition. But still, not quite very good.&lt;/p&gt;  &lt;p&gt;And don’t get my started on the nonsense that exists in the blogs I’ve seen. Though I’ve surely not scoured the entire net, it’s the same nonsense copy &amp;amp; pasted from textbooks.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h4&gt;What is a Pivot Table?&lt;/h4&gt;  &lt;p&gt;So, here’s a lesson in Pivot Tables. Hopefully it’ll also be a lesson on how to properly teach people on a subject. To start, here’s my own personal definition. This is for those who’ve no clue what a pivot table is:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;“A Pivot Table is a table in which &lt;font color="#ff0000"&gt;row data&lt;/font&gt; from one table has been “rotated” or “pivoted” into the place of &lt;font color="#ff0000"&gt;column related data &lt;/font&gt;&lt;font color="#000000"&gt;in another table&lt;/font&gt;, or vice-versa.”&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;h4&gt;A Solid Example of a Pivot Table&lt;/h4&gt;  &lt;p&gt;That may not quite make sense just yet. So let’s take it a step further: What would a definition be without examples? Here’s a table with some data. The data has not been pivoted yet:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-AuWYQQlp6zI/TwjpAqcEoyI/AAAAAAAAAJY/OLEYW3YPksA/s1600-h/image%25255B3%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-gZYzg2Prayc/TwjpA5GCo4I/AAAAAAAAAJg/ElvNvYyCynI/image_thumb%25255B1%25255D.png?imgmax=800" width="449" height="171" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h2 align="center"&gt;Table 1&lt;/h2&gt;  &lt;p&gt;Notice the redundant data. We’re pulling all permutations of Cost Code to Component percentages. Now imagine a huge list of Cost Codes with an even larger list of Components! That would be one long and butt-ugly report, wouldn’t it?&lt;/p&gt;  &lt;p&gt;A Pivot Table takes the data of an original resultset (found in the &lt;strong&gt;&lt;em&gt;Rows&lt;/em&gt;&lt;/strong&gt;), yanks it out and turns that data into categories of data by turning that data into &lt;strong&gt;&lt;em&gt;Columns&lt;/em&gt;&lt;/strong&gt;:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-IFmI3gNXLhg/Twxha4mrVYI/AAAAAAAAAKQ/azQ2EQA-gPs/s1600-h/image%25255B11%25255D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-nSEndWrM1Po/TwxhbGlN2uI/AAAAAAAAAKY/He80bK9M78w/image_thumb%25255B4%25255D.png?imgmax=800" width="419" height="258" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h2 align="center"&gt;Diagram 1&lt;/h2&gt;  &lt;p&gt;Notice in the diagram we’re taking the data categorized underneath &lt;strong&gt;&lt;em&gt;“DataColumn”&lt;/em&gt;&lt;/strong&gt;, sliding it all out of the table and rotating it to instead become column headers. This is the &lt;strong&gt;&lt;em&gt;“pivot”&lt;/em&gt;&lt;/strong&gt; in &lt;strong&gt;&lt;em&gt;“pivot tables”&lt;/em&gt;&lt;/strong&gt;. &lt;/p&gt;  &lt;p&gt;So now let’s use real data. Taking a look at the data in &lt;strong&gt;Table 1&lt;/strong&gt; above, it seems that we’d want to aggregate (group, add up) the percentage data that’s common to Components and show them by Cost Codes. For those who are new, here’s the key to your understanding: We’re going to pull the &lt;strong&gt;&lt;em&gt;“Component Description”&lt;/em&gt;&lt;/strong&gt; column out and pivot that data into “columnar” data instead of row data.&lt;/p&gt;  &lt;p&gt;So, let’s first take a look at the finished pivot table, then we’ll go into the explanation:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-8ViLVbGxwWE/TwjpBHyTKpI/AAAAAAAAAJ4/d3fjKT6yueE/s1600-h/image%25255B8%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-yP8uSEkDcWU/TwjpBaI2U6I/AAAAAAAAAJ8/-oxtY7rM0SM/image_thumb%25255B4%25255D.png?imgmax=800" width="330" height="84" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h2 align="center"&gt;Table 2&lt;/h2&gt;  &lt;p&gt;Do you see what we’ve done? We’ve taken what was the return result (the data returned from the previous query on the table above) and we’ve changed that resulting percentage data to be based on Cost Code. A much better report that’s must easer on the eyes and brain that the previous. &lt;strong&gt;We’ve &lt;font color="#ff0000"&gt;&lt;em&gt;“rotated”&lt;/em&gt; &lt;/font&gt;or &lt;em&gt;&lt;font color="#ff0000"&gt;“pivoted”&lt;/font&gt;&lt;/em&gt; what was vertical data in the table to now being horizontal data.&lt;/strong&gt; In doing so, we were able to effectively aggregate (group) the redundant Cost Code data. “&lt;em&gt;&lt;strong&gt;How cool is that?”&amp;#160; &lt;/strong&gt;&lt;font size="1"&gt;(Mark Aitkenhead, circa 2012 &lt;img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-hotsmile" alt="Hot smile" src="http://lh6.ggpht.com/-YLXyU53enlo/TwxhbmhnpGI/AAAAAAAAAKg/6DXWuLKARXA/wlEmoticon-hotsmile%25255B2%25255D.png?imgmax=800" /&gt;)&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-sQdfPOpXzlg/TwjqjTEAEiI/AAAAAAAAAKA/dpbVpVxiXsU/s1600-h/image%25255B12%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-yZcjeAHsCfc/Twjqj9QT3DI/AAAAAAAAAKI/UDvxj6m36hM/image_thumb%25255B6%25255D.png?imgmax=800" width="393" height="289" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h2 align="center"&gt;Diagram 2&lt;/h2&gt;  &lt;h4&gt;&amp;#160;&lt;/h4&gt;  &lt;h4&gt;The Code&lt;/h4&gt;  &lt;p&gt;Now let’s take a look at the SQL.&lt;/p&gt;  &lt;p&gt;The standard example of using pivot tables in TSQL typically shows pre-knowledge of the column data that one would want to use. Take another look at &lt;strong&gt;Diagram 1&lt;/strong&gt; above. In other words, most examples assume you know ahead of time all the data that’ll show up underneath “DataColumn” and would therefore be able to hardcode it into a SQL statement to create your pivot table:&lt;/p&gt;  &lt;div style="padding-bottom: 0px; padding-left: 0px; width: 792px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:107e0355-6da0-45c6-b357-e453ef18e65c" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px"&gt;Hard-Coded Pivot Selections&lt;/div&gt; &lt;div style="background: #ddd; max-height: 500px; overflow: auto"&gt; &lt;ol start="1" style="background: #ffffff; margin: 0 0 0 2em; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;Select&lt;/span&gt; Data1&lt;span style="color:#808080"&gt;,&lt;/span&gt; Data2&lt;span style="color:#808080"&gt;,&lt;/span&gt; Data3&lt;span style="color:#808080"&gt;,&lt;/span&gt; Data&lt;span style="color:#808080"&gt;-&lt;/span&gt;n&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;From&lt;/span&gt;&lt;span style="color:#808080"&gt;...&lt;/span&gt;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;h2 align="center"&gt;Snip 1&lt;/h2&gt;  &lt;p&gt;Being severely allergic to hard-coding, I refuse to do so. You should also refuse. Some of the most common famous last words in programming are, &lt;strong&gt;&lt;em&gt;“It’ll never change.”&lt;/em&gt;&lt;/strong&gt; That statement is the sign of either a n00b or a fool. Avoid hard coding and magic numbers/values at all costs.&lt;/p&gt;  &lt;p&gt;Here’s the TSQL solution for pivoting your data without knowing ahead of time the number or names of the columns that’ll be pivoted. In our examples above, that would be the &lt;strong&gt;&lt;em&gt;“Component Description”&lt;/em&gt;&lt;/strong&gt; data. First, we’re going to create a sproc that dynamically builds the list of Component Description columns we’ll be selecting:&lt;/p&gt;      &lt;div style="padding-bottom: 0px; padding-left: 0px; width: 792px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:edfa28d3-b945-463e-89f6-577e97bbad06" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px"&gt;Column String Builder&lt;/div&gt; &lt;div style="background: #ddd; max-height: 400px; overflow: auto"&gt; &lt;ol start="1" style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px; white-space: nowrap"&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;Create&lt;/span&gt; &lt;span style="color:#0000ff"&gt;Proc&lt;/span&gt; [dbo]&lt;span style="color:#808080"&gt;.&lt;/span&gt;[upGetComponentSelectionStringForPivot]&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;    @DivisionKey &lt;span style="color:#0000ff"&gt;int&lt;/span&gt;&lt;span style="color:#808080"&gt;,&lt;/span&gt;&lt;/li&gt; &lt;li&gt;    @Components &lt;span style="color:#0000ff"&gt;Varchar&lt;/span&gt;&lt;span style="color:#808080"&gt;(&lt;/span&gt;1000&lt;span style="color:#808080"&gt;)&lt;/span&gt; &lt;span style="color:#0000ff"&gt;Out&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;AS&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;BEGIN&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff"&gt;SET&lt;/span&gt; &lt;span style="color:#0000ff"&gt;NOCOUNT&lt;/span&gt; &lt;span style="color:#0000ff"&gt;ON&lt;/span&gt;&lt;span style="color:#808080"&gt;;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff"&gt;Declare&lt;/span&gt; @Com &lt;span style="color:#0000ff"&gt;Varchar&lt;/span&gt;&lt;span style="color:#808080"&gt;(&lt;/span&gt;1000&lt;span style="color:#808080"&gt;)&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;    &lt;span style="color:#0000ff"&gt;Select&lt;/span&gt; @Com &lt;span style="color:#808080"&gt;=&lt;/span&gt; &lt;span style="color:#ff0000"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff"&gt;Select&lt;/span&gt; @Com &lt;span style="color:#808080"&gt;=&lt;/span&gt; @Com &lt;span style="color:#808080"&gt;+&lt;/span&gt; &lt;span style="color:#ff0000"&gt;&amp;#39;[&amp;#39;&lt;/span&gt; &lt;span style="color:#808080"&gt;+&lt;/span&gt; c&lt;span style="color:#808080"&gt;.&lt;/span&gt;&lt;span style="color:#0000ff"&gt;Description&lt;/span&gt; &lt;span style="color:#808080"&gt;+&lt;/span&gt; &lt;span style="color:#ff0000"&gt;&amp;#39;], &amp;#39;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;    &lt;span style="color:#0000ff"&gt;From&lt;/span&gt; Components c&lt;/li&gt; &lt;li&gt;        &lt;span style="color:#808080"&gt;Inner&lt;/span&gt; &lt;span style="color:#808080"&gt;Join&lt;/span&gt; CostCodeComponentXRef x &lt;span style="color:#0000ff"&gt;On&lt;/span&gt; c&lt;span style="color:#808080"&gt;.&lt;/span&gt;ComponentKey &lt;span style="color:#808080"&gt;=&lt;/span&gt; x&lt;span style="color:#808080"&gt;.&lt;/span&gt;ComponentKey&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;    &lt;span style="color:#0000ff"&gt;Where&lt;/span&gt; x&lt;span style="color:#808080"&gt;.&lt;/span&gt;DivisionKey &lt;span style="color:#808080"&gt;=&lt;/span&gt; @DivisionKey &lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff"&gt;Group&lt;/span&gt; &lt;span style="color:#0000ff"&gt;By&lt;/span&gt; c&lt;span style="color:#808080"&gt;.&lt;/span&gt;&lt;span style="color:#0000ff"&gt;Description&lt;/span&gt; &lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;    &lt;span style="color:#0000ff"&gt;Set&lt;/span&gt; @Components &lt;span style="color:#808080"&gt;=&lt;/span&gt; &lt;span style="color:#ff00ff"&gt;SUBSTRING&lt;/span&gt;&lt;span style="color:#808080"&gt;(&lt;/span&gt;@Com&lt;span style="color:#808080"&gt;,&lt;/span&gt; 0&lt;span style="color:#808080"&gt;,&lt;/span&gt; &lt;span style="color:#ff00ff"&gt;Len&lt;/span&gt;&lt;span style="color:#808080"&gt;(&lt;/span&gt;@Com&lt;span style="color:#808080"&gt;))&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;END&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;Go&lt;/span&gt;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;h2 align="center"&gt;Snip 2&lt;/h2&gt;  &lt;p align="left"&gt;Of course, your overall SQL structure will surely look differently. This SQL is based on a live project. But you should get the gist of what we’re attempting to accomplish here. We’re building the column list that’ll be used in a Select statement in another sproc. And now here is the final SQL that’ll render us our data pivoted:&lt;/p&gt;  &lt;div style="padding-bottom: 0px; padding-left: 0px; width: 712px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:eac6f23e-487c-4c9a-8285-153919a97452" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px"&gt;Pivot Sproc&lt;/div&gt; &lt;div style="background: #ddd; max-height: 400px; overflow: auto"&gt; &lt;ol start="1" style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;Create&lt;/span&gt; &lt;span style="color:#0000ff"&gt;Proc&lt;/span&gt; [dbo]&lt;span style="color:#808080"&gt;.&lt;/span&gt;[upGetCostCodeComponentPivot]&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;    @DivisionKey &lt;span style="color:#0000ff"&gt;int&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;AS&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;BEGIN&lt;/span&gt;&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff"&gt;SET&lt;/span&gt; &lt;span style="color:#0000ff"&gt;NOCOUNT&lt;/span&gt; &lt;span style="color:#0000ff"&gt;ON&lt;/span&gt;&lt;span style="color:#808080"&gt;;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#008000"&gt;-- First, create the column headers we&amp;#39;ll be building the pivot on.&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;    &lt;span style="color:#0000ff"&gt;Declare&lt;/span&gt; @Components &lt;span style="color:#0000ff"&gt;Varchar&lt;/span&gt;&lt;span style="color:#808080"&gt;(&lt;/span&gt;500&lt;span style="color:#808080"&gt;)&lt;/span&gt;&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff"&gt;Exec&lt;/span&gt; upGetComponentSelectionStringForPivot&lt;span style="color:#0000ff"&gt; &lt;/span&gt;@DivisionKey&lt;span style="color:#808080"&gt;,&lt;/span&gt; @Components &lt;span style="color:#0000ff"&gt;Out&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;   &lt;/li&gt; &lt;li&gt;    &lt;span style="color:#008000"&gt;-- If we have no columns to select from, then bail. &lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;    &lt;span style="color:#0000ff"&gt;If&lt;/span&gt; &lt;span style="color:#ff00ff"&gt;Len&lt;/span&gt;&lt;span style="color:#808080"&gt;(&lt;/span&gt;&lt;span style="color:#ff00ff"&gt;LTRIM&lt;/span&gt;&lt;span style="color:#808080"&gt;(&lt;/span&gt;&lt;span style="color:#ff00ff"&gt;RTrim&lt;/span&gt;&lt;span style="color:#808080"&gt;(&lt;/span&gt;@Components&lt;span style="color:#808080"&gt;)))&lt;/span&gt; &lt;span style="color:#808080"&gt;=&lt;/span&gt; 0&lt;/li&gt; &lt;li&gt;         &lt;span style="color:#0000ff"&gt;Return&lt;/span&gt; &lt;span style="color:#808080"&gt;-&lt;/span&gt;1&lt;span style="color:#808080"&gt;;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#008000"&gt;-- Next utilize the pivot column string in the overall query.&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;    &lt;span style="color:#0000ff"&gt;Declare&lt;/span&gt; @Query &lt;span style="color:#0000ff"&gt;Varchar&lt;/span&gt;&lt;span style="color:#808080"&gt;(&lt;/span&gt;2000&lt;span style="color:#808080"&gt;)&lt;/span&gt;&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff"&gt;Set&lt;/span&gt; @Query &lt;span style="color:#808080"&gt;=&lt;/span&gt; &lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;        &lt;span style="color:#ff0000"&gt;&amp;#39;Select [Cost Code Description], &amp;#39;&lt;/span&gt; &lt;span style="color:#808080"&gt;+&lt;/span&gt; @Components &lt;span style="color:#808080"&gt;+&lt;/span&gt; &lt;span style="color:#ff0000"&gt;&amp;#39;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;        &lt;span style="color:#ff0000"&gt;From&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;        &lt;span style="color:#ff0000"&gt;(&lt;/span&gt;&lt;/li&gt; &lt;li&gt;            &lt;span style="color:#ff0000"&gt;Select cc.Description [Cost Code Description], c.Description [Component Description], x.PercentComplete [Percent Complete]&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;            &lt;span style="color:#ff0000"&gt;From CostCodes cc&lt;/span&gt;&lt;/li&gt; &lt;li&gt;                &lt;span style="color:#ff0000"&gt;Inner Join CostCodeComponentXRef x On cc.CostCodeKey = x.CostCodeKey&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;               &lt;span style="color:#ff0000"&gt;Inner Join Components c On x.ComponentKey = c.ComponentKey &lt;/span&gt;&lt;/li&gt; &lt;li&gt;            &lt;span style="color:#ff0000"&gt;Where x.DivisionKey = &amp;#39;&lt;/span&gt; &lt;span style="color:#808080"&gt;+&lt;/span&gt; &lt;span style="color:#ff00ff"&gt;Cast&lt;/span&gt;&lt;span style="color:#808080"&gt;(&lt;/span&gt;@DivisionKey &lt;span style="color:#0000ff"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff"&gt;Varchar&lt;/span&gt;&lt;span style="color:#808080"&gt;(&lt;/span&gt;25&lt;span style="color:#808080"&gt;))&lt;/span&gt; &lt;span style="color:#808080"&gt;+&lt;/span&gt; &lt;span style="color:#ff0000"&gt;&amp;#39;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;        &lt;span style="color:#ff0000"&gt;) As Source&lt;/span&gt;&lt;/li&gt; &lt;li&gt;        &lt;span style="color:#ff0000"&gt;Pivot&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;        &lt;span style="color:#ff0000"&gt;(&lt;/span&gt;&lt;/li&gt; &lt;li&gt;            &lt;span style="color:#ff0000"&gt;Min([Percent Complete])&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;            &lt;span style="color:#ff0000"&gt;For [Component Description] In (&amp;#39;&lt;/span&gt; &lt;span style="color:#808080"&gt;+&lt;/span&gt; @Components &lt;span style="color:#808080"&gt;+&lt;/span&gt; &lt;span style="color:#ff0000"&gt;&amp;#39;)&lt;/span&gt;&lt;/li&gt; &lt;li&gt;        &lt;span style="color:#ff0000"&gt;) As ThePivot&amp;#39;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;       &lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff"&gt;Exec&lt;/span&gt;&lt;span style="color:#808080"&gt;(&lt;/span&gt;@Query&lt;span style="color:#808080"&gt;)&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;END&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;Go&lt;/span&gt;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;          &lt;h2 align="center"&gt;Snip 3&lt;/h2&gt;    &lt;p&gt;Again, you’ll need to tweak the SQL (within the red text) to your specific selection needs. But overall, the “Pivot” keyword, coupled with the appropriate selection criteria will rotate your data accordingly.&lt;/p&gt;  &lt;p&gt;Take your time in looking at the code. And be sure to comment and let me know if you need any help or have any questions.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8993904770210432487-2809357711187793708?l=boyd.aspectdatasystems.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyd.aspectdatasystems.com/feeds/2809357711187793708/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8993904770210432487&amp;postID=2809357711187793708&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8993904770210432487/posts/default/2809357711187793708'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8993904770210432487/posts/default/2809357711187793708'/><link rel='alternate' type='text/html' href='http://boyd.aspectdatasystems.com/2012/01/pivot-tables-in-tsql-rant.html' title='Pivot Tables in TSQL: A Rant'/><author><name>MaryAnn Campbell</name><uri>http://www.blogger.com/profile/13588806410993702811</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/-gZYzg2Prayc/TwjpA5GCo4I/AAAAAAAAAJg/ElvNvYyCynI/s72-c/image_thumb%25255B1%25255D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8993904770210432487.post-3856525050538984829</id><published>2011-12-22T23:30:00.001-05:00</published><updated>2011-12-22T23:34:32.727-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Security'/><category scheme='http://www.blogger.com/atom/ns#' term='Utilities'/><category scheme='http://www.blogger.com/atom/ns#' term='Power Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server'/><title type='text'>Unlocker – A Great Utility for Dealing with Stubborn Files</title><content type='html'>&lt;p&gt;Yes, it’s been quite a while since blogging. I’ve been doing my hair. &lt;img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://lh3.ggpht.com/-sX3Vp9hx2Rs/TvQD2JsOsmI/AAAAAAAAAIg/0vTIM7I5Lz0/wlEmoticon-smile%25255B2%25255D.png?imgmax=800" /&gt;&lt;/p&gt;  &lt;p&gt;I have an old archive drive that has some old code libraries and db’s I need to resurrect. When I went to copy the &lt;a title="SQL Server" href="http://www.microsoft.com/sqlserver/en/us/default.aspx" target="_blank"&gt;SQL Server&lt;/a&gt; database files over (*.mdf &amp;amp; *.ldf), I surprisingly received error messages telling me I don’t have “permissions” to the file.&lt;/p&gt;  &lt;p&gt;Um, f’real? I mean, once in a blue moon I’ll get a lame message like that from Windows. But this time, it was very unusual. A database I’d built by hand and used on insanely large enterprise levels? Come on.&lt;/p&gt;  &lt;p&gt;At this point I’ve no clue why the negative temperament. However, I didn’t really care. I needed the files and needed them quick. So the first thing one does is check out what processes have a hold on my files. A quick search via &lt;a title="Process Explorer" href="http://technet.microsoft.com/en-us/sysinternals/bb896653" target="_blank"&gt;Process Explorer&lt;/a&gt; didn’t turn up anything. So, I then go to the security settings of the files and have some interesting text to read I’ve never seen before in all my travels:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;font color="#c0504d"&gt;&amp;quot;You do not have permission to view or edit this object's permission settings.”&lt;/font&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Now things &lt;strong&gt;*really*&lt;/strong&gt; don’t make sense. I’m quite obviously the proverbial god on my machine. There’s no higher authority (other than Winderz itself). I can neither view the file’s security settings nor take ownership of the files.&lt;/p&gt;  &lt;p&gt;Enter &lt;a title="Unlocker" href="http://www.emptyloop.com/unlocker/" target="_blank"&gt;Unlocker&lt;/a&gt;. A slick little, humble utility that totally P’wned whatever had an invisible hold on the files. By humble I mean, it just does its job and goes home. That’s it.&lt;/p&gt;  &lt;p&gt;Upon startup, it’s no-nonsense interface just pulls up a file selection dialog:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-3tiFNTnKu8A/TvQD2XTUDjI/AAAAAAAAAIo/UlshFQV1gCc/s1600-h/image%25255B3%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-SLVk9zeIEFs/TvQD2wcCjMI/AAAAAAAAAIw/KHFxvwOKUFM/image_thumb%25255B1%25255D.png?imgmax=800" width="400" height="294" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;At this point, the creator, Cedrick Collomb, assumes that if you’ve taken the time to find his utility, download and install it, that you know what you need to do next. So I select my first file (one of four having problems), and get the next dialog:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-0a82PSOsKDw/TvQD3O58Q7I/AAAAAAAAAI4/j_nA1KWTVMc/s1600-h/image%25255B10%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-b6C1PUetu6U/TvQD3lND-YI/AAAAAAAAAJA/5EcWliq8QWQ/image_thumb%25255B4%25255D.png?imgmax=800" width="405" height="233" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I love it. &lt;strong&gt;&lt;em&gt;“However &lt;/em&gt;&lt;/strong&gt;&lt;a title="Unlocker" href="http://www.emptyloop.com/unlocker/" target="_blank"&gt;&lt;strong&gt;&lt;em&gt;Unlocker&lt;/em&gt;&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;&lt;em&gt; can help you deal with this object.”&lt;/em&gt;&lt;/strong&gt; A totally confident statement that &lt;a href="http://www.cwtv.com/shows/nikita/cast/xander-berkeley" target="_blank"&gt;Percy&lt;/a&gt; on &lt;a title="Nikita" href="http://www.cwtv.com/shows/nikita" target="_blank"&gt;Nikita&lt;/a&gt; would make to his Cleaner. The following scene, there’s dead bodies everywhere. I’m going to try to use that moniker in some code soon.&lt;/p&gt;  &lt;p&gt;Since I want these files, I select “Move”. It again brings up the selection dialog, but this time it’s looking for a destination folder. After selecting where I want the file moved to, within two seconds, I get the final dialog:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-1ojnTzpV44A/TvQD4MM0S5I/AAAAAAAAAJI/8gaIdCv3PfM/s1600-h/image%25255B14%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-hqmXHn6B57A/TvQD4hbg1_I/AAAAAAAAAJQ/eJatj5RFyag/image_thumb%25255B6%25255D.png?imgmax=800" width="252" height="215" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Click OK and &lt;a title="Unlocker" href="http://www.emptyloop.com/unlocker/" target="_blank"&gt;Unlocker&lt;/a&gt; is gone. Job done.&lt;/p&gt;  &lt;p&gt;Widgets just don’t get much better than this. Simple. Discrete. Does its job and gets outta dodge.&lt;/p&gt;  &lt;p&gt;Great job Cedrick.&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:0767317B-992E-4b12-91E0-4F059A8CECA8:ab35aa68-6b30-4bb2-badf-b167de6850c7" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/SQL+Server" rel="tag"&gt;SQL Server&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Power+Tools" rel="tag"&gt;Power Tools&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Security" rel="tag"&gt;Security&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Utilities" rel="tag"&gt;Utilities&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Windows" rel="tag"&gt;Windows&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Locked+Files" rel="tag"&gt;Locked Files&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Explorer" rel="tag"&gt;Explorer&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Permissions" rel="tag"&gt;Permissions&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Cedrick+Collomb" rel="tag"&gt;Cedrick Collomb&lt;/a&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8993904770210432487-3856525050538984829?l=boyd.aspectdatasystems.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyd.aspectdatasystems.com/feeds/3856525050538984829/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8993904770210432487&amp;postID=3856525050538984829&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8993904770210432487/posts/default/3856525050538984829'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8993904770210432487/posts/default/3856525050538984829'/><link rel='alternate' type='text/html' href='http://boyd.aspectdatasystems.com/2011/12/unlocker-great-utility-for-dealing-with.html' title='Unlocker – A Great Utility for Dealing with Stubborn Files'/><author><name>MaryAnn Campbell</name><uri>http://www.blogger.com/profile/13588806410993702811</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/-sX3Vp9hx2Rs/TvQD2JsOsmI/AAAAAAAAAIg/0vTIM7I5Lz0/s72-c/wlEmoticon-smile%25255B2%25255D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8993904770210432487.post-9146092046288867154</id><published>2011-06-02T13:38:00.001-04:00</published><updated>2011-06-02T13:38:21.235-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Technology'/><title type='text'>Skype Rawks!</title><content type='html'>&lt;p&gt;I’m using Skype for the first time per a new client requirement. I just got off my first call. I must say the quality was incredible. I’m very impressed.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;I guess we’ll all have to tune in to see how things go now that Microsoft owns them. The next year or so may very well be interesting.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8993904770210432487-9146092046288867154?l=boyd.aspectdatasystems.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyd.aspectdatasystems.com/feeds/9146092046288867154/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8993904770210432487&amp;postID=9146092046288867154&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8993904770210432487/posts/default/9146092046288867154'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8993904770210432487/posts/default/9146092046288867154'/><link rel='alternate' type='text/html' href='http://boyd.aspectdatasystems.com/2011/06/skype-rawks.html' title='Skype Rawks!'/><author><name>MaryAnn Campbell</name><uri>http://www.blogger.com/profile/13588806410993702811</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8993904770210432487.post-6638691134827207167</id><published>2011-02-03T09:28:00.001-05:00</published><updated>2011-02-03T09:28:49.676-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Geek'/><category scheme='http://www.blogger.com/atom/ns#' term='Humor'/><title type='text'>The XKCD Guy is a Genius</title><content type='html'>&lt;p&gt;I just love that guy:&lt;/p&gt;  &lt;p&gt;&lt;a title="http://www.xkcd.com/835/" href="http://www.xkcd.com/835/"&gt;http://www.xkcd.com/835/&lt;/a&gt;    &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:453e7346-7e8e-49dc-a42e-a8077358d75f" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Humor" rel="tag"&gt;Humor&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Geek" rel="tag"&gt;Geek&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8993904770210432487-6638691134827207167?l=boyd.aspectdatasystems.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyd.aspectdatasystems.com/feeds/6638691134827207167/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8993904770210432487&amp;postID=6638691134827207167&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8993904770210432487/posts/default/6638691134827207167'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8993904770210432487/posts/default/6638691134827207167'/><link rel='alternate' type='text/html' href='http://boyd.aspectdatasystems.com/2011/02/xkcd-guy-is-genius.html' title='The XKCD Guy is a Genius'/><author><name>MaryAnn Campbell</name><uri>http://www.blogger.com/profile/13588806410993702811</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8993904770210432487.post-9068817390378740853</id><published>2010-11-10T12:01:00.001-05:00</published><updated>2010-11-10T12:01:19.598-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Geek'/><category scheme='http://www.blogger.com/atom/ns#' term='Humor'/><title type='text'>The number 58?</title><content type='html'>&lt;p&gt;Today's date, 11/10/10, is 111010 which in Binary is 58. I wonder the significance in that number and why on earth I even noticed this???&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &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:0767317B-992E-4b12-91E0-4F059A8CECA8:fac56b99-7200-4d31-b12d-6bd4a1b4c1fa" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Geek" rel="tag"&gt;Geek&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Binary" rel="tag"&gt;Binary&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8993904770210432487-9068817390378740853?l=boyd.aspectdatasystems.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyd.aspectdatasystems.com/feeds/9068817390378740853/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8993904770210432487&amp;postID=9068817390378740853&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8993904770210432487/posts/default/9068817390378740853'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8993904770210432487/posts/default/9068817390378740853'/><link rel='alternate' type='text/html' href='http://boyd.aspectdatasystems.com/2010/11/number-58.html' title='The number 58?'/><author><name>MaryAnn Campbell</name><uri>http://www.blogger.com/profile/13588806410993702811</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8993904770210432487.post-1890811625509638888</id><published>2010-10-18T18:46:00.001-04:00</published><updated>2010-10-18T21:46:42.742-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TFS'/><category scheme='http://www.blogger.com/atom/ns#' term='Power Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio'/><title type='text'>Migrating a Shelveset from One Branch to Another in VSTS 2010</title><content type='html'>&lt;p&gt;There’s a very nice list of utilities the &lt;a title="VSTS 2010 Power Tools" href="http://msdn.microsoft.com/en-us/vstudio/bb980963.aspx" target="_blank"&gt;Visual Studio 2010 Power Tools&lt;/a&gt; brings to the table. It would definitely benefit any developer using VSTS 2010 to get the power tools installed and bring themselves up to speed on the capabilities available.&lt;/p&gt;  &lt;p&gt;However, there’s one particular nugget that is very helpful when it comes to projects that have a branching strategy in place. And that’s migrating shelves from one code branch to another in your repository. For more on proper branching strategies, see the &lt;a title="Branching" href="http://tfsbranchingguideiii.codeplex.com/" rel="tag" target="_blank"&gt;Visual Studio 2010 TFS Branching Guide&lt;/a&gt; on &lt;a title="CodePlex" href="http://www.codeplex.com/" target="_blank"&gt;CodePlex&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Some of the power tools available are only available from the command line out of the box. This one falls into that category. So to start with, bring up a Visual Studio command prompt. The easiest way is to hit the Windows key and type “command” in the search box:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_gvx7dQWZo0Y/TLzOJMVSssI/AAAAAAAAADw/Q3fOA--PKek/s1600-h/image%5B3%5D.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://lh5.ggpht.com/_gvx7dQWZo0Y/TLzOJaSXzkI/AAAAAAAAAD0/Msazow0ww9M/image_thumb%5B1%5D.png?imgmax=800" width="413" height="423" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;To see your available options and the nomenclature of the unshelve command, type in “&lt;strong&gt;tfpt unshelve /?&lt;/strong&gt;”:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_gvx7dQWZo0Y/TLzOJl476NI/AAAAAAAAAD4/THApEzw_BQs/s1600-h/image%5B21%5D.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://lh4.ggpht.com/_gvx7dQWZo0Y/TLzOJ8vwz9I/AAAAAAAAAD8/gxGmD5XFjSU/image_thumb%5B11%5D.png?imgmax=800" width="562" height="292" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Pretty simple and straightforward. But here’s a snip for you to copy/paste into the command line, just replace the tokens accordingly:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;tfpt unshelve “&amp;lt;your shelveset name&amp;gt;”;&amp;lt;TFS Username&amp;gt; /migrate /source:”&amp;lt;serverPath&amp;gt;” /target:”&amp;lt;serverPath&amp;gt;”&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Of course, I included the double quotes because more often than not, shelveset names as well as server paths have spaces in the text.&lt;/p&gt;  &lt;p&gt;Here’s a sample with tokens replaced:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;tfpt unshelve “Latest - Pre v1.0 to v2.0 Branch Migration”;joedeveloper /migrate /source:”$/trunk/v1.0/Source” /target:”$/trunk/v2.0/Source”&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;It’s that simple. However, there’s one caveat: You may receive an error telling you, “&lt;strong&gt;Unable to Determine the Workspace&lt;/strong&gt;”. The easiest way around this is to run the unshelve command directly from one of your local directories that’s mapped to your local drive. In my case, I typically just run it from the source directory that’s mapped to the source server path. So in the above example, I would navigate to the “&lt;strong&gt;C:\Projects\MySoftware\trunk\v1.0\Source\&lt;/strong&gt;” directory from the VS command line before running the unshelve command.&lt;/p&gt;  &lt;p&gt;From there, you’ll receive dialog prompts similar to those in Visual Studio asking you to perform a merge. Follow the instructions, and you should start seeing confirmations in your command window for every file merged:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_gvx7dQWZo0Y/TLzOKB7D-sI/AAAAAAAAAEA/TqE1SXQHzMs/s1600-h/image%5B25%5D.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://lh5.ggpht.com/_gvx7dQWZo0Y/TLzOKjT-pVI/AAAAAAAAAEE/Nd2Wrycmn18/image_thumb%5B13%5D.png?imgmax=800" width="582" height="74" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;If you have local changes in the target directory, you’ll need to resolve them manually. From there, your merge of your shelveset from the /source to the /target will be complete.&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:0767317B-992E-4b12-91E0-4F059A8CECA8:6f7662d4-d705-42ea-a56e-ed5b2e1adb81" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Visual+Studio" rel="tag"&gt;Visual Studio&lt;/a&gt;,&lt;a href="http://technorati.com/tags/TFS" rel="tag"&gt;TFS&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Power+Tools" rel="tag"&gt;Power Tools&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Programming" rel="tag"&gt;Programming&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Development" rel="tag"&gt;Development&lt;/a&gt;,&lt;a href="http://technorati.com/tags/.NET" rel="tag"&gt;.NET&lt;/a&gt;,&lt;a href="http://technorati.com/tags/DotNet" rel="tag"&gt;DotNet&lt;/a&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8993904770210432487-1890811625509638888?l=boyd.aspectdatasystems.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyd.aspectdatasystems.com/feeds/1890811625509638888/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8993904770210432487&amp;postID=1890811625509638888&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8993904770210432487/posts/default/1890811625509638888'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8993904770210432487/posts/default/1890811625509638888'/><link rel='alternate' type='text/html' href='http://boyd.aspectdatasystems.com/2010/10/migrating-shelveset-from-one-branch-to.html' title='Migrating a Shelveset from One Branch to Another in VSTS 2010'/><author><name>MaryAnn Campbell</name><uri>http://www.blogger.com/profile/13588806410993702811</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_gvx7dQWZo0Y/TLzOJaSXzkI/AAAAAAAAAD0/Msazow0ww9M/s72-c/image_thumb%5B1%5D.png?imgmax=800' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8993904770210432487.post-4696846183999006454</id><published>2010-10-05T10:16:00.001-04:00</published><updated>2010-10-05T10:16:10.179-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hacks'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Phone 7'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio'/><title type='text'>Windows Phone 7 Developer Tools – Cannot Run in Compatibility Mode on Installation</title><content type='html'>&lt;p&gt;I ran into an interesting problem recently while installing the &lt;a title="Windows Phone 7 Developer Tools" href="http://developer.windowsphone.com/windows-phone-7/" rel="tag" target="_blank"&gt;Windows Phone 7 Developer Tools&lt;/a&gt; (download &lt;a title="here" href="http://go.microsoft.com/?linkid=9713250" rel="tag" target="_blank"&gt;here&lt;/a&gt;). Upon execution of the setup, I received the following:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_gvx7dQWZo0Y/TKszJMeEFbI/AAAAAAAAADY/9CJ-1F8KSck/s1600-h/image2.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://lh6.ggpht.com/_gvx7dQWZo0Y/TKszJXtNbnI/AAAAAAAAADc/D8hWpu5sdbA/image_thumb1.png?imgmax=800" width="431" height="185" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;So naturally, the first place I went to look was on the Compatibility tab of the setup exe’s Properties. Lo and behold, here’s what I found:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_gvx7dQWZo0Y/TKszJrlYf0I/AAAAAAAAADg/YjHUoctaeSc/s1600-h/image7.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://lh6.ggpht.com/_gvx7dQWZo0Y/TKszJ90rIpI/AAAAAAAAADk/B2fDU0_Nwjg/image_thumb3.png?imgmax=800" width="347" height="434" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;I have to say, I’ve never run into that issue before. Why would the compatibility checkbox be disabled? &lt;/p&gt;  &lt;p&gt;Digging a little deeper by heading out to the readme designated in the error window above, here’s what section 2.1.10 says:&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;strong&gt;Visual Studio Setup cannot run in program compatibility mode.&amp;#160; Ensure that the compatibility mode setting is not enabled system-wide or for the Visual Studio Setup application.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt; Just below that are some registry hacks that fixed the issue for me (you may have to reboot after changing):&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;strong&gt;Check Program Compatibility Assistant registry settings&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;strong&gt;Compatibility mode could have been set by Program Compatibility Assistant on earlier failed or canceled attempts to run Visual Studio setup.exe.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;em&gt;&lt;strong&gt;Click Start, and then click Run. &lt;/strong&gt;&lt;/em&gt;&lt;/li&gt;    &lt;li&gt;&lt;em&gt;&lt;strong&gt;Type regedit, and then click OK. &lt;/strong&gt;&lt;/em&gt;&lt;/li&gt;    &lt;li&gt;&lt;em&gt;&lt;strong&gt;Browse to each of the following keys and delete any value that refers to setup.exe in the Visual Studio install path: &lt;/strong&gt;&lt;/em&gt;&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;&lt;em&gt;&lt;strong&gt;HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Compatibility Assistant\Persisted&lt;/strong&gt;&lt;/em&gt;&lt;/li&gt;      &lt;li&gt;&lt;em&gt;&lt;strong&gt;HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers&lt;/strong&gt;&lt;/em&gt;&lt;/li&gt;   &lt;/ul&gt; &lt;/ol&gt;  &lt;p&gt;And there you have it. The compatibility mode checkbox will now be disabled so you can uncheck the box.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_gvx7dQWZo0Y/TKszKAdftQI/AAAAAAAAADo/mwsRzXiOmDQ/s1600-h/image11.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://lh6.ggpht.com/_gvx7dQWZo0Y/TKszKcNJryI/AAAAAAAAADs/LuBTujMGMmY/image_thumb5.png?imgmax=800" width="353" height="437" /&gt;&lt;/a&gt;&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:0767317B-992E-4b12-91E0-4F059A8CECA8:181aaf59-9a66-4c43-99c6-bb0059eab30f" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Visual+Studio" rel="tag"&gt;Visual Studio&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Windows+Phone+7" rel="tag"&gt;Windows Phone 7&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Hacks" rel="tag"&gt;Hacks&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Compatibility" rel="tag"&gt;Compatibility&lt;/a&gt;,&lt;a href="http://technorati.com/tags/WP7" rel="tag"&gt;WP7&lt;/a&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8993904770210432487-4696846183999006454?l=boyd.aspectdatasystems.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyd.aspectdatasystems.com/feeds/4696846183999006454/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8993904770210432487&amp;postID=4696846183999006454&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8993904770210432487/posts/default/4696846183999006454'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8993904770210432487/posts/default/4696846183999006454'/><link rel='alternate' type='text/html' href='http://boyd.aspectdatasystems.com/2010/10/windows-phone-7-developer-tools-cannot.html' title='Windows Phone 7 Developer Tools – Cannot Run in Compatibility Mode on Installation'/><author><name>MaryAnn Campbell</name><uri>http://www.blogger.com/profile/13588806410993702811</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_gvx7dQWZo0Y/TKszJXtNbnI/AAAAAAAAADc/D8hWpu5sdbA/s72-c/image_thumb1.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8993904770210432487.post-8231945436319257752</id><published>2010-07-27T13:20:00.001-04:00</published><updated>2010-07-27T13:20:36.441-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Debugging'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio'/><category scheme='http://www.blogger.com/atom/ns#' term='Browser'/><category scheme='http://www.blogger.com/atom/ns#' term='Firefox'/><title type='text'>Debugging Silverlight Apps in Firefox</title><content type='html'>&lt;p&gt;Here’s a simple little tweak to your Firefox settings that’ll allow you to debug your Silverlight apps in Visual Studio:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Close all instances of FF except one or open a new one&lt;/li&gt;    &lt;li&gt;Type in “about:config” in the address bar&lt;/li&gt;    &lt;li&gt;Accept the warning if it shows up&lt;/li&gt;    &lt;li&gt;Filter down to “dom.pic.plugins.enabled.npctrl.dll”&lt;/li&gt;    &lt;li&gt;Double-click to set the value to “false”&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Voila! VS Debugger will now stop on your breakpoints accordingly.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8993904770210432487-8231945436319257752?l=boyd.aspectdatasystems.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyd.aspectdatasystems.com/feeds/8231945436319257752/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8993904770210432487&amp;postID=8231945436319257752&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8993904770210432487/posts/default/8231945436319257752'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8993904770210432487/posts/default/8231945436319257752'/><link rel='alternate' type='text/html' href='http://boyd.aspectdatasystems.com/2010/07/debugging-silverlight-apps-in-firefox.html' title='Debugging Silverlight Apps in Firefox'/><author><name>MaryAnn Campbell</name><uri>http://www.blogger.com/profile/13588806410993702811</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8993904770210432487.post-623549364857199767</id><published>2010-06-09T09:29:00.001-04:00</published><updated>2010-06-09T09:29:44.887-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Technology'/><category scheme='http://www.blogger.com/atom/ns#' term='Humor'/><title type='text'>From the Desk of Steve Jobs: iPhone4 to Utilize Flash!</title><content type='html'>&lt;p&gt;It’s true!&lt;/p&gt;  &lt;p&gt;&lt;a title="http://voppa.posterous.com/19883514" href="http://voppa.posterous.com/19883514"&gt;http://voppa.posterous.com/19883514&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8993904770210432487-623549364857199767?l=boyd.aspectdatasystems.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyd.aspectdatasystems.com/feeds/623549364857199767/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8993904770210432487&amp;postID=623549364857199767&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8993904770210432487/posts/default/623549364857199767'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8993904770210432487/posts/default/623549364857199767'/><link rel='alternate' type='text/html' href='http://boyd.aspectdatasystems.com/2010/06/from-desk-of-steve-jobs-iphone4-to.html' title='From the Desk of Steve Jobs: iPhone4 to Utilize Flash!'/><author><name>MaryAnn Campbell</name><uri>http://www.blogger.com/profile/13588806410993702811</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8993904770210432487.post-7145589566480038528</id><published>2010-05-25T15:47:00.006-04:00</published><updated>2010-05-25T16:59:11.957-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Unit Testing'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio'/><title type='text'>Unit Testing Internal Members – A Reminder</title><content type='html'>Beginning in .NET v2.0, there’s a very easy method of allowing internals in your projects to be seen by external testing projects. Simply decorate your type with the &lt;a href="http://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.internalsvisibletoattribute.aspx" target="_blank"&gt;InternalsVisibleTo&lt;/a&gt; attribute and, badda-bing, you’re in bidness. Or, an easier method of doing so is to decorate the entire assembly by navigating to the AssemblyInfo.cs file of the Visual Studio project containing the internal members you’re wanting to test. Then add the following assembly attribute to the file: &lt;br /&gt;&lt;pre class="csharpcode"&gt;[assembly: InternalsVisibleTo( &lt;span class="str"&gt;&amp;lt;your fully qualified test project name here&amp;gt;&lt;/span&gt; )]&lt;/pre&gt;Example: &lt;br /&gt;&lt;pre class="csharpcode"&gt;[assembly: InternalsVisibleTo( &lt;span class="str"&gt;"MyTestProject.Test"&lt;/span&gt; )]&lt;/pre&gt;Now, you should be able to see your test project available to select for addition of private selectors from within your internals classes:&lt;br /&gt;&lt;a href="http://lh5.ggpht.com/_gvx7dQWZo0Y/S_wvTc-DKGI/AAAAAAAAACc/-UDdm3wd80I/s1600-h/image%5B7%5D.png"&gt;&lt;img alt="image" border="0" height="163" src="http://lh4.ggpht.com/_gvx7dQWZo0Y/S_wvT3sgpHI/AAAAAAAAACg/OjdwN6t5WfA/image_thumb%5B3%5D.png?imgmax=800" style="border-width: 0px; display: inline;" title="image" width="592" /&gt;&lt;/a&gt; &lt;br /&gt;The accessor file will automagically be added to your test project. Now you’re ready to test the internals directly as they’ll now be accessible through your project’s API.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8993904770210432487-7145589566480038528?l=boyd.aspectdatasystems.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyd.aspectdatasystems.com/feeds/7145589566480038528/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8993904770210432487&amp;postID=7145589566480038528&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8993904770210432487/posts/default/7145589566480038528'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8993904770210432487/posts/default/7145589566480038528'/><link rel='alternate' type='text/html' href='http://boyd.aspectdatasystems.com/2010/05/unit-testing-internal-members-reminder.html' title='Unit Testing Internal Members – A Reminder'/><author><name>MaryAnn Campbell</name><uri>http://www.blogger.com/profile/13588806410993702811</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_gvx7dQWZo0Y/S_wvT3sgpHI/AAAAAAAAACg/OjdwN6t5WfA/s72-c/image_thumb%5B3%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8993904770210432487.post-9190361987339282780</id><published>2010-05-21T11:33:00.001-04:00</published><updated>2010-05-24T09:23:29.246-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TFS'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio'/><title type='text'>Visual Studio 2010 TFS Mapping Appends “_1” To Project Folder</title><content type='html'>&lt;p&gt;Very weird anomaly I ran into yesterday.&lt;/p&gt;  &lt;p&gt;I checked in a new project with associated code to TFS source control. Upon checkin, TFS insisted on appending “_1” to my project folder’s name. It wouldn’t allow me to change it anywhere before checking in.&lt;/p&gt;  &lt;p&gt;After the checkin, I hunted around to see what I could find. Another mapping was added to my Workspace “Working Folders” section that had a direct link between the new Source Control Folder and my Local Folder. BTW – My local project folder name did &lt;strong&gt;*not*&lt;/strong&gt; have the “_1” appended. It was as I created it.&lt;/p&gt;  &lt;p&gt;TFS Solution: I actually had to have someone else remove the “_1” from the project folder directly in Source Control and check in the change. He did do it from the command line though, which I didn’t attempt. Maybe that had something to do with it. I doubt it though as the UI is running command line commands under the hood. I just wasn’t in good graces with TFS for some reason and couldn’t make it work.&lt;/p&gt;  &lt;p&gt;Local Solution: First, I removed the erroneous mapping from my working folders. Just select the mapping and click “Remove”:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_gvx7dQWZo0Y/S_anq15oN7I/AAAAAAAAACU/BQMHThqPgVQ/s1600-h/image%5B3%5D.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://lh3.ggpht.com/_gvx7dQWZo0Y/S_anraQDXXI/AAAAAAAAACY/vsxHvsPFb3s/image_thumb%5B1%5D.png?imgmax=800" width="422" height="350" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Then, I reestablished the project folder’s mapping directly in Source Control. Back in bidness.&lt;/p&gt;  &lt;p&gt;Please comment if you happen to have insight into this little gremlin.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8993904770210432487-9190361987339282780?l=boyd.aspectdatasystems.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyd.aspectdatasystems.com/feeds/9190361987339282780/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8993904770210432487&amp;postID=9190361987339282780&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8993904770210432487/posts/default/9190361987339282780'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8993904770210432487/posts/default/9190361987339282780'/><link rel='alternate' type='text/html' href='http://boyd.aspectdatasystems.com/2010/05/visual-studio-2010-tfs-mapping-appends.html' title='Visual Studio 2010 TFS Mapping Appends “_1” To Project Folder'/><author><name>MaryAnn Campbell</name><uri>http://www.blogger.com/profile/13588806410993702811</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_gvx7dQWZo0Y/S_anraQDXXI/AAAAAAAAACY/vsxHvsPFb3s/s72-c/image_thumb%5B1%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8993904770210432487.post-1461695450178102096</id><published>2010-05-19T14:41:00.007-04:00</published><updated>2010-05-25T17:03:28.541-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Security'/><category scheme='http://www.blogger.com/atom/ns#' term='Regular Expressions'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server'/><category scheme='http://www.blogger.com/atom/ns#' term='AzMan'/><title type='text'>Authorization Manager (AzMan) Connections to SQL Server</title><content type='html'>&lt;p&gt;Strangely, it was rather difficult to find any good examples of the proper connection string nomenclature for connecting &lt;a href="http://msdn.microsoft.com/en-us/library/bb897401.aspx" target="_blank"&gt;AzMan&lt;/a&gt; to &lt;a href="http://www.microsoft.com/sqlserver/2008/en/us/default.aspx" target="_blank"&gt;SQL Server&lt;/a&gt; (notice I said *good* examples). Even the MS documentation conveniently excludes examples (surprise, surprise!).&lt;/p&gt;&lt;p&gt;So with a little trial &amp;amp; error, I finally figured it out. Here are the two I’ve come up with:&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Trusted&lt;/strong&gt;: “&lt;font color="#800000"&gt;mssql://Driver={SQL Server};Server={&amp;lt;servername, “local” or “.”&amp;gt;};/&amp;lt;database name&amp;gt;/&amp;lt;AzMan store name&amp;gt;&lt;/font&gt;”&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Untrusted&lt;/strong&gt;: “&lt;font color="#800000"&gt;mssql://Driver={SQL Server};Server={&amp;lt;servername, “local” or “.”&amp;gt;};Uid=&amp;lt;user id&amp;gt;;Pwd=&amp;lt;password&amp;gt;;/&amp;lt;database name&amp;gt;/&amp;lt;AzMan store name&amp;gt;&lt;/font&gt;”&lt;/p&gt;&lt;p&gt;Examples:&lt;/p&gt;&lt;p&gt;&lt;font color="#800000"&gt;mssql://Driver={SQL Server};Server={MySqlServer};/MyDatabase/ClientABC&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color="#800000"&gt;mssql://Driver={SQL Server};Server={.};Uid=MyId;Pwd=MyPassword;/SomeDatabase/SomeOtherAzManStoreName&lt;/font&gt;&lt;/p&gt;&lt;p&gt;One caveat: Under my current setup with our client’s VPN, I wasn’t able to get Windows Auth to work. When attempting to use domain ID’s, AzMan would throw errors when attempting to connect:&lt;/p&gt;&lt;p&gt;&lt;font color="#800000"&gt;mssql://Driver={SQL Server};Server={.};Uid=MyDomain\MyDomainId;Pwd=MyPassword;/SomeDatabase/SomeOtherAzManStoreName&lt;/font&gt;&lt;/p&gt;&lt;p&gt;Instead, the connection had to be setup with SQL Server auth, using a user that had been created locally on the SQL Server instance.&lt;/p&gt;&lt;p&gt;I’ve also created a regular expression to match the connection string if it’s being passed in from outside sources for multi-tenancy purposes:&lt;/p&gt;&lt;p&gt;&lt;font color="#800000"&gt;^mssql://Driver={SQL Server};Server=\{[\w-.]*\};(Uid=[\w]*;Pwd=[\w-*]*;)*/[\w-]*/[\w-]*&lt;/font&gt;&lt;/p&gt;&lt;p&gt;I’ve added the expression to &lt;a href="http://www.gskinner.com/site2_5/" target="_blank"&gt;Grant Skinner&lt;/a&gt;’s very nice online &lt;a title="Grant Skinner&amp;#39;s Regular Expression Builder &amp;amp; Tester" href="http://gskinner.com/RegExr/" target="_blank"&gt;Regular Expression Builder &amp;amp; Tester&lt;/a&gt; library.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8993904770210432487-1461695450178102096?l=boyd.aspectdatasystems.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyd.aspectdatasystems.com/feeds/1461695450178102096/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8993904770210432487&amp;postID=1461695450178102096&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8993904770210432487/posts/default/1461695450178102096'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8993904770210432487/posts/default/1461695450178102096'/><link rel='alternate' type='text/html' href='http://boyd.aspectdatasystems.com/2010/05/authorization-manager-azman-connections.html' title='Authorization Manager (AzMan) Connections to SQL Server'/><author><name>MaryAnn Campbell</name><uri>http://www.blogger.com/profile/13588806410993702811</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8993904770210432487.post-886006675952129598</id><published>2010-05-19T10:18:00.003-04:00</published><updated>2010-05-25T17:03:56.866-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Music'/><category scheme='http://www.blogger.com/atom/ns#' term='Geek'/><category scheme='http://www.blogger.com/atom/ns#' term='Entertainment'/><title type='text'>My New Favorite Rapper</title><content type='html'>&lt;p&gt;Ok, so though some of his songs are off-color and I don’t listen to them all, many of &lt;a href="http://frontalot.com/index.php/" target="_blank"&gt;MC Frontalot’s&lt;/a&gt; songs are great! My current favorite is Charity Case. I’m just crackin’ up here!&lt;/p&gt;&lt;p&gt;I listen to him on &lt;a href="http://listen.grooveshark.com/" target="_blank"&gt;GrooveShark&lt;/a&gt;, that way I can filter out the smut from the good stuff. &lt;/p&gt;&lt;p&gt;Sorry for not buying your CD’s Front. But if you’re ever in my neck of the woods, I’ll come see you and make up for it with dinner that’ll add up to more than the cost of a CD anyways.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8993904770210432487-886006675952129598?l=boyd.aspectdatasystems.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyd.aspectdatasystems.com/feeds/886006675952129598/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8993904770210432487&amp;postID=886006675952129598&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8993904770210432487/posts/default/886006675952129598'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8993904770210432487/posts/default/886006675952129598'/><link rel='alternate' type='text/html' href='http://boyd.aspectdatasystems.com/2010/05/my-new-favorite-rapper.html' title='My New Favorite Rapper'/><author><name>MaryAnn Campbell</name><uri>http://www.blogger.com/profile/13588806410993702811</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8993904770210432487.post-5142081710749129270</id><published>2010-05-18T13:26:00.004-04:00</published><updated>2010-05-25T16:58:19.461-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Blog Engines'/><category scheme='http://www.blogger.com/atom/ns#' term='Blog'/><title type='text'>Back in the Blogging Saddle</title><content type='html'>Unfortunately, something happened at my ISP (&lt;a href="http://www.1and1.com/" target="_blank"&gt;1 and 1&lt;/a&gt;) that made my blog blow up. No clue at this point what it was. But despite my best efforts and time, I couldn’t get it to work again. &lt;br /&gt;So, I went out to find that the guys at &lt;a href="http://www.dotnetblogengine.net/" target="_blank"&gt;blogengine.net&lt;/a&gt; had come out with a new version. I’ve been using their engine for a while and love it! But when I went and got the latest version up and running, alas, it would neither work with my old theme nor would it work with any other themes that are out there for the engine. Literally none of the themes I found would work with the new version other than the vanilla defaults that came with the engine. So instead, I went with the next best and quickest thing I was able to find and still use my own custom URI for free: &lt;a href="http://www.blogger.com/" target="_blank"&gt;Blogger&lt;/a&gt;. Yes, there are other options out there that are much geekier and allow more flexibility. But again, time was an issue for me.&lt;br /&gt;So, here’s the new blog. I’ll be enhancing it as time goes on and will hopefully be able to port over all my old posts from my previous blog. But in the mean time, this’ll be an experiment until I can get it to a manageable state I’m pleased with.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8993904770210432487-5142081710749129270?l=boyd.aspectdatasystems.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyd.aspectdatasystems.com/feeds/5142081710749129270/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8993904770210432487&amp;postID=5142081710749129270&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8993904770210432487/posts/default/5142081710749129270'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8993904770210432487/posts/default/5142081710749129270'/><link rel='alternate' type='text/html' href='http://boyd.aspectdatasystems.com/2010/05/back-in-blogging-saddle.html' title='Back in the Blogging Saddle'/><author><name>MaryAnn Campbell</name><uri>http://www.blogger.com/profile/13588806410993702811</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
