<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" 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:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>Josh Tenenbaum</title>
        <link>http://geekswithblogs.net/jlt56789/Default.aspx</link>
        <description>Errant ramblings</description>
        <language>en-US</language>
        <copyright>Josh Tenenbaum</copyright>
        <managingEditor>josh-blog@sunset-solutions.net</managingEditor>
        <generator>Subtext Version 0.0.0.0</generator>
        <image>
            <title>Josh Tenenbaum</title>
            <url>http://geekswithblogs.net/images/RSS2Image.gif</url>
            <link>http://geekswithblogs.net/jlt56789/Default.aspx</link>
            <width>77</width>
            <height>60</height>
        </image>
        <item>
            <title>Client Sorting on a GridView Part B</title>
            <link>http://geekswithblogs.net/jlt56789/archive/2011/01/19/143540.aspx</link>
            <description>&lt;p&gt;I forgot this:
&lt;/p&gt;&lt;p&gt;You can run this on $().ready(function() {
&lt;/p&gt;&lt;p&gt;    SetHeaderSortLinks('aGrid', 'Get()');
&lt;/p&gt;&lt;p&gt;});
&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;In the global js include.
&lt;/p&gt;&lt;p&gt;function SetHeaderSortLinks(parent, functionToCall) {
&lt;/p&gt;&lt;p&gt;    //Clear existing links
&lt;/p&gt;&lt;p&gt;    $("#" + parent + " th").unbind("onclick");
&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;    $("#" + parent + " th").bind("click", function () {
&lt;/p&gt;&lt;p&gt;        var sortOn = $(this)[0].sort;
&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;        if (currentSortField == sortOn)
&lt;/p&gt;&lt;p&gt;            currentSortAsc = !currentSortAsc;
&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;        currentSortField = sortOn;
&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;        eval(functionToCall);
&lt;/p&gt;&lt;p&gt;    });
&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;}
&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;I'll probably add some css to change the cursor on mouseover based on the attribute (probably add an additional class in the function above)…&lt;/p&gt; &lt;img src="http://geekswithblogs.net/jlt56789/aggbug/143540.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Josh Tenenbaum</dc:creator>
            <guid>http://geekswithblogs.net/jlt56789/archive/2011/01/19/143540.aspx</guid>
            <pubDate>Thu, 20 Jan 2011 01:42:46 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/jlt56789/comments/143540.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/jlt56789/archive/2011/01/19/143540.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/jlt56789/comments/commentRss/143540.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/jlt56789/services/trackbacks/143540.aspx</trackback:ping>
        </item>
        <item>
            <title>ASP.Net GridView, Client Binding, and Sorting</title>
            <link>http://geekswithblogs.net/jlt56789/archive/2011/01/19/143539.aspx</link>
            <description>&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;I read a blog post a few months back about client binding your Asp.Net GridView.  It was Called &lt;a href="http://weblogs.asp.net/ahmedmoosa/archive/2010/10/30/bind-gridview-using-jquery.aspx"&gt;Bind Gridview using Jquery&lt;/a&gt;.  I took it to heart and now I'm using it, except it doesn't handle client sorting (paging is another story).  Granted this has some room for improvement and my js isn't the best…
&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas; font-size:10pt"&gt;Base Page method with the grid view:
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas; font-size:10pt"&gt;            protected void SetHeaderAttribs(GridView grid)
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas; font-size:10pt"&gt;            {
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas; font-size:10pt"&gt;                  for (int i = 0; i &amp;lt; grid.Columns.Count; i++)
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas; font-size:10pt"&gt;                  {
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas; font-size:10pt"&gt;                        TableCell cell = grid.HeaderRow.Cells[i];
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas; font-size:10pt"&gt;                        DataControlField field = grid.Columns[i];
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas; font-size:10pt"&gt;                        if (!string.IsNullOrEmpty(field.SortExpression))
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas; font-size:10pt"&gt;                        {
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas; font-size:10pt"&gt;                              cell.Attributes.Add("sort", field.SortExpression);
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas; font-size:10pt"&gt;                        }
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas; font-size:10pt"&gt;                  }
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas; font-size:10pt"&gt;            }
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas; font-size:10pt"&gt;On the Aspx page:
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas; font-size:10pt"&gt;                  &amp;lt;asp:GridView ID="aGrid" runat="server" AutoGenerateColumns="false" AllowPaging="false" UseAccessibleHeader="true" ShowHeaderWhenEmpty="True"&amp;gt;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas; font-size:10pt"&gt;                        &amp;lt;Columns&amp;gt;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas; font-size:10pt"&gt;                              &amp;lt;asp:TemplateField HeaderText="Milestone" SortExpression="Name"&amp;gt;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas; font-size:10pt"&gt;                                    &amp;lt;ItemTemplate&amp;gt;
&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-left: 252pt"&gt;&lt;span style="font-family:Consolas; font-size:10pt"&gt;&amp;lt;asp:HyperLink ID="lnkMilestoneId" runat="server" Text='&amp;lt;%# Eval("Name") %&amp;gt;' NavigateUrl='#' onclick='&amp;lt;%# "Edit(" + Eval("Id") + "); return false;" %&amp;gt;'/&amp;gt;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas; font-size:10pt"&gt;                                    &amp;lt;/ItemTemplate&amp;gt;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas; font-size:10pt"&gt;                              &amp;lt;/asp:TemplateField&amp;gt;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas; font-size:10pt"&gt;                              &amp;lt;asp:BoundField DataField="DateStart" HeaderText="Start Date" SortExpression="DateStart"/&amp;gt;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas; font-size:10pt"&gt;                              &amp;lt;asp:BoundField DataField="DateEnd" HeaderText="End Date" SortExpression="DateEnd" /&amp;gt;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas; font-size:10pt"&gt;In my global js include file:
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas; font-size:10pt"&gt;function SortJSON(data) {
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas; font-size:10pt"&gt;      if ("" == currentSortField)
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas; font-size:10pt"&gt;            return;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas; font-size:10pt"&gt;      data.d.sort(sort_by(currentSortField, currentSortAsc, function (a) { if (null != a) return a.toUpperCase(); else return null; }));
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas; font-size:10pt"&gt;}
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas; font-size:10pt"&gt;var sort_by = function (field, reverse, primer) {
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas; font-size:10pt"&gt;      reverse = (reverse) ? -1 : 1;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas; font-size:10pt"&gt;      return function (a, b) {
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas; font-size:10pt"&gt;        //Note my json is an IList&amp;lt;X&amp;gt;, and the property can be something like "User.Name"
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas; font-size:10pt"&gt;            a = eval("a." + currentSortField); //a[field];
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas; font-size:10pt"&gt;            b = eval("b." + currentSortField); //b[field];
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas; font-size:10pt"&gt;            if (typeof (primer) != 'undefined') {
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas; font-size:10pt"&gt;                  a = primer(a);
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas; font-size:10pt"&gt;                  b = primer(b);
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas; font-size:10pt"&gt;            }
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas; font-size:10pt"&gt;            if (a &amp;lt; b) return reverse * -1;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas; font-size:10pt"&gt;            if (a &amp;gt; b) return reverse * 1;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas; font-size:10pt"&gt;            return 0;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas; font-size:10pt"&gt;      }
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas; font-size:10pt"&gt;}
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas; font-size:10pt"&gt;In my ajax call:
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas; font-size:10pt"&gt;function Bind (data) {
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas; font-size:10pt"&gt;    //This removes older results
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas; font-size:10pt"&gt;      $("#aGrid .dataItem").remove();
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas; font-size:10pt"&gt;      //Sorting call
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas; font-size:10pt"&gt;      SortJSON(data);
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas; font-size:10pt"&gt;    //Add the columns (give it a class dataItem so I can remove them cleanly with jquery above.
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas; font-size:10pt"&gt;      for (var i = 0; i &amp;lt; data.d.length; i++) {
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas; font-size:10pt"&gt;            $("#aGrid").append(
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas; font-size:10pt"&gt;                  "&amp;lt;tr class='" + OddEven(i) + " dataItem'&amp;gt;"
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas; font-size:10pt"&gt;                  + "&amp;lt;td&amp;gt;&amp;lt;a href='#' onclick='Edit (" + data.d[i].Id + ");return false;'&amp;gt;" + data.d[i].Name + "&amp;lt;/a&amp;gt;&amp;lt;/td&amp;gt;"
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas; font-size:10pt"&gt;                  + "&amp;lt;td&amp;gt;" + data.d[i].StrDateStart + "&amp;lt;/td&amp;gt;"
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas; font-size:10pt"&gt;                  + "&amp;lt;td&amp;gt;" + data.d[i].StrDateEnd + "&amp;lt;/td&amp;gt;"
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas; font-size:10pt"&gt;                  + "&amp;lt;/tr&amp;gt;"
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas; font-size:10pt"&gt;            );
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas; font-size:10pt"&gt;      }
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas; font-size:10pt"&gt;}
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;
 &lt;/p&gt; &lt;img src="http://geekswithblogs.net/jlt56789/aggbug/143539.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Josh Tenenbaum</dc:creator>
            <guid>http://geekswithblogs.net/jlt56789/archive/2011/01/19/143539.aspx</guid>
            <pubDate>Wed, 19 Jan 2011 23:49:33 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/jlt56789/comments/143539.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/jlt56789/archive/2011/01/19/143539.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/jlt56789/comments/commentRss/143539.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/jlt56789/services/trackbacks/143539.aspx</trackback:ping>
        </item>
        <item>
            <title>Domain Hosting</title>
            <link>http://geekswithblogs.net/jlt56789/archive/2011/01/19/143537.aspx</link>
            <description>&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;After hosting my domains with Godaddy for a few years, I was tired of the extra charge for private registration.  I found that Hover offers it free and a few months back, I switched one of my domains.  Wow!  Godaddy really made that hard:  When I authorized the transfer, Godaddy immediately stopped resolving DNS lookups even before domain propagation completed—this resulted in any email or web requests failing because their server did not return those server ips.  When I called them, they either were clueless and did not know what they were doing or deliberately misled me to believe they had not done that and were not at fault.  To make a long story longer, becareful leaving Godaddy—setup a new Name Server and change it before you approve the domain transfer.
&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;Hope this saves somebody else…&lt;/p&gt; &lt;img src="http://geekswithblogs.net/jlt56789/aggbug/143537.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Josh Tenenbaum</dc:creator>
            <guid>http://geekswithblogs.net/jlt56789/archive/2011/01/19/143537.aspx</guid>
            <pubDate>Wed, 19 Jan 2011 23:16:23 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/jlt56789/comments/143537.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/jlt56789/archive/2011/01/19/143537.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/jlt56789/comments/commentRss/143537.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/jlt56789/services/trackbacks/143537.aspx</trackback:ping>
        </item>
        <item>
            <title>Note to self about SubSonic</title>
            <link>http://geekswithblogs.net/jlt56789/archive/2008/12/10/127798.aspx</link>
            <description>&lt;p&gt;If you are using SubSonic, don't name your column "CreatedBy."  It appears to be a bad name…  Now if I could figure out how to do a left outer join with multiple join criteria.
&lt;/p&gt;&lt;p&gt;Not complaining, just making a note for myself (and others).&lt;/p&gt; &lt;img src="http://geekswithblogs.net/jlt56789/aggbug/127798.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Josh Tenenbaum</dc:creator>
            <guid>http://geekswithblogs.net/jlt56789/archive/2008/12/10/127798.aspx</guid>
            <pubDate>Wed, 10 Dec 2008 21:57:50 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/jlt56789/comments/127798.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/jlt56789/archive/2008/12/10/127798.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/jlt56789/comments/commentRss/127798.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/jlt56789/services/trackbacks/127798.aspx</trackback:ping>
        </item>
        <item>
            <title>Why ripping DVDs should be legal</title>
            <link>http://geekswithblogs.net/jlt56789/archive/2008/07/10/123726.aspx</link>
            <description>&lt;p&gt;I was listening to &lt;a href="http://natalidelconte.wordpress.com/"&gt;Natalie Del Conte&lt;/a&gt; on the Buzz Out Loud podcast (#762) today and I have to say, I am surprised at her attitude that people shouldn't backup their own DVDs:  She obviously doesn't have children.  After replacing 2 discs because of my kids ignoring me when I said to leave the DVD in the player; I totally see that backing up legally owned copies of DVDs for your own use is totally legitimate.&lt;/p&gt; &lt;img src="http://geekswithblogs.net/jlt56789/aggbug/123726.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Josh Tenenbaum</dc:creator>
            <guid>http://geekswithblogs.net/jlt56789/archive/2008/07/10/123726.aspx</guid>
            <pubDate>Fri, 11 Jul 2008 03:42:35 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/jlt56789/comments/123726.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/jlt56789/archive/2008/07/10/123726.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/jlt56789/comments/commentRss/123726.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/jlt56789/services/trackbacks/123726.aspx</trackback:ping>
        </item>
        <item>
            <title>Why Jeff Atwood is crazy</title>
            <link>http://geekswithblogs.net/jlt56789/archive/2008/07/10/123725.aspx</link>
            <description>&lt;p&gt;I've been listening to the &lt;a href="http://stackoverflow.com/"&gt;StackOverflow&lt;/a&gt; podcasts recently—not as polished as some.  Still, I enjoy the content.  During episode #12, &lt;a href="http://www.codinghorror.com/blog/"&gt;Jeff&lt;/a&gt; complained about the lack of specific criticism.  My main point of disagreement is with his need to re-invent the wheel.  Specifically, when he said he wanted to rewrite the login functionality for the stackoverflow site.  I'm a pretty selective developer and I like to find places where I can refactor code to the point of removing as many lines as possible.  But, I just don't see the point of taking tried and true login functionality and saying, no thanks:  Especially since it is security code that involves passwords and login information.
&lt;/p&gt;&lt;p&gt;Having said all that, I admire Jeff and I avidly read his blog.  I just think he should look to reuse and then refactor.  Too much is already written that shouldn't be rewritten.&lt;/p&gt; &lt;img src="http://geekswithblogs.net/jlt56789/aggbug/123725.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Josh Tenenbaum</dc:creator>
            <guid>http://geekswithblogs.net/jlt56789/archive/2008/07/10/123725.aspx</guid>
            <pubDate>Fri, 11 Jul 2008 03:35:49 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/jlt56789/comments/123725.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/jlt56789/archive/2008/07/10/123725.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/jlt56789/comments/commentRss/123725.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/jlt56789/services/trackbacks/123725.aspx</trackback:ping>
        </item>
        <item>
            <title>Any order?</title>
            <link>http://geekswithblogs.net/jlt56789/archive/2008/02/25/119965.aspx</link>
            <description>&lt;p&gt;Friday we deployed a major milestone, albeit 3 years late.  We finally deployed our main application in .Net 2.0.  Years and years of requests to allow us to do so and another project requesting it did the trick.
&lt;/p&gt;&lt;p&gt;So, after 427 builds, we sent the deployment package to the group that manages the servers.  The deployment is split into 3 archives: 1) the web site, 2) the sql patches, and 3) the stored procedures.  The dba ran the patches and was running the stored procedures when he called me at 8:30 to tell me he was getting an error.  I thought this odd and asked him to run them again.  He did so and as it turned out the tool that runs the stored procedures reported an error on the procs it was running.  Somehow the DirectoryInfo.getfiles call returned the list of files ordered by last modified date.  I'd never seen that.  I also didn't see any documentation that explained the order or how to change it.  I did make an Array.Sort() call and that fixed it.
&lt;/p&gt;&lt;p&gt;It's just a good idea to never assume an order obviously.&lt;/p&gt; &lt;img src="http://geekswithblogs.net/jlt56789/aggbug/119965.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Josh Tenenbaum</dc:creator>
            <guid>http://geekswithblogs.net/jlt56789/archive/2008/02/25/119965.aspx</guid>
            <pubDate>Tue, 26 Feb 2008 03:24:11 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/jlt56789/comments/119965.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/jlt56789/archive/2008/02/25/119965.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/jlt56789/comments/commentRss/119965.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/jlt56789/services/trackbacks/119965.aspx</trackback:ping>
        </item>
        <item>
            <title>Blind SQL Injection ?</title>
            <link>http://geekswithblogs.net/jlt56789/archive/2008/02/20/119818.aspx</link>
            <description>&lt;p&gt;My team recently upgraded our web application to Asp.Net 2.0 from Asp.Net 1.1.  Yesterday was the first deployment since the upgrade.  Overall, the conversion went well.  But an odd thing happened during the mandated Vulnerability Assessment that is required before the application go live.  I received an email that said "&lt;span style="color:blue; font-family:Arial; font-size:10pt"&gt;A high risk 'Blind SQL Injection' is showing up on the &lt;a href="http://&amp;lt;domain&amp;gt; /&amp;lt;virtdir&amp;gt;/common/error.aspx"&gt;http://&amp;lt;domain&amp;gt; /&amp;lt;virtdir&amp;gt;/common/error.aspx&lt;/a&gt;  URL on the aspxerrorpath object."  &lt;/span&gt;I looked at the page, but it literally did nothing in the database (read or write).  Not a thing.  I thought maybe a Cross Site Scripting vulnerability, but certainly not a SQL injection problem.  But, anybody who has worked in a large organization knows, the path of least resistance is the best.
&lt;/p&gt;&lt;p&gt;I decided to address the perceived issue by overriding the OnError event in a common base class for all the pages in the site.  I made sure I didn't pass the aspxerrorpath param and voila:  We passed today.&lt;/p&gt; &lt;img src="http://geekswithblogs.net/jlt56789/aggbug/119818.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Josh Tenenbaum</dc:creator>
            <guid>http://geekswithblogs.net/jlt56789/archive/2008/02/20/119818.aspx</guid>
            <pubDate>Thu, 21 Feb 2008 03:22:27 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/jlt56789/comments/119818.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/jlt56789/archive/2008/02/20/119818.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/jlt56789/comments/commentRss/119818.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/jlt56789/services/trackbacks/119818.aspx</trackback:ping>
        </item>
        <item>
            <title>CruiseControl.Net Subversion Error</title>
            <link>http://geekswithblogs.net/jlt56789/archive/2008/02/20/119816.aspx</link>
            <description>&lt;p&gt;I use Subversion (1.4.5.25188) via Apache (2.2.6.0).  I use CruiseControl.Net (1.0.1.1277) as our build server.  I setup Subversion in a non-standard manner.  And, it could account for the problem.  All the users who access Subversion, do so via a domain login.  That is except for the build user.  I setup the build user as a local account on both the Subversion server and the Build server with the same password.  I then setup a second location alias in Apache to also use SSPI authentication, but I set the "SSPIDomain" to Off.  This allowed the user base to only have to put in their username without a domain and the allowed the local accounts to work via the second location.
&lt;/p&gt;&lt;p&gt;All was fine until I started getting a build Exception that said "authorization failed."  I was able to reproduce this and I tried all I could think of to fix it.  Yesterday, I had an epiphany (understand I am paranoid):  I setup the account to use SSL, and then to use basic authentication.  I had avoided this in the past because I didn't want any passwords embedded in any scripts.
&lt;/p&gt;&lt;p style="text-align: center"&gt;&lt;em&gt;…The problem occurred only occasionally, but seemed to be occurring more often...
&lt;/em&gt;&lt;/p&gt;&lt;p&gt;I also added another directive:
&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;Order Deny, Allow
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;Deny from all
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;Allow from 192.168.xxx.xxx
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;I believe with this added, I have now effectively locked access down to only the build server.
&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;
		&lt;/span&gt; &lt;/p&gt; &lt;img src="http://geekswithblogs.net/jlt56789/aggbug/119816.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Josh Tenenbaum</dc:creator>
            <guid>http://geekswithblogs.net/jlt56789/archive/2008/02/20/119816.aspx</guid>
            <pubDate>Thu, 21 Feb 2008 03:12:53 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/jlt56789/comments/119816.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/jlt56789/archive/2008/02/20/119816.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/jlt56789/comments/commentRss/119816.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/jlt56789/services/trackbacks/119816.aspx</trackback:ping>
        </item>
        <item>
            <title>More than just a Build Process</title>
            <link>http://geekswithblogs.net/jlt56789/archive/2007/11/01/116515.aspx</link>
            <description>&lt;p&gt;I was just reading &lt;a href="http://www.codinghorror.com"&gt;Jeff Atwood's&lt;/a&gt; "&lt;a href="http://www.codinghorror.com/blog/archives/000988.html"&gt;The F5 Key Is Not a Build Process&lt;/a&gt;."  I find it interesting that the build process seems to be the end of it.  The reality is that you also have to have a document telling people how to access all the code and what they need to have installed on their computer.  It could be a page or 20 pages, but if you don't document all the software needed and the steps to configure it, you are just as lost as only having the build process.  Mainly because you most likely have one or two people on the project still in charge with that information locked in their heads.
&lt;/p&gt;&lt;p&gt;Don't get me wrong, I love the automated build process.  I just advocate more and not just as a mechanism to have it.  We have added 3 new people to the team, and I literally have handed them this document and said, "Look through this before you ask me any questions."  And, its worked—except for our Project Manager…&lt;/p&gt; &lt;img src="http://geekswithblogs.net/jlt56789/aggbug/116515.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Josh Tenenbaum</dc:creator>
            <guid>http://geekswithblogs.net/jlt56789/archive/2007/11/01/116515.aspx</guid>
            <pubDate>Thu, 01 Nov 2007 14:02:49 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/jlt56789/comments/116515.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/jlt56789/archive/2007/11/01/116515.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/jlt56789/comments/commentRss/116515.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/jlt56789/services/trackbacks/116515.aspx</trackback:ping>
        </item>
        <item>
            <title>Stupid Javascript bug</title>
            <link>http://geekswithblogs.net/jlt56789/archive/2007/10/05/115883.aspx</link>
            <description>&lt;p&gt;I received an error that said, "Line 1: Syntax Error."  I kept debugging the error, but I didn't think the document definition was causing the error.  In the end, I found another developer on the project, had an onmouseover event getting set into a div on via the innerhtml property that included something like onmouseover='somefunction(someobject,'',someotherobject);'.  It wasn't quite that simple, but essentially it was too long to find.  Unfortunately, the debugging isn't what it should be and the developer didn't test his work.&lt;/p&gt; &lt;img src="http://geekswithblogs.net/jlt56789/aggbug/115883.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Josh Tenenbaum</dc:creator>
            <guid>http://geekswithblogs.net/jlt56789/archive/2007/10/05/115883.aspx</guid>
            <pubDate>Fri, 05 Oct 2007 20:08:06 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/jlt56789/comments/115883.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/jlt56789/archive/2007/10/05/115883.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/jlt56789/comments/commentRss/115883.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/jlt56789/services/trackbacks/115883.aspx</trackback:ping>
        </item>
        <item>
            <title>Outlooks’s missing feature</title>
            <link>http://geekswithblogs.net/jlt56789/archive/2007/10/05/115881.aspx</link>
            <description>&lt;p&gt;Outlook needs a filter by alias sent to.  If someone sends you an email and I guess BCC's you, outlooks filters won't see a "to" in the filter and it won't allow the mail to be sent to a folder.  But, if you look at the headers, you can see the destination address.&lt;/p&gt; &lt;img src="http://geekswithblogs.net/jlt56789/aggbug/115881.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Josh Tenenbaum</dc:creator>
            <guid>http://geekswithblogs.net/jlt56789/archive/2007/10/05/115881.aspx</guid>
            <pubDate>Fri, 05 Oct 2007 20:05:08 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/jlt56789/comments/115881.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/jlt56789/archive/2007/10/05/115881.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/jlt56789/comments/commentRss/115881.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/jlt56789/services/trackbacks/115881.aspx</trackback:ping>
        </item>
        <item>
            <title>Problems with Security Update for Visual Studio 2005 SP1</title>
            <link>http://geekswithblogs.net/jlt56789/archive/2007/09/11/115293.aspx</link>
            <description>&lt;p&gt;Is anybody else experiencing problems with the Security Update for VS2005SP1?  I have installed it twice to no avail.  It says it completed successfully, and then promptly requests I install it again.  I've checked the obvious stuff like the Event Log for any errors and there aren't any.
&lt;/p&gt;&lt;p&gt;Can't decide if I want company…&lt;/p&gt; &lt;img src="http://geekswithblogs.net/jlt56789/aggbug/115293.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Josh Tenenbaum</dc:creator>
            <guid>http://geekswithblogs.net/jlt56789/archive/2007/09/11/115293.aspx</guid>
            <pubDate>Wed, 12 Sep 2007 01:52:03 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/jlt56789/comments/115293.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/jlt56789/archive/2007/09/11/115293.aspx#feedback</comments>
            <slash:comments>6</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/jlt56789/comments/commentRss/115293.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/jlt56789/services/trackbacks/115293.aspx</trackback:ping>
        </item>
        <item>
            <title>I read this and remembered my airline experience</title>
            <link>http://geekswithblogs.net/jlt56789/archive/2007/08/31/115089.aspx</link>
            <description>&lt;p&gt;I forgot to post this from a while ago…but I still want to rant…
&lt;/p&gt;&lt;p&gt;I read this &lt;a href="http://www.2-speed.com/2007/06/good-customer-service-is-sooooo-easy/"&gt;post&lt;/a&gt; and couldn't help think about my flight experience last week.  My family, which includes three kids between 4 and 8, were flying to Newark via AirTran.  We arrived at the airport slightly late (but not that late); we didn't think to ask the TSA to let us skip to the head of the line and consequently after an hour in line, we finally made it through.  It was 9:05 for a 9:20 flight.  We went to get on the train to get to Concourse C.  And, the train was broken…  So, with all our stuff for three kids—and the three kids, we ran all the way.  My wife and I taking turns to carry the kids at one point or another.  We got to the gate at exactly 9:20 with 3 other people.  The gate agent couldn't care less that the train was broken or that I just looked like I'd taken a shower.  The plane was at the gate, they just wouldn't let any of us on the plane.  &lt;/p&gt; &lt;img src="http://geekswithblogs.net/jlt56789/aggbug/115089.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Josh Tenenbaum</dc:creator>
            <guid>http://geekswithblogs.net/jlt56789/archive/2007/08/31/115089.aspx</guid>
            <pubDate>Fri, 31 Aug 2007 15:47:47 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/jlt56789/comments/115089.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/jlt56789/archive/2007/08/31/115089.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/jlt56789/comments/commentRss/115089.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/jlt56789/services/trackbacks/115089.aspx</trackback:ping>
        </item>
        <item>
            <title>Debugging VS2003 javascript using IE7</title>
            <link>http://geekswithblogs.net/jlt56789/archive/2007/08/31/115087.aspx</link>
            <description>&lt;p&gt;I recently upgraded Internet Explorer from IE6 to IE7.  I added the "debugger" command to my javascript and I tried to debug, but I kept receiving an error message that said "There is no source code available for the current location."  I found a few articles talking about this and I found information that VS2005 was going to be patched with VS2005SP1.  The short of it is: there is a Microsoft knowledgebase article 930873.  I downloaded the hotfix and all is working.  Alternatively, you can move the javascript into an external file and it will work that way as well.&lt;br /&gt;
	&lt;/p&gt; &lt;img src="http://geekswithblogs.net/jlt56789/aggbug/115087.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Josh Tenenbaum</dc:creator>
            <guid>http://geekswithblogs.net/jlt56789/archive/2007/08/31/115087.aspx</guid>
            <pubDate>Fri, 31 Aug 2007 15:38:13 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/jlt56789/comments/115087.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/jlt56789/archive/2007/08/31/115087.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/jlt56789/comments/commentRss/115087.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/jlt56789/services/trackbacks/115087.aspx</trackback:ping>
        </item>
    </channel>
</rss>
