Thoughts from Dan Miser RSS 2.0
 Thursday, November 05, 2009
It looks like the blog shut down on 10/20/09. The problem turned out to be that I had exceeded the quota for the user account that hosts dasBlog. I bumped up the quota for that user, and now we should be good to go again. Until the next post...
Thursday, November 05, 2009 10:01:22 AM (Central Standard Time, UTC-06:00)  #    Comments [0] -

 Friday, October 16, 2009
Given a collection of players that were constructed like this:

private static IList<Player> LoadPlayers()
{
	Player favre = new Player { Id = 1, Name = "Favre", Team = new Team { Id = 1, Name = "Vikings" } };
	Player peterson = new Player { Id = 2, Name = "Peterson", Team = new Team { Id = 1, Name = "Vikings" } };
	Player rodgers = new Player { Id = 3, Name = "Rodgers", Team = new Team { Id = 2, Name = "Packers" } };
	Player driver = new Player { Id = 4, Name = "Driver", Team = new Team { Id = 2, Name = "Packers" } };

	List<Player> players = new List<Player> {favre, peterson, rodgers, driver};
	return players;
}

And the following LINQ query:


var query = 
	from p in LoadPlayers()
	group p by p.Team into g
	select g;

We will see the following output:


Vikings
Vikings
Packers
Packers

The reason this is happening is that we created new Team objects for each and every Player, and when LINQ tries to group, it does so based on object equality. The solution to this is to override the Equals() and GetHashCode() methods in the Team class. After doing that, the LINQ query will be able to group the objects up properly and just display each team name once. Resharper has a nice code generation template to create solid implementations of these methods (press Alt+Ins to bring up the code generation menu).

The example here is obviously contrived. We could create each team object once, and then use the same instance during the property assignment, and if we did that, things would work just fine. However, I ran into a more generalized version of this problem when using WCF and a lot of custom code generation. The underlying lesson is still the same: LINQ and GroupBy need to have object equality defined properly in order to make things work as you would expect.

Friday, October 16, 2009 12:14:18 PM (Central Standard Time, UTC-06:00)  #    Comments [2] -
.NET | LINQ
 Monday, October 12, 2009
Since my last post, the date has changed from October 9th to October 12th. The reason this is important is that the functions that needed to calculate the date based on the current date are now coming through a different code path. Before, everything worked great. As of October 10th, not so much. The fix is simple - the getDate function was missing the parentheses to make it a method call. The fix is quite simple and is listed below:

var day = (now.getDate() < 10) ? "0" + now.getDate() : now.getDate();
Monday, October 12, 2009 10:11:13 PM (Central Standard Time, UTC-06:00)  #    Comments [0] -
ASP.NET | ASP.NET MVC
 Thursday, October 08, 2009
I have several reports in my ASP.NET MVC application that are date-oriented. I had start date and end date text boxes, and things worked fine. What I really wanted was something that would allow those date boxes to be populated with a variety of canned date ranges (e.g. Year to Date, Last Month, etc.). I found just what I was looking for in a pure JavaScript implementation here.

The one problem I found was that "Last Month" was being calculated incorrectly. Below is the simple fix. Thanks to epalla for the original code.


// last month 
case "lastmo":
    // we need a new month variable for month-1, also formatted correctly
    var lastmonth = ((month - 1) < 10) ? "0" + (month - 1) : (month - 1);
    startbox.value = lastmonth + "/01/" + year;

    // now grab the last day of the month (30, 31? we don't know!)
    var moend = new Date(year, (month - 1), 0);
    endbox.value = lastmonth + "/" + moend.getDate() + "/" + year;

    break;
Thursday, October 08, 2009 7:44:07 PM (Central Standard Time, UTC-06:00)  #    Comments [0] -
ASP.NET | ASP.NET MVC
 Thursday, July 09, 2009
I posted about my iPhone experience in April, 2008. I just picked up a 3gs, and I have to say that I am incredibly pleased. Just about every complaint that I had in that original article has been addressed. In addition, the speed increase really is significant. It really is that noticeable. Add in the cool camera upgrades (better pixels, video, and cool touch to focus), and this is absolutely a winner.

The current complaints deal with lack of MMS and tethering, but that's hardly Apple's fault. (Nice workaround for tethering posted here.) The experience ordering business phones through AT&T sucked as bad as anything I've ever dealt with, so it's not shocking they don't care about their users enough to enable simple features such as these.

Now I just need to find an iPhone app to follow the Tour de France. Allez!

Thursday, July 09, 2009 8:39:39 PM (Central Standard Time, UTC-06:00)  #    Comments [0] -
Macintosh
 Sunday, May 31, 2009
Given a set up like this (where ExpenseSummaryData returns some arbitrary HTML fragment) :

<%using (Ajax.BeginForm("ExpenseSummaryData", new AjaxOptions { UpdateTargetId = "result" })) { %>
    <label for="startDate">Start Date:</label>
    <%= Html.TextBox("startDate") %>
    <br />
    <label for="endDate">End Date:</label>
    <%= Html.TextBox("endDate")%>
    <br />
    <input type="submit"/>
    <br />
    <span id="result"/>
<% } %>

If that is all your page does, you will notice that you get taken to a new page when pressing Submit. The data on the new page is the HTML fragment returned by the AJAX call, but that's all it contains (e.g. no master page), and it's clearly not replacing the result span.

The reason for this is that I forgot to add the following lines to the <head> section in the original page:


    <script src='<%=ResolveUrl("~/Content/js/MicrosoftAjax.debug.js")%>' type="text/javascript"></script>
    <script src='<%=ResolveUrl("~/Content/js/MicrosoftMvcAjax.debug.js")%>' type="text/javascript"></script>

After adding those declarations in, the content in the span tag is properly updated and it looks like a real AJAX call.

Sunday, May 31, 2009 10:38:24 AM (Central Standard Time, UTC-06:00)  #    Comments [0] -
.NET | ASP.NET MVC
 Saturday, April 25, 2009
I've been on Facebook for a while, and I just added Twitter to the mix. I'm trying to keep communications on those sites much more informal and fairly non-technical. If you want to follow me, search for dmiser@wi.rr.com on Facebook or danmiser on Twitter. Hope to see you over there.
Saturday, April 25, 2009 11:08:10 AM (Central Standard Time, UTC-06:00)  #    Comments [1] -
.NET
 Wednesday, April 22, 2009
Are you looking for a strong developer/architect with a serious passion for all things technical and a unique blend of experience? If so, feel free to email me. My main focus over the past couple of years has been on things ALT.NET-ish (e.g. ASP.NET MVC, NHibernate, Spring.NET, etc.) while I have delved into a variety of other technologies as well (e.g. Mindscape LightSpeed, LINQ, Dynamic Data, Delphi, etc.). If you know of an opening - contract or full-time - please keep me in mind. I'd prefer to remain in the Milwaukee area, but occasional travel wouldn't be the end of the world.

Until the next technical post here, take care and thanks in advance.

Wednesday, April 22, 2009 12:29:54 PM (Central Standard Time, UTC-06:00)  #    Comments [0] -
.NET | ALT.NET | Delphi
Navigation
Archive
<November 2009>
SunMonTueWedThuFriSat
25262728293031
1234567
891011121314
15161718192021
22232425262728
293012345
About the author/Disclaimer

Disclaimer
The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.

© Copyright 2010
Dan Miser
Sign In
Statistics
Total Posts: 339
This Year: 5
This Month: 0
This Week: 0
Comments: 618
All Content © 2010, Dan Miser
DasBlog theme 'Business' created by Christoph De Baene (delarou)