<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/rss2full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/itemcontent.css" type="text/css" media="screen"?><rss xmlns:blogChannel="http://backend.userland.com/blogChannelModule" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>Official BV Software Blog</title>
    <description>New, Updates and Anything else we find interesting</description>
    <link>http://blog.bvsoftware.com/</link>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>BlogEngine.Net Syndication Generator 1.0.0.0 (http://dotnetblogengine.net/)</generator>
    <language>en-US</language>
    <blogChannel:blogRoll>http://blog.bvsoftware.com/opml.axd</blogChannel:blogRoll>
    <blogChannel:blink>http://www.dotnetblogengine.net/syndication.axd</blogChannel:blink>
    <dc:creator>BV Software</dc:creator>
    <dc:description>New, Updates and Anything else we find interesting</dc:description>
    <dc:title>Official BV Software Blog</dc:title>
    <geo:lat>37.600590</geo:lat>
    <geo:long>-77.549640</geo:long>
    <geo:lat>37.593546</geo:lat><geo:long>-77.562719</geo:long><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/BvBlog" type="application/rss+xml" /><item>
      <title>PABP changes to PA-DSS</title>
      <description>&lt;p&gt;
Even before the PCI security standard for applications (PABP) becomes mandatory the PCI organization has retired it. It has been replaced with a new PA-DSS standard. The PCI web site details the&amp;nbsp; &lt;a href="https://www.pcisecuritystandards.org/pdfs/pci_summary_of_pabp_to_pa-dss_changes.pdf" target="_blank"&gt;changes from PABP to PA-DSS&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
One of the big changes is the PA-DSS is NOT required to process credit cards unless your credit card gateway/provider requires it. This should be a huge relief to many merchants as it will allow them to negotiate with their payment provider for a reasonable timeline to get certified.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/BvBlog/~4/283321479" height="1" width="1"/&gt;</description>
      <link>http://feeds.feedburner.com/~r/BvBlog/~3/283321479/post.aspx</link>
      <author>mmcconnell1618</author>
      <comments>http://blog.bvsoftware.com/post/2008/05/PABP-changes-to-PA-DSS.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.bvsoftware.com/post.aspx?id=51c0d6a7-6376-4785-b2a8-ae5ad599266b</guid>
      <pubDate>Sun, 04 May 2008 10:59:00 -0400</pubDate>
      <category>bv commerce</category>
      <dc:publisher>mmcconnell1618</dc:publisher>
      <pingback:server>http://blog.bvsoftware.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.bvsoftware.com/post.aspx?id=51c0d6a7-6376-4785-b2a8-ae5ad599266b</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://blog.bvsoftware.com/trackback.axd?id=51c0d6a7-6376-4785-b2a8-ae5ad599266b</trackback:ping>
      <wfw:comment>http://blog.bvsoftware.com/post/2008/05/PABP-changes-to-PA-DSS.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.bvsoftware.com/syndication.axd?post=51c0d6a7-6376-4785-b2a8-ae5ad599266b</wfw:commentRss>
    <feedburner:origLink>http://blog.bvsoftware.com/post.aspx?id=51c0d6a7-6376-4785-b2a8-ae5ad599266b</feedburner:origLink></item>
    <item>
      <title>BV Commerce wins aspNetPro Reader's Choice Award 2008</title>
      <description>&lt;p&gt;
BV Commerce has once again won the AspNetPro Magazine Reader&amp;#39;s Choice Award for &lt;a href="http://www.bvsoftware.com"&gt;Best eCommerce application&lt;/a&gt;. That makes 4 out of the last 5 years that it has captured the title. An incredible achievement given the pace of innovation in the industry.
&lt;/p&gt;
&lt;p&gt;
DotNetBB our &lt;a href="http://www.dotnetbb.com"&gt;message forum software&lt;/a&gt; has also captured the runner-up position for best asp.net forum software.&amp;nbsp;
&lt;/p&gt;
&lt;img src="http://blog.bvsoftware.com/image.axd?picture=aspRCA08_eCommercePkg_Winner.gif" alt="" /&gt;
&lt;img src="http://blog.bvsoftware.com/image.axd?picture=aspRCA08_ForumApp_Runner-Up.gif" alt="" /&gt;&lt;img src="http://feeds.feedburner.com/~r/BvBlog/~4/277140175" height="1" width="1"/&gt;</description>
      <link>http://feeds.feedburner.com/~r/BvBlog/~3/277140175/post.aspx</link>
      <author>mmcconnell1618</author>
      <comments>http://blog.bvsoftware.com/post/2008/04/BV-Commerce-wins-aspNetPro-Reader's-Choice-Award-2008.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.bvsoftware.com/post.aspx?id=055d35cc-8f4f-4663-b9f4-3ad04fa10d41</guid>
      <pubDate>Thu, 24 Apr 2008 16:31:00 -0400</pubDate>
      <category>bv commerce</category>
      <category>Company History</category>
      <dc:publisher>mmcconnell1618</dc:publisher>
      <pingback:server>http://blog.bvsoftware.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.bvsoftware.com/post.aspx?id=055d35cc-8f4f-4663-b9f4-3ad04fa10d41</pingback:target>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://blog.bvsoftware.com/trackback.axd?id=055d35cc-8f4f-4663-b9f4-3ad04fa10d41</trackback:ping>
      <wfw:comment>http://blog.bvsoftware.com/post/2008/04/BV-Commerce-wins-aspNetPro-Reader's-Choice-Award-2008.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.bvsoftware.com/syndication.axd?post=055d35cc-8f4f-4663-b9f4-3ad04fa10d41</wfw:commentRss>
    <feedburner:origLink>http://blog.bvsoftware.com/post.aspx?id=055d35cc-8f4f-4663-b9f4-3ad04fa10d41</feedburner:origLink></item>
    <item>
      <title>Generate a Customer List for BV Commerce 5</title>
      <description>&lt;p&gt;
If you&amp;#39;ve ever needed to get a quick export of everyone who has purchased from your store in the last year this SQL script can be used to generate a comma separated text file. Make sure you change the &amp;quot;&amp;gt; date&amp;quot; part to be the correct starting point for your export. You&amp;#39;ll get customers&amp;#39; names, address, phone and email as long as they placed an order on your store.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;div style="background: black none repeat scroll 0% 50%; font-family: Consolas; font-size: 14pt; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #ff8000"&gt;SELECT &lt;/span&gt;&lt;span style="color: lime"&gt;&amp;#39;LastName, FirstName, Line1, Line2, City, &lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: lime"&gt;RegionName, PostalCode, CountryName, &lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: lime"&gt;Phone, Email&amp;#39; &lt;/span&gt;&lt;span style="color: #ff8000"&gt;AS &lt;/span&gt;Expr1, 0 &lt;span style="color: #ff8000"&gt;AS &lt;/span&gt;[Order]
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #ff8000"&gt;UNION&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #ff8000"&gt;SELECT &lt;/span&gt;&amp;nbsp; &lt;span style="color: #ff8000"&gt;CAST&lt;/span&gt;(&lt;span style="color: #ff8000"&gt;CAST&lt;/span&gt;(AddressBook &lt;span style="color: #ff8000"&gt;AS &lt;/span&gt;xml ).query(N&lt;span style="color: lime"&gt;&amp;#39;/AddressBook/Address[last()]/LastName/text()&amp;#39;&lt;/span&gt;) &lt;span style="color: #ff8000"&gt;AS &lt;/span&gt;nvarchar(1000)) 
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
+ &lt;span style="color: lime"&gt;&amp;#39;, &amp;#39; &lt;/span&gt;+ &lt;span style="color: #ff8000"&gt;CAST&lt;/span&gt;(&lt;span style="color: #ff8000"&gt;CAST&lt;/span&gt;(AddressBook &lt;span style="color: #ff8000"&gt;AS &lt;/span&gt;xml ).query(N&lt;span style="color: lime"&gt;&amp;#39;/AddressBook/Address[last()]/FirstName/text()&amp;#39;&lt;/span&gt;) &lt;span style="color: #ff8000"&gt;AS &lt;/span&gt;nvarchar(1000)) 
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
+ &lt;span style="color: lime"&gt;&amp;#39;, &amp;#39; &lt;/span&gt;+ &lt;span style="color: #ff8000"&gt;CAST&lt;/span&gt;(&lt;span style="color: #ff8000"&gt;CAST&lt;/span&gt;(AddressBook &lt;span style="color: #ff8000"&gt;AS &lt;/span&gt;xml ).query(N&lt;span style="color: lime"&gt;&amp;#39;/AddressBook/Address[last()]/Line1/text()&amp;#39;&lt;/span&gt;) &lt;span style="color: #ff8000"&gt;AS &lt;/span&gt;nvarchar(1000)) 
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
+ &lt;span style="color: lime"&gt;&amp;#39;, &amp;#39; &lt;/span&gt;+ &lt;span style="color: #ff8000"&gt;CAST&lt;/span&gt;(&lt;span style="color: #ff8000"&gt;CAST&lt;/span&gt;(AddressBook &lt;span style="color: #ff8000"&gt;AS &lt;/span&gt;xml ).query(N&lt;span style="color: lime"&gt;&amp;#39;/AddressBook/Address[last()]/tLine2/text()&amp;#39;&lt;/span&gt;) &lt;span style="color: #ff8000"&gt;AS &lt;/span&gt;nvarchar(1000)) 
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
+ &lt;span style="color: lime"&gt;&amp;#39;, &amp;#39; &lt;/span&gt;+ &lt;span style="color: #ff8000"&gt;CAST&lt;/span&gt;(&lt;span style="color: #ff8000"&gt;CAST&lt;/span&gt;(AddressBook &lt;span style="color: #ff8000"&gt;AS &lt;/span&gt;xml ).query(N&lt;span style="color: lime"&gt;&amp;#39;/AddressBook/Address[last()]/City/text()&amp;#39;&lt;/span&gt;) &lt;span style="color: #ff8000"&gt;AS &lt;/span&gt;nvarchar(1000)) 
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
+ &lt;span style="color: lime"&gt;&amp;#39;, &amp;#39; &lt;/span&gt;+ &lt;span style="color: #ff8000"&gt;CAST&lt;/span&gt;(&lt;span style="color: #ff8000"&gt;CAST&lt;/span&gt;(AddressBook &lt;span style="color: #ff8000"&gt;AS &lt;/span&gt;xml ).query(N&lt;span style="color: lime"&gt;&amp;#39;/AddressBook/Address[last()]/RegionName/text()&amp;#39;&lt;/span&gt;) &lt;span style="color: #ff8000"&gt;AS &lt;/span&gt;nvarchar(1000)) 
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
+ &lt;span style="color: lime"&gt;&amp;#39;, &amp;#39; &lt;/span&gt;+ &lt;span style="color: #ff8000"&gt;CAST&lt;/span&gt;(&lt;span style="color: #ff8000"&gt;CAST&lt;/span&gt;(AddressBook &lt;span style="color: #ff8000"&gt;AS &lt;/span&gt;xml ).query(N&lt;span style="color: lime"&gt;&amp;#39;/AddressBook/Address[last()]/PostalCode/text()&amp;#39;&lt;/span&gt;) &lt;span style="color: #ff8000"&gt;AS &lt;/span&gt;nvarchar(1000)) 
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
+ &lt;span style="color: lime"&gt;&amp;#39;, &amp;#39; &lt;/span&gt;+ &lt;span style="color: #ff8000"&gt;CAST&lt;/span&gt;(&lt;span style="color: #ff8000"&gt;CAST&lt;/span&gt;(AddressBook &lt;span style="color: #ff8000"&gt;AS &lt;/span&gt;xml ).query(N&lt;span style="color: lime"&gt;&amp;#39;/AddressBook/Address[last()]/CountryName/text()&amp;#39;&lt;/span&gt;) &lt;span style="color: #ff8000"&gt;AS &lt;/span&gt;nvarchar(1000)) 
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
+ &lt;span style="color: lime"&gt;&amp;#39;, &amp;#39; &lt;/span&gt;+ &lt;span style="color: #ff8000"&gt;CAST&lt;/span&gt;(&lt;span style="color: #ff8000"&gt;CAST&lt;/span&gt;(AddressBook &lt;span style="color: #ff8000"&gt;AS &lt;/span&gt;xml ).query(N&lt;span style="color: lime"&gt;&amp;#39;/AddressBook/Address[last()]/Phone/text()&amp;#39;&lt;/span&gt;) &lt;span style="color: #ff8000"&gt;AS &lt;/span&gt;nvarchar(1000)) 
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
+ &lt;span style="color: lime"&gt;&amp;#39;, &amp;#39; &lt;/span&gt;+ Email &lt;span style="color: #ff8000"&gt;AS &lt;/span&gt;Expr1, 1 &lt;span style="color: #ff8000"&gt;AS &lt;/span&gt;[Order]
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #ff8000"&gt;FROM &lt;/span&gt;&amp;nbsp; bvc_User
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #ff8000"&gt;WHERE &lt;/span&gt; (bvin &lt;span style="color: #ff8000"&gt;IN&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; (&lt;span style="color: #ff8000"&gt;SELECT DISTINCT &lt;/span&gt;UserId
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span style="color: #ff8000"&gt;FROM &lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;  bvc_Order
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span style="color: #ff8000"&gt;WHERE &lt;/span&gt; (OrderNumber &amp;lt;&amp;gt; &lt;span style="color: lime"&gt;&amp;#39;&amp;#39;&lt;/span&gt;) &lt;span style="color: #ff8000"&gt;AND &lt;/span&gt;(TimeOfOrder &amp;gt; &lt;span style="color: lime"&gt;&amp;#39;01/01/2007&amp;#39;&lt;/span&gt;)))
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #ff8000"&gt;ORDER BY &lt;/span&gt;[Order]
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
&amp;nbsp;Run this in SQL Management Studio and then copy and paste the results to a text file. You can open the text file in Excel as &amp;quot;comma separated&amp;quot; (CSV) to get sort the data or mail merge.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/BvBlog/~4/258497799" height="1" width="1"/&gt;</description>
      <link>http://feeds.feedburner.com/~r/BvBlog/~3/258497799/post.aspx</link>
      <author>mmcconnell1618</author>
      <comments>http://blog.bvsoftware.com/post/2008/03/Generate-a-Customer-List-for-BV-Commerce-5.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.bvsoftware.com/post.aspx?id=569b783d-86db-4929-823b-6b1632fb4e2d</guid>
      <pubDate>Wed, 26 Mar 2008 15:50:00 -0400</pubDate>
      <category>bv commerce</category>
      <category>Code</category>
      <dc:publisher>mmcconnell1618</dc:publisher>
      <pingback:server>http://blog.bvsoftware.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.bvsoftware.com/post.aspx?id=569b783d-86db-4929-823b-6b1632fb4e2d</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://blog.bvsoftware.com/trackback.axd?id=569b783d-86db-4929-823b-6b1632fb4e2d</trackback:ping>
      <wfw:comment>http://blog.bvsoftware.com/post/2008/03/Generate-a-Customer-List-for-BV-Commerce-5.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.bvsoftware.com/syndication.axd?post=569b783d-86db-4929-823b-6b1632fb4e2d</wfw:commentRss>
    <feedburner:origLink>http://blog.bvsoftware.com/post.aspx?id=569b783d-86db-4929-823b-6b1632fb4e2d</feedburner:origLink></item>
    <item>
      <title>If you're late paying your cable TV bill your credit card payments can go up!</title>
      <description>&lt;p&gt;
I&amp;#39;ve got a love/hate relationship with credit card companies. On one hand credit cards make it easy for BV to sell software over the internet. On the other hand chargebacks and fraud with credit cards is a royal pain with limited protection for merchants. I watched a great episode of Frontline on PBS about the &lt;a href="http://www.pbs.org/wgbh/pages/frontline/shows/credit/" target="_blank" title="Secret History of Credit Cards"&gt;Secret History of Credit Cards&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;
The most surprising revelation was that most credit card contracts include a clause called &amp;quot;Universal Default.&amp;quot; Basically, if you make a late payment to any other lender or company the credit card issuer can automatically raise your interest rate. If you&amp;#39;re on vacation and forget to pay Comcast on time your Visa interest rate can jump from 18% to 25% without warning.&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Credit card companies are the only lenders that get to decide how risky you are when they issue you credit AND change their minds about how risky you are later too. My bank doesn&amp;#39;t get to raise my mortgage payments because they think I&amp;#39;m riskier now than when I signed up for my mortgage so why should credit card companies get that ability? Sounds like a huge loophole that lets credit card companies jack up your rates almost at will.
&lt;/p&gt;
&lt;p&gt;
Anyways, if you found this interesting you can &lt;a href="http://www.pbs.org/wgbh/pages/frontline/shows/credit/" title="Watch secret history of credit cards online"&gt;watch the whole episode online&lt;/a&gt;.&amp;nbsp;
&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/BvBlog/~4/257711983" height="1" width="1"/&gt;</description>
      <link>http://feeds.feedburner.com/~r/BvBlog/~3/257711983/post.aspx</link>
      <author>mmcconnell1618</author>
      <comments>http://blog.bvsoftware.com/post/2008/03/If-you're-late-paying-your-cable-TV-bill-your-credit-card-payments-can-go-up!.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.bvsoftware.com/post.aspx?id=ba263c3c-e79b-4db1-af7a-7aba4d62ccde</guid>
      <pubDate>Tue, 25 Mar 2008 11:48:00 -0400</pubDate>
      <category>General</category>
      <category>Legal</category>
      <dc:publisher>mmcconnell1618</dc:publisher>
      <pingback:server>http://blog.bvsoftware.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.bvsoftware.com/post.aspx?id=ba263c3c-e79b-4db1-af7a-7aba4d62ccde</pingback:target>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://blog.bvsoftware.com/trackback.axd?id=ba263c3c-e79b-4db1-af7a-7aba4d62ccde</trackback:ping>
      <wfw:comment>http://blog.bvsoftware.com/post/2008/03/If-you're-late-paying-your-cable-TV-bill-your-credit-card-payments-can-go-up!.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.bvsoftware.com/syndication.axd?post=ba263c3c-e79b-4db1-af7a-7aba4d62ccde</wfw:commentRss>
    <feedburner:origLink>http://blog.bvsoftware.com/post.aspx?id=ba263c3c-e79b-4db1-af7a-7aba4d62ccde</feedburner:origLink></item>
    <item>
      <title>JQuery 1.2.3 conflicts with Google Analytics</title>
      <description>&lt;p&gt;
I was watching our Google Analytics traffic last week and noticed a sharp decline. My first thought was &amp;quot;My God, we&amp;#39;ve been blacklisted by Google or another search engine.&amp;quot; I couldn&amp;#39;t figure out why our traffic had dropped so dramatically. If it had dropped to zero I would have instantly thought the tracking script was at fault but instead it just dropped but kept counting with day to day variations.
&lt;/p&gt;
&lt;p&gt;
I discovered that IE was reporting a script error and that was the clue to the mystery. We had added the JQuery library version 1.2.3 to our master page for some fancy image swapping. It turns out that this particular version of JQuery has an odd way of handling some click events and it conflicts with click handlers in Google Analytics. Apparently it doesn&amp;#39;t happen all the time and it doesn&amp;#39;t happen in all browsers so that&amp;#39;s why we were still seeing some traffic records.
&lt;/p&gt;
&lt;p&gt;
I pulled JQuery until it&amp;#39;s patched and the stats popped back to normal the next day. Whew!
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/BvBlog/~4/254529802" height="1" width="1"/&gt;</description>
      <link>http://feeds.feedburner.com/~r/BvBlog/~3/254529802/post.aspx</link>
      <author>mmcconnell1618</author>
      <comments>http://blog.bvsoftware.com/post/2008/03/JQuery-123-conflicts-with-Google-Analytics.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.bvsoftware.com/post.aspx?id=1bd81220-2c79-4066-b811-ea24c93e0fbc</guid>
      <pubDate>Wed, 19 Mar 2008 17:42:00 -0400</pubDate>
      <category>General</category>
      <category>Code</category>
      <dc:publisher>mmcconnell1618</dc:publisher>
      <pingback:server>http://blog.bvsoftware.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.bvsoftware.com/post.aspx?id=1bd81220-2c79-4066-b811-ea24c93e0fbc</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://blog.bvsoftware.com/trackback.axd?id=1bd81220-2c79-4066-b811-ea24c93e0fbc</trackback:ping>
      <wfw:comment>http://blog.bvsoftware.com/post/2008/03/JQuery-123-conflicts-with-Google-Analytics.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.bvsoftware.com/syndication.axd?post=1bd81220-2c79-4066-b811-ea24c93e0fbc</wfw:commentRss>
    <feedburner:origLink>http://blog.bvsoftware.com/post.aspx?id=1bd81220-2c79-4066-b811-ea24c93e0fbc</feedburner:origLink></item>
    <item>
      <title>Silverlight, MVC, and more at Mix08 in Las Vegas</title>
      <description>&lt;p&gt;
I just got back from the &lt;a href="http://sessions.visitmix.com/" target="_blank" title="Mix08 Sessions"&gt;Mix08&lt;/a&gt; conference in Vegas. It was fantastic! &lt;a href="http://weblogs.asp.net/scottgu/" title="Scott Guthrie's Blog"&gt;Scott Guthrie&lt;/a&gt; and Ray Ozzie showed off some new web tools during the opening keynote and it&amp;#39;s clear that Microsoft is jumping into the web with both feet. Ray Ozzie pretty much said that Microsoft will be coming out with a new cloud based services model that will include most (if not all) Microsoft applications. Hosted data services are also coming and I&amp;#39;m interested to see how they differ from SQL relational databases. Ray didn&amp;#39;t say anything about Microsoft hosting services but if I was in the hosting business I might be a little worried about what will happen down the road.
&lt;/p&gt;
&lt;p&gt;
Silverlight, Silverlight, Silverlight was the battle cry from just about every Microsoftie I met. They are pushing this hard as THE platform for rich internet applications (RIA) in the coming years. NBC will be launching a silverlight based web site for Olympic coverage and if it does everything they showed in the demo the internet is going to grind to a halt with that much video running at once. Clearly, Microsoft wants Silverlight to take down Flash as the defactor way to add video and animation to web sites. Given Microsoft&amp;#39;s ability to build great developer tools to support their platforms they just might do it.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.hanselman.com/blog/" title="Hanselman's ComputerZen.com"&gt;Scott Hanselman&lt;/a&gt; gave a great presentation on &lt;a href="http://www.hanselman.com/blog/ASPNETMVCSessionAtMix08TDDAndMvcMockHelpers.aspx" title="ASP.NET MVC Session"&gt;ASP.NET MVC&lt;/a&gt; or Model View Controller. He started off by opening Notepad on a 40 foot projection screen and just typing random funny comments about the crowd. The room was silent in less than a minute and I thought it was a genious way to start things off rather than screaming for everyone to sit down.
&lt;/p&gt;
&lt;p&gt;
MVC is an alternate way to build ASP.NET web pages instead of using WebForms. With WebForms you have a .aspx page and a code behind file. The code behind file pulls information from your business objects and binds it to controls on the .aspx part of the form. Everything is in one giant &amp;lt;form&amp;gt; tag and viewstate is used to emulate winforms-like interactions. With MVC you have views which are html pages or template language pages that accept some data and are responsible for rendering out angle brackets. A controller is a class that does not have a corresponding display page and is responsible for pulling data from business objects and packaging it into a bundle of data for a view to render. This is very similar to Ruby on Rails and will give ASP.NET programmers an alternative to WebForms. Scott was very clear to point out the MVC is not replacing WebForms and that the two can co-exist in the same web site if you want.
&lt;/p&gt;
&lt;p&gt;
Wednesday night Microsoft sponsored a party at &lt;a href="http://www.venetian.com/TAONIGHTCLUB.aspx" title="TAO Vegas"&gt;TAO&lt;/a&gt;, a night club in the Venetian where the conference was held. They brought in Steve Wiebe who attempted to regain his title as Donkey Kong champion of the world. Steve wasn&amp;#39;t able to beat the high score but he did reach level 22, known as the kill screen, where Mario dies because the programmers were out of memory. The kill screen has only been reached 5 times during competition. If you&amp;#39;re in Vegas you have to try the Kobe beef sliders at TAO which are incredible!
&lt;/p&gt;
&lt;p&gt;
This was the first MIX conference that I&amp;#39;ve been to and it was different from other Microsoft events. There were so many opportunities to meet both Microsoft team members and other developers that I&amp;#39;d really recommend it to anyone building web applications on the Microsoft platform. Next year&amp;#39;s Mix09 conference will be at the Ventian in Vegas March 18-20, 2009.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/BvBlog/~4/249620621" height="1" width="1"/&gt;</description>
      <link>http://feeds.feedburner.com/~r/BvBlog/~3/249620621/post.aspx</link>
      <author>mmcconnell1618</author>
      <comments>http://blog.bvsoftware.com/post/2008/03/Silverlight,-MVC,-and-more-at-Mix08-in-Las-Vegas.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.bvsoftware.com/post.aspx?id=bc7fd039-f12c-4c42-849d-e6cb88964c0e</guid>
      <pubDate>Tue, 11 Mar 2008 13:33:00 -0400</pubDate>
      <category>General</category>
      <dc:publisher>mmcconnell1618</dc:publisher>
      <dc:description>Mix08 Report from Las Vegas</dc:description>
      <pingback:server>http://blog.bvsoftware.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.bvsoftware.com/post.aspx?id=bc7fd039-f12c-4c42-849d-e6cb88964c0e</pingback:target>
      <slash:comments>4</slash:comments>
      <trackback:ping>http://blog.bvsoftware.com/trackback.axd?id=bc7fd039-f12c-4c42-849d-e6cb88964c0e</trackback:ping>
      <wfw:comment>http://blog.bvsoftware.com/post/2008/03/Silverlight,-MVC,-and-more-at-Mix08-in-Las-Vegas.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.bvsoftware.com/syndication.axd?post=bc7fd039-f12c-4c42-849d-e6cb88964c0e</wfw:commentRss>
    <feedburner:origLink>http://blog.bvsoftware.com/post.aspx?id=bc7fd039-f12c-4c42-849d-e6cb88964c0e</feedburner:origLink></item>
    <item>
      <title>Meta Keyword Tag is Dead</title>
      <description>&lt;p&gt;
I&amp;#39;m probably very late to this party but apparently the Meta Keyword tag is all but useless to modern search engines. I had a chance to meet &lt;a href="http://nathanbuggia.com" target="_blank" title="Nathan Buggia - Microsoft Search"&gt;Nathan Buggia&lt;/a&gt; from Microsoft&amp;#39;s Search team yesterday and he was gracious enough to answer a lot of questions for me.
&lt;/p&gt;
&lt;p&gt;
Nathan explained that all major search engines pretty much ignore the keywords tag and instead generate their own keywords directly from your page content. The meta keyword tag is a really great way to let your competitors know which words you think are important but aren&amp;#39;t going to impact search rankings.
&lt;/p&gt;
&lt;p&gt;
I also asked him some common questions that our customers ask us about. It&amp;#39;s great to talk to the people that actually know the answers instead of guessing which SEO guru is right.
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;Does it matter that the extensions are &amp;quot;.aspx&amp;quot; instead of &amp;quot;.html&amp;quot;&lt;/em&gt;&lt;br /&gt;
The short answer is &amp;quot;no.&amp;quot;&amp;nbsp; The only expection is that Microsoft Search will actually read some .aspx pages more intelligently than non .aspx pages so there could be a slightly benefit to using ASP.NET in general.
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;Is it okay to use non-latin characters in domain names? I&amp;#39;ve heard they can flag your site as a phishing page.&lt;br /&gt;
&lt;/em&gt;Nathan says that it is 100% fine to use non-latin characters in URLs as long as your page content also contains non-latin characters. A 100% us page with all latin characters that uses non-latin characters in the URL could raise some alerts on filters.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Any other buring search engine questions? Email me and I&amp;#39;ll try and get Nathan to answer them if I catch up with him again.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/BvBlog/~4/246800227" height="1" width="1"/&gt;</description>
      <link>http://feeds.feedburner.com/~r/BvBlog/~3/246800227/post.aspx</link>
      <author>mmcconnell1618</author>
      <comments>http://blog.bvsoftware.com/post/2008/03/Meta-Keyword-Tag-is-Dead.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.bvsoftware.com/post.aspx?id=5369c127-b3b9-416f-8264-4f3dfbf203fc</guid>
      <pubDate>Thu, 06 Mar 2008 10:44:00 -0400</pubDate>
      <category>SEO/SEM</category>
      <dc:publisher>mmcconnell1618</dc:publisher>
      <dc:description>Meta keywords tag is dead and officially useless</dc:description>
      <pingback:server>http://blog.bvsoftware.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.bvsoftware.com/post.aspx?id=5369c127-b3b9-416f-8264-4f3dfbf203fc</pingback:target>
      <slash:comments>2</slash:comments>
      <trackback:ping>http://blog.bvsoftware.com/trackback.axd?id=5369c127-b3b9-416f-8264-4f3dfbf203fc</trackback:ping>
      <wfw:comment>http://blog.bvsoftware.com/post/2008/03/Meta-Keyword-Tag-is-Dead.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.bvsoftware.com/syndication.axd?post=5369c127-b3b9-416f-8264-4f3dfbf203fc</wfw:commentRss>
    <feedburner:origLink>http://blog.bvsoftware.com/post.aspx?id=5369c127-b3b9-416f-8264-4f3dfbf203fc</feedburner:origLink></item>
    <item>
      <title>Technorati Profile link</title>
      <description>&lt;a rel="me" href="http://technorati.com/claim/nezdr4vhiw"&gt;Technorati Profile&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/BvBlog/~4/243069847" height="1" width="1"/&gt;</description>
      <link>http://feeds.feedburner.com/~r/BvBlog/~3/243069847/post.aspx</link>
      <author>mmcconnell1618</author>
      <comments>http://blog.bvsoftware.com/post/2008/02/Technorati-Profile-link.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.bvsoftware.com/post.aspx?id=356a8ec0-61ac-4e94-8b78-6fa016cb14ff</guid>
      <pubDate>Thu, 28 Feb 2008 21:49:00 -0400</pubDate>
      <dc:publisher>mmcconnell1618</dc:publisher>
      <pingback:server>http://blog.bvsoftware.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.bvsoftware.com/post.aspx?id=356a8ec0-61ac-4e94-8b78-6fa016cb14ff</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://blog.bvsoftware.com/trackback.axd?id=356a8ec0-61ac-4e94-8b78-6fa016cb14ff</trackback:ping>
      <wfw:comment>http://blog.bvsoftware.com/post/2008/02/Technorati-Profile-link.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.bvsoftware.com/syndication.axd?post=356a8ec0-61ac-4e94-8b78-6fa016cb14ff</wfw:commentRss>
    <feedburner:origLink>http://blog.bvsoftware.com/post.aspx?id=356a8ec0-61ac-4e94-8b78-6fa016cb14ff</feedburner:origLink></item>
    <item>
      <title>Rock beats Scissors, Trashcan Beats Orb</title>
      <description>&lt;p&gt;
I use both Windows and Mac OSX at &lt;a href="http://www.bvsoftware.com" target="_blank" title="Shopping Cart Software for ASP.NET"&gt;BV Software&lt;/a&gt;. I really like somethings about each operating system and since we make web based apps we need to test them on both platforms. Tonight my 2 1/2 year old son showed me why a trashcan beats an orb.
&lt;/p&gt;
&lt;p&gt;
I had my laptop booted into Vista and Gideon was &amp;quot;helping me&amp;quot; finish up some email messages. Click here, click there, window opens, etc. Not a peep out of him.&amp;nbsp; When I was finished I rebooted into OSX because I remembered that he liked &lt;a href="http://en.wikipedia.org/wiki/Photo_Booth" target="_blank" title="Wikipedia Photobooth Article"&gt;Photobooth&lt;/a&gt; and making silly pictures.
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://blog.bvsoftware.com/image.axd?picture=Dock.jpg" alt="" /&gt;
&lt;/p&gt;
&lt;p&gt;
OSX was on screen and in less than 2 seconds Gideon promptly pointed out &amp;quot;Ooo, Trashcan, Oooo Book.&amp;quot; That is great UI design. My 2 year old instantly recognized a trash can and that the Address Book program looked like a book. He can&amp;#39;t read but he understood perfectly.&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
He never said one peep about the Windows &amp;quot;orb&amp;quot; that represent the Vista start menu.&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/BvBlog/~4/243054039" height="1" width="1"/&gt;</description>
      <link>http://feeds.feedburner.com/~r/BvBlog/~3/243054039/post.aspx</link>
      <author>mmcconnell1618</author>
      <comments>http://blog.bvsoftware.com/post/2008/02/Rock-beats-Scissors,-Trashcan-Beats-an-Orb.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.bvsoftware.com/post.aspx?id=25e10609-ed55-4b8d-a3a2-1180671be14f</guid>
      <pubDate>Thu, 28 Feb 2008 21:14:00 -0400</pubDate>
      <category>General</category>
      <category>UI</category>
      <dc:publisher>mmcconnell1618</dc:publisher>
      <pingback:server>http://blog.bvsoftware.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.bvsoftware.com/post.aspx?id=25e10609-ed55-4b8d-a3a2-1180671be14f</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://blog.bvsoftware.com/trackback.axd?id=25e10609-ed55-4b8d-a3a2-1180671be14f</trackback:ping>
      <wfw:comment>http://blog.bvsoftware.com/post/2008/02/Rock-beats-Scissors,-Trashcan-Beats-an-Orb.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.bvsoftware.com/syndication.axd?post=25e10609-ed55-4b8d-a3a2-1180671be14f</wfw:commentRss>
    <feedburner:origLink>http://blog.bvsoftware.com/post.aspx?id=25e10609-ed55-4b8d-a3a2-1180671be14f</feedburner:origLink></item>
    <item>
      <title>How to create a Dynamic LINQ Query Programmatically</title>
      <description>&lt;p&gt;
If you&amp;#39;ve been stuggling to create a dynamic LINQ query you&amp;#39;re not alone. Thanks to some research, hard work and a smart co-worker I was able to implement some cool dynamic LINQ code in our help desk application.&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
In our helpdesk we have filter screens that look like this:&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://blog.bvsoftware.com/image.axd?picture=TicketFilter.png" alt="" /&gt;&lt;br /&gt;
&lt;br /&gt;
Creating a LINQ query in challenging because we don&amp;#39;t know ahead of time which fields the user will complete. They are all optional and without anything selected we want to pull back all tickets. Normally, you&amp;#39;d write a query like this:
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;div style="background: black none repeat scroll 0% 50%; font-family: Consolas; font-size: 14pt; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #ff8000"&gt;var&lt;/span&gt; ticket = (&lt;span style="color: #ff8000"&gt;from&lt;/span&gt; t &lt;span style="color: #ff8000"&gt;in&lt;/span&gt; db.cerberus_Tickets
&lt;/p&gt;
&lt;p style="margin: 0px"&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;span style="color: #ff8000"&gt;where&lt;/span&gt; t.id == id
&lt;/p&gt;
&lt;p style="margin: 0px"&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;span style="color: #ff8000"&gt;select&lt;/span&gt; t).Single();
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
In the example above we know that the t.id parameter will always be given. So how do you create a query in code when you don&amp;#39;t know what fields to include in the WHERE clause ahead of time?
&lt;/p&gt;
&lt;p&gt;
The first key is understanding the LINQ queries are not executed until they are used to enumerate through a collection. This part is key because it means we can create a query and change it in code as long as we don&amp;#39;t try to look at the results first.
&lt;/p&gt;
&lt;p&gt;
What we&amp;#39;re going to do is create an IQueryable collection that contains all of our Ticket objects and we&amp;#39;ll dynamically add our WHERE clause information.&amp;nbsp; Then we&amp;#39;ll create a normal LINQ query that selects all of the matches from our IQueryable collection and handles paging. Because we don&amp;#39;t actually enumerate the IQueryable collection that contains all our tickets, it won&amp;#39;t actually pull back all of the tickets (which would take forever!). Instead, it will be &amp;quot;merged&amp;quot; with our normally LINQ query at run time when we enumerate over it.
&lt;/p&gt;
&lt;p&gt;
1) Create our LINQ to SQL context objects
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;div style="background: black none repeat scroll 0% 50%; font-family: Consolas; font-size: 14pt; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: yellow"&gt;&amp;nbsp;List&lt;/span&gt;&amp;lt;&lt;span style="color: yellow"&gt;cerberus_Ticket&lt;/span&gt;&amp;gt; result = &lt;span style="color: #ff8000"&gt;new&lt;/span&gt; &lt;span style="color: yellow"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: yellow"&gt;cerberus_Ticket&lt;/span&gt;&amp;gt;();
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&lt;span style="color: yellow"&gt;cerberusDataContext&lt;/span&gt; db = &lt;span style="color: #ff8000"&gt;new&lt;/span&gt; &lt;span style="color: yellow"&gt;cerberusDataContext&lt;/span&gt;(connectionString);
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
2) Create an empty IQueryable collection containing all tickets. Note that this query doesn&amp;#39;t actually select everything from the database yet. If it did this would take forever and effectively be filtering the database table in memory. That would not be a good design! 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;div style="background: black none repeat scroll 0% 50%; font-family: Consolas; font-size: 14pt; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #2b91af"&gt;&amp;nbsp;IQueryable&lt;/span&gt;&amp;lt;&lt;span style="color: yellow"&gt;cerberus_Ticket&lt;/span&gt;&amp;gt; matches = db.cerberus_Tickets;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
3) Add our WHERE clause information with custom logic to decide if the clauses should be added or not
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;div style="background: black none repeat scroll 0% 50%; font-family: Consolas; font-size: 14pt; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #ff8000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #ff8000"&gt;&amp;nbsp;if&lt;/span&gt; (&lt;span style="color: #ff8000"&gt;this&lt;/span&gt;.AgentIdField.Text.Trim().Length &amp;gt; 0)
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;{
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; matches = matches.Where(a =&amp;gt; a.AgentId == criteria.AgentId);
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;}
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&lt;span style="color: #ff8000"&gt;if&lt;/span&gt; (&lt;span style="color: #ff8000"&gt;this&lt;/span&gt;.TicketIdField.Text.Trim().Length &amp;gt; 0)
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;{
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; matches = matches.Where(a =&amp;gt; a.TicketId.Contains(criteria.TicketId));
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;}
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
&amp;nbsp;4) Create a second LINQ query that selects from the first one to sort and page the results.
&lt;/p&gt;
&lt;div style="background: black none repeat scroll 0% 50%; font-family: Consolas; font-size: 14pt; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&lt;span style="color: lime"&gt;// calculate start row based on page parameters passed in&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&lt;span style="color: #ff8000"&gt;int&lt;/span&gt; startRow = (pageNumber - 1) * pageSize;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&lt;span style="color: #ff8000"&gt;var&lt;/span&gt; output = (&lt;span style="color: #ff8000"&gt;from&lt;/span&gt; p &lt;span style="color: #ff8000"&gt;in&lt;/span&gt; matches
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;span style="color: #ff8000"&gt;orderby&lt;/span&gt; p.DateCreated &lt;span style="color: #ff8000"&gt;descending&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;span style="color: #ff8000"&gt;select&lt;/span&gt; p).Skip(startRow).Take(pageSize).ToList();
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Again, I can&amp;#39;t emphasize enough how cool it is that LINQ doesn&amp;#39;t query the database until we call the ToList() at the end of the second statement. This delay in execution is the magic that lets us create dynamic queries on the fly.
&lt;/p&gt;
&lt;p&gt;
Have any cool LINQ tips of your own to share?
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/BvBlog/~4/242461233" height="1" width="1"/&gt;</description>
      <link>http://feeds.feedburner.com/~r/BvBlog/~3/242461233/post.aspx</link>
      <author>mmcconnell1618</author>
      <comments>http://blog.bvsoftware.com/post/2008/02/How-to-create-a-Dynamic-LINQ-Query-Programmatically.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.bvsoftware.com/post.aspx?id=01e56f0d-90b4-46e3-a1ac-2057ea6daf2d</guid>
      <pubDate>Wed, 27 Feb 2008 21:14:00 -0400</pubDate>
      <category>Visual Studio</category>
      <category>Code</category>
      <category>LINQ</category>
      <dc:publisher>mmcconnell1618</dc:publisher>
      <pingback:server>http://blog.bvsoftware.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.bvsoftware.com/post.aspx?id=01e56f0d-90b4-46e3-a1ac-2057ea6daf2d</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://blog.bvsoftware.com/trackback.axd?id=01e56f0d-90b4-46e3-a1ac-2057ea6daf2d</trackback:ping>
      <wfw:comment>http://blog.bvsoftware.com/post/2008/02/How-to-create-a-Dynamic-LINQ-Query-Programmatically.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.bvsoftware.com/syndication.axd?post=01e56f0d-90b4-46e3-a1ac-2057ea6daf2d</wfw:commentRss>
    <feedburner:origLink>http://blog.bvsoftware.com/post.aspx?id=01e56f0d-90b4-46e3-a1ac-2057ea6daf2d</feedburner:origLink></item>
    <item>
      <title>Quick program to batch rename files to replace text</title>
      <description>&lt;p&gt;
Today I had a huge directory of 300+ images that I batch converted in Photoshop from TIFF to PNG format. The problem was I must have missed something in Photoshop and all the files came out like this:
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;Image1.TIFF.PNG &lt;br /&gt;
&lt;br /&gt;
I needed to remove the &amp;quot;.TIFF&amp;quot; part from the name so I wrote a quick c# command line program to look at a directory, find all files that contained text in their name and replace that with something else. It&amp;#39;s a quick and dirty solution but I thought someone else might need it. The source directory, text to find and text to replace are just string in the source code. You may want to move them out to command line parameters if you need this kind of program often.
&lt;/p&gt;
&lt;p&gt;
Here&amp;#39;s the source code:
&lt;/p&gt;
&lt;p&gt;
&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red255\green128\blue0;\red0\green0\blue0;\red255\green255\blue255;\red255\green255\blue0;\red0\green255\blue0;\red163\green21\blue21;}??\fs28 \cf1\cb2\highlight2 using\cf3  System;\par ??\cf1 using\cf3  System.Collections.Generic;\par ??\cf1 using\cf3  System.Linq;\par ??\cf1 using\cf3  System.Text;\par ??\cf1 using\cf3  System.IO;\par ??\par ??\cf1 namespace\cf3  FileNameChanger\par ??\{\par ??    \cf1 class\cf3  \cf4 Program\par ??\cf3     \{\par ??        \cf1 static\cf3  \cf1 void\cf3  Main(\cf1 string\cf3 [] args)\par ??        \{\par ??            \cf5 /*\par ??             * Change these three settings to tell the program\par ??             * where to search, what to find and what to replace\par ??             * it with\par ??             */\par ??\cf3             \cf1 string\cf3  sourceDir = \cf6 @"C:\\Users\\mmcconnell\\Desktop\\CroppedTiff\\PNG"\cf3 ;\par ??            \cf1 string\cf3  stringToFind = \cf5 ".tiff.png"\cf3 ;\par ??            \cf1 string\cf3  stringToReplace = \cf5 ".png"\cf3 ;\par ??\par ??            \cf1 if\cf3  (\cf4 Directory\cf3 .Exists(sourceDir))\par ??            \{\par ??                \cf1 string\cf3 [] thefiles = \cf4 Directory\cf3 .GetFiles(sourceDir);\par ??                \cf1 if\cf3  (thefiles != \cf1 null\cf3 )\par ??                \{\par ??                    \cf1 foreach\cf3  (\cf1 string\cf3  f \cf1 in\cf3  thefiles)\par ??                    \{\par ??                        \cf1 string\cf3  pathPart = \cf4 Path\cf3 .GetDirectoryName(f);\par ??                        \cf1 string\cf3  filePart = \cf4 Path\cf3 .GetFileName(f);\par ??                        filePart = filePart.Replace(stringToFind, stringToReplace);\par ??                        \cf4 File\cf3 .Move(f, \cf4 Path\cf3 .Combine(pathPart, filePart));\par ??\par ??                        \cf4 Console\cf3 .WriteLine(\cf5 "Moving to "\cf3  + filePart);\par ??                    \}\par ??                \}\par ??            \}\par ??        \}\par ??    \}\par ??\}\par ??}
--&gt;
&lt;/p&gt;
&lt;div style="background: black none repeat scroll 0% 50%; font-family: Consolas; font-size: 14pt; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #ff8000"&gt;using&lt;/span&gt; System;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #ff8000"&gt;using&lt;/span&gt; System.Collections.Generic;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #ff8000"&gt;using&lt;/span&gt; System.Linq;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #ff8000"&gt;using&lt;/span&gt; System.Text;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #ff8000"&gt;using&lt;/span&gt; System.IO;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #ff8000"&gt;namespace&lt;/span&gt; FileNameChanger
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
{
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #ff8000"&gt;class&lt;/span&gt; &lt;span style="color: yellow"&gt;Program&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #ff8000"&gt;static&lt;/span&gt; &lt;span style="color: #ff8000"&gt;void&lt;/span&gt; Main(&lt;span style="color: #ff8000"&gt;string&lt;/span&gt;[] args)
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: lime"&gt;/*&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: lime"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;  * Change these three settings to tell the program&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: lime"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;  * where to search, what to find and what to replace&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: lime"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;  * it with&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: lime"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;  */&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #ff8000"&gt;string&lt;/span&gt; sourceDir = &lt;span style="color: #a31515"&gt;@&amp;quot;C:\Users\mmcconnell\Desktop\CroppedTiff\PNG&amp;quot;&lt;/span&gt;;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #ff8000"&gt;string&lt;/span&gt; stringToFind = &lt;span style="color: lime"&gt;&amp;quot;.tiff.png&amp;quot;&lt;/span&gt;;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #ff8000"&gt;string&lt;/span&gt; stringToReplace = &lt;span style="color: lime"&gt;&amp;quot;.png&amp;quot;&lt;/span&gt;;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #ff8000"&gt;if&lt;/span&gt; (&lt;span style="color: yellow"&gt;Directory&lt;/span&gt;.Exists(sourceDir))
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #ff8000"&gt;string&lt;/span&gt;[] thefiles = &lt;span style="color: yellow"&gt;Directory&lt;/span&gt;.GetFiles(sourceDir);
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #ff8000"&gt;if&lt;/span&gt; (thefiles != &lt;span style="color: #ff8000"&gt;null&lt;/span&gt;)
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="margin: 0px"&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 style="color: #ff8000"&gt;foreach&lt;/span&gt; (&lt;span style="color: #ff8000"&gt;string&lt;/span&gt; f &lt;span style="color: #ff8000"&gt;in&lt;/span&gt; thefiles)
&lt;/p&gt;
&lt;p style="margin: 0px"&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;
&lt;p style="margin: 0px"&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; &lt;span style="color: #ff8000"&gt;string&lt;/span&gt; pathPart = &lt;span style="color: yellow"&gt;Path&lt;/span&gt;.GetDirectoryName(f);
&lt;/p&gt;
&lt;p style="margin: 0px"&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; &lt;span style="color: #ff8000"&gt;string&lt;/span&gt; filePart = &lt;span style="color: yellow"&gt;Path&lt;/span&gt;.GetFileName(f);
&lt;/p&gt;
&lt;p style="margin: 0px"&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; filePart = filePart.Replace(stringToFind, stringToReplace);
&lt;/p&gt;
&lt;p style="margin: 0px"&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; &lt;span style="color: yellow"&gt;File&lt;/span&gt;.Move(f, &lt;span style="color: yellow"&gt;Path&lt;/span&gt;.Combine(pathPart, filePart));
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px"&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; &lt;span style="color: yellow"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: lime"&gt;&amp;quot;Moving to &amp;quot;&lt;/span&gt; + filePart);
&lt;/p&gt;
&lt;p style="margin: 0px"&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;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
}
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;a rel="enclosure" href="http://blog.bvsoftware.com/file.axd?file=Program.cs"&gt;Program.cs (1.26 kb)&lt;/a&gt;
&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/BvBlog/~4/240069684" height="1" width="1"/&gt;</description>
      <link>http://feeds.feedburner.com/~r/BvBlog/~3/240069684/post.aspx</link>
      <author>mmcconnell1618</author>
      <comments>http://blog.bvsoftware.com/post/2008/02/Quick-program-to-batch-rename-files-to-replace-text.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.bvsoftware.com/post.aspx?id=944f1494-339c-45d9-af54-2f9948a812fd</guid>
      <pubDate>Sat, 23 Feb 2008 14:42:00 -0400</pubDate>
      <category>Open Source Projects</category>
      <category>Visual Studio</category>
      <category>Code</category>
      <dc:publisher>mmcconnell1618</dc:publisher>
      <pingback:server>http://blog.bvsoftware.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.bvsoftware.com/post.aspx?id=944f1494-339c-45d9-af54-2f9948a812fd</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://blog.bvsoftware.com/trackback.axd?id=944f1494-339c-45d9-af54-2f9948a812fd</trackback:ping>
      <wfw:comment>http://blog.bvsoftware.com/post/2008/02/Quick-program-to-batch-rename-files-to-replace-text.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.bvsoftware.com/syndication.axd?post=944f1494-339c-45d9-af54-2f9948a812fd</wfw:commentRss>
    <feedburner:origLink>http://blog.bvsoftware.com/post.aspx?id=944f1494-339c-45d9-af54-2f9948a812fd</feedburner:origLink></item>
    <item>
      <title>How NOT to handle a long term consulting contract.</title>
      <description>&lt;p&gt;&lt;img src="http://blog.bvsoftware.com/image.axd?picture=DeadbeatClient.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;Last summer BV Software took on a large custom programming job for a social networking site targeting baby boomers. It was a great opportunity to expand our consulting services with a 6 month long project. Long term contracts are a great way to keep programmers busy and expand our team. The project didn&amp;#39;t turn out as planned...&lt;/p&gt;&lt;p&gt;I&amp;#39;ve been in the software business long enough to know that you can promise hours or you can promise functionality when creating custom programs. If you promise functionality without limit on hours you have to be absolutely sure that you can deliver the project in less time than the cost of your resources will eat up. This turns out to be a difficult problem. Steve McConnell (no relation to me) has a great book on Software estimation and the challenges involved. Most clients are not willing to pay up front for the hours required to fully document and understand a problem before any coding begins. If you don&amp;#39;t fully understand the problem you&amp;#39;re trying to solve it is impossible to put a fixed cost number on it. &lt;/p&gt;&lt;p&gt;So that leaves contracts that sell hours of time. This particular long term contract promised 400 hours of time over a six month period. We estimated how long several tasks would take and gave the client an idea of what we thought those hours would cover.&amp;nbsp;&lt;/p&gt;&lt;p&gt;This client was fairly high profile and we worked like dogs to help them meet their launch deadlines. However, like most projects, the requirements were constantly changing. We got request to change tax and shipping algorithms for or five times. We got requests to manually go into the database and change the pricing of one or two Harry Potter books! We were sent several conflicting designs and layouts that all had to be integrated &amp;quot;today or else!&amp;quot; There were last minute additions of flash product carousels and finally, the biggest change request of all: &amp;quot;Our site needs to be as fast as Amazon.com with all the same features and 5 million products. You have four weeks.&amp;quot; The client expected to accomlish all of this for less than $50,000 working nights and weekends on an unrealistic deadline.&lt;/p&gt;&lt;p&gt;Needless to say we burned through the 400 hours pretty quickly. That&amp;#39;s were the real problem began. &lt;/p&gt;&lt;p&gt;The client had known all along the hours were ticking away. We sent detailed status updates and let them know that we needed to extend the agreement or we had to stop working. We delivered the site, working as originally expected on time in the 400 hours budgeted. The client had paid their bills while we were working but as soon as the code was delivered all payments stopped.&lt;/p&gt;&lt;p&gt;I had made a huge mistake because I allowed our team to work through the 400 hours in about 2 months time. The client had paid for two months but still owed for the remaining 4. With the code in their hands and no more hours to use they simply felt entitled to stop paying us.&lt;/p&gt;&lt;p&gt;Fortunately, I was experienced enough to insist on a contract of hours over features. That means the client is in breach of contract no matter what was delivered if they don&amp;#39;t pay. We&amp;#39;ll see how everything turns out now that it&amp;#39;s going to litigation. I fully expect to collect what&amp;#39;s due including court costs and punitive damages but it&amp;#39;s not a process I wanted to deal with.&amp;nbsp;&lt;/p&gt;&lt;p&gt;Even with all the frustration there is something valuable to gain. It was a mistake to offer so much credit to a client. It was a mistake to work an unrealistic schedule just to please a client. It was a mistake to deliver source code with so much of a contract not paid off. I know that the knowledge from this experience will help with our future consulting jobs just like selling hours instead of features helped with this one.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/BvBlog/~4/240021694" height="1" width="1"/&gt;</description>
      <link>http://feeds.feedburner.com/~r/BvBlog/~3/240021694/post.aspx</link>
      <author>mmcconnell1618</author>
      <comments>http://blog.bvsoftware.com/post/2008/02/How-NOT-to-handle-a-long-term-consulting-contract.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.bvsoftware.com/post.aspx?id=50719231-dbed-4b78-82fb-15125fd2467b</guid>
      <pubDate>Fri, 22 Feb 2008 21:21:00 -0400</pubDate>
      <category>Contracting</category>
      <category>Business</category>
      <category>Legal</category>
      <category>Deadbeat Clients</category>
      <dc:publisher>mmcconnell1618</dc:publisher>
      <pingback:server>http://blog.bvsoftware.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.bvsoftware.com/post.aspx?id=50719231-dbed-4b78-82fb-15125fd2467b</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://blog.bvsoftware.com/trackback.axd?id=50719231-dbed-4b78-82fb-15125fd2467b</trackback:ping>
      <wfw:comment>http://blog.bvsoftware.com/post/2008/02/How-NOT-to-handle-a-long-term-consulting-contract.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.bvsoftware.com/syndication.axd?post=50719231-dbed-4b78-82fb-15125fd2467b</wfw:commentRss>
    <feedburner:origLink>http://blog.bvsoftware.com/post.aspx?id=50719231-dbed-4b78-82fb-15125fd2467b</feedburner:origLink></item>
    <item>
      <title>6 Years since the release of BV Commerce 1.0</title>
      <description>&lt;p&gt;
It&amp;#39;s been almost exactly 6 years since the very first release of BV Commerce. It was the very first commercial ecommerce software for the .NET platform and we&amp;#39;re still going strong. I started writing the first version back in September of 2001 and it was released in February as soon as the .Net Framework 1.0 was official released.
&lt;/p&gt;
&lt;p&gt;
I&amp;#39;m often asked &amp;quot;What does &amp;#39;BV&amp;#39; stand for?&amp;quot; The truth is it could stand for a lot of things but &amp;quot;Best Value&amp;quot; is the answer I usually give. I went through tons of names but it seems like every domain name in the world related to commerce was taken back in 2001. Would you believe that even &amp;quot;jerboa&amp;quot; was taken? So &amp;quot;&lt;a href="http://www.bvsoftware.com" target="_blank" title="BVSoftware.com"&gt;BVSoftware.com&lt;/a&gt;&amp;quot; was available and &amp;quot;Best Value&amp;quot; sounded good enough. If I called it &amp;quot;comrc&amp;quot; or some other misspelling I&amp;#39;d probably have $5M in VC money right now :-)
&lt;/p&gt;
&lt;p&gt;
The BV Software logo has changed a lot since the first days too:&amp;nbsp;&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://blog.bvsoftware.com/image.axd?picture=BVSLogo.gif" alt="" /&gt;&lt;br /&gt;
&lt;em&gt;
The very first BV logo. I thought purple was a good choice!&lt;/em&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;img src="http://blog.bvsoftware.com/image.axd?picture=Methane.gif" alt="" /&gt;&lt;br /&gt;
&lt;em&gt;
The image of a methane molecule that served as a template for the next BV Logo&lt;/em&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;
&lt;img src="http://blog.bvsoftware.com/image.axd?picture=logo.jpg" alt="" /&gt;&lt;br /&gt;
&lt;em&gt;
The very first &amp;quot;molecule&amp;quot; version of the BV logo.&lt;/em&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://blog.bvsoftware.com/image.axd?picture=BV-Software-3-Logo-175x50.gif" alt="" /&gt;&lt;br /&gt;
&lt;em&gt;The third BV logo with a 3D glossy molecule and more red!&lt;br /&gt;
&lt;/em&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;img src="http://blog.bvsoftware.com/image.axd?picture=BVlogo.gif" alt="" /&gt;&lt;br /&gt;
&lt;em&gt;A green version that never made it but did introduce the ITC Kabel font.&lt;br /&gt;
&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://blog.bvsoftware.com/image.axd?picture=BV_for_ConstantContact.gif" alt="" /&gt;&lt;br /&gt;
&lt;em&gt;Current BV Software Logo&lt;/em&gt;&lt;br /&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://blog.bvsoftware.com/image.axd?picture=Experiment-Web.gif" alt="" /&gt;&lt;br /&gt;
&lt;em&gt;New design idea for dropping molecule symbol&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
I sold exactly 16 copies of BV Commerce 1.0. It didn&amp;#39;t support choices or options and was all table based design. BV Commerce 2.0 followed less than 6 months later with a host of improvements and things have been growing non-stop since.
&lt;/p&gt;
&lt;p&gt;
P.S. If you see Randy from &lt;a href="http://www.globalweb.net" target="_blank" title="GlobalWeb.net"&gt;GlobalWeb.net &lt;/a&gt;on the forums he was the very first BV Commerce customer and is still an active host/developer in our community!
&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/BvBlog/~4/240021696" height="1" width="1"/&gt;</description>
      <link>http://feeds.feedburner.com/~r/BvBlog/~3/240021696/post.aspx</link>
      <author>mmcconnell1618</author>
      <comments>http://blog.bvsoftware.com/post/2008/02/6-Years-since-the-release-of-BV-Commerce-10.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.bvsoftware.com/post.aspx?id=ba5214e9-fe80-4464-8e40-d75553db092d</guid>
      <pubDate>Wed, 20 Feb 2008 20:33:00 -0400</pubDate>
      <category>bv commerce</category>
      <category>Company History</category>
      <dc:publisher>mmcconnell1618</dc:publisher>
      <pingback:server>http://blog.bvsoftware.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.bvsoftware.com/post.aspx?id=ba5214e9-fe80-4464-8e40-d75553db092d</pingback:target>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://blog.bvsoftware.com/trackback.axd?id=ba5214e9-fe80-4464-8e40-d75553db092d</trackback:ping>
      <wfw:comment>http://blog.bvsoftware.com/post/2008/02/6-Years-since-the-release-of-BV-Commerce-10.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.bvsoftware.com/syndication.axd?post=ba5214e9-fe80-4464-8e40-d75553db092d</wfw:commentRss>
    <feedburner:origLink>http://blog.bvsoftware.com/post.aspx?id=ba5214e9-fe80-4464-8e40-d75553db092d</feedburner:origLink></item>
    <item>
      <title>BV Commerce and PCI Compliance / PABP Certification</title>
      <description>The major credit card companies are giving merchants until 2010 to ensure that all applications are PABP certified or PCI compliant. PABP certified is used for packaged software (like BV Commerce 5) and PCI is used for hosted services and hosting companies.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;There are 4 levels of merchants and the deadlines are different for each one.&lt;/strong&gt;&lt;br /&gt;Level 4 Merchants - Process 0 to 20,000 transactions per year&lt;br /&gt;Level 3 Merchants - Process 20,000 to 1 Million transactions per year&lt;br /&gt;Level 2 and Level 1 Merchants - Process over 1 Million transaction per year&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Terms used&lt;/strong&gt;&lt;br /&gt;Known Vulnerable Applications - Software known to Visa to store unsafe data. (BV Commerce is NOT a known vulnerable appliction)&lt;br /&gt;Certified Applictions - Software that has passed a certification test&lt;br /&gt;New Accounts - New credit card processing accounts for merchants that do not currently process cards&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Schedule of Requirements&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Phase 1 - January 1, 2008&lt;/em&gt;&lt;br /&gt;New Account must not be using Known Vulnerable Applications. A new merchant can use BV Commerce as it is NOT a known vulnerable application. No effect on existing merchants.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Phase 2 - July 1, 2008&lt;/em&gt;&lt;br /&gt;Payment processing companies must only certify new software that is also a Certified Application. Current software and customers are not affected. Current merchants are able to use BV Commerce just as they do now.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Phase 3 - October 1, 2008&lt;/em&gt;&lt;br /&gt;New Accounts are required to EITHER use a PCI compliant hosting company OR use a PABP certified application. Existing merchants are not affected and can continue to use BV Commerce as normal. New Accounts must use a PCI compliant hosting company if BV Commerce is not certified by this date. We fully expect that BV Commerce will be certified long before this time.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Phase 4 - October 1, 2009&lt;/em&gt;&lt;br /&gt;Known Vulnerable applications will be de-certified for credit card processing. BV Commerce is not a Known Vulnerable application and will also be certified by this date. No impact to any BV Commerce merchant.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Phase 5 - July 1, 2010&lt;/em&gt;&lt;br /&gt;All merchants will be required to use Certified Application. BV Commerce will have been certified long before this time and there will be no risk/impact to merchants.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Summary - Impact to BV Commerce merchants&lt;/strong&gt;&lt;br /&gt;BV Commerce 5 is currently 90% compliant and we are working hard to implement the last few remaining features. The major hold back at this point is the requirement that we allow merchants to change encryption keys on the fly on a running store. This will require a service pack to BV Commerce 5 and we will complete certification before the end of this year.&lt;br /&gt;&lt;br /&gt;There will be no impact/risk at all to BV Commerce 5 merchants. Existing merchants will have until 2010 to move to a certified solution but BV Commerce 5 will have been certified long before that deadline.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;BV Commerce 2004 merchants will need to upgrade to BV Commerce 5 (or a later version) before July 1, 2010 in order to process credit cards with a certified application.&lt;img src="http://feeds.feedburner.com/~r/BvBlog/~4/240021697" height="1" width="1"/&gt;</description>
      <link>http://feeds.feedburner.com/~r/BvBlog/~3/240021697/post.aspx</link>
      <author>mmcconnell1618</author>
      <comments>http://blog.bvsoftware.com/post/2008/01/BV-Commerce-and-PCI-Compliance--PABP-Certification.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.bvsoftware.com/post.aspx?id=651f5946-52e2-4fa9-9835-51e045d41e8c</guid>
      <pubDate>Mon, 28 Jan 2008 20:34:00 -0400</pubDate>
      <category>bv commerce</category>
      <dc:publisher>mmcconnell1618</dc:publisher>
      <pingback:server>http://blog.bvsoftware.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.bvsoftware.com/post.aspx?id=651f5946-52e2-4fa9-9835-51e045d41e8c</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://blog.bvsoftware.com/trackback.axd?id=651f5946-52e2-4fa9-9835-51e045d41e8c</trackback:ping>
      <wfw:comment>http://blog.bvsoftware.com/post/2008/01/BV-Commerce-and-PCI-Compliance--PABP-Certification.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.bvsoftware.com/syndication.axd?post=651f5946-52e2-4fa9-9835-51e045d41e8c</wfw:commentRss>
    <feedburner:origLink>http://blog.bvsoftware.com/post.aspx?id=651f5946-52e2-4fa9-9835-51e045d41e8c</feedburner:origLink></item>
    <item>
      <title>BV Software to attend Mix 08 conference in Las Vegas</title>
      <description>&lt;p&gt;
Marcus and Justin from BV Software will be at the Microsoft Mix 08 conference in Las Vegas March 5-7, 2008. The Mix conference is an opportunity for technical and creative web developers to preview the latest technology from Microsoft and to discuss future directions for the web. Keynote speakers include Steve Balmer, Scott Guthrie (ASP.NET team leader) and Guy Kawasaki.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.visitmix.com" target="_blank"&gt;www.VisitMix.com&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
If you&amp;#39;re planning on attending drop us an email so we can meet up.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/BvBlog/~4/240021698" height="1" width="1"/&gt;</description>
      <link>http://feeds.feedburner.com/~r/BvBlog/~3/240021698/post.aspx</link>
      <author>mmcconnell1618</author>
      <comments>http://blog.bvsoftware.com/post/2008/01/BV-Software-to-attend-Mix-08-conference-in-Las-Vegas.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.bvsoftware.com/post.aspx?id=7d214401-5601-494f-9124-38442d41b3cc</guid>
      <pubDate>Fri, 11 Jan 2008 12:34:00 -0400</pubDate>
      <category>General</category>
      <dc:publisher>mmcconnell1618</dc:publisher>
      <pingback:server>http://blog.bvsoftware.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.bvsoftware.com/post.aspx?id=7d214401-5601-494f-9124-38442d41b3cc</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://blog.bvsoftware.com/trackback.axd?id=7d214401-5601-494f-9124-38442d41b3cc</trackback:ping>
      <wfw:comment>http://blog.bvsoftware.com/post/2008/01/BV-Software-to-attend-Mix-08-conference-in-Las-Vegas.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.bvsoftware.com/syndication.axd?post=7d214401-5601-494f-9124-38442d41b3cc</wfw:commentRss>
    <feedburner:origLink>http://blog.bvsoftware.com/post.aspx?id=7d214401-5601-494f-9124-38442d41b3cc</feedburner:origLink></item>
  </channel>
</rss>
