Scott Hanselman

Hanselminutes Podcast 151 - Fit and Fitness with Ward Cunningham and James Shore

February 28, 2009 Comment on this post [7] Posted in Podcast | Tools
Sponsored By

WardCunninghamMy one-hundred-and-fifty-first podcast is up. Ward Cunningham is the creator of the Wiki, and the creator of the "Fit" testing framework. James Shore is the coordinator of the Fit project, an agile coach and the author of The Art of Agile Development.

JamesShoreYou may have heard the terms "Fit" and "Fitnesse" bandied about by the software engineering literati. What are they? Are they useful? Are they used at all? Does your testing strategy need some fitnesse? The creator of Fit and the coordinator of the Fit project chat with Scott and answer the hard questions. Is Fit Dead?

Subscribe: Subscribe to Hanselminutes Subscribe to my Podcast in iTunes

Do also remember the complete archives are always up and they have PDF Transcripts, a little known feature that show up a few weeks after each show.

Genome is a sponsor for this show!

Welcome to powerful, mature object-relational mapping in the .NET world. Genome lets you use the full benefits of LINQ with all major database platforms (Microsoft SQL Server, Oracle and IBM DB2). Genome: supporting real-world enterprise application development since 2002.

Telerik is a sponsor for this show!

Building quality software is never easy. It requires skills and imagination. We cannot promise to improve your skills, but when it comes to User Interface, we can provide the building blocks to take your application a step closer to your imagination. Explore the leading UI suites for ASP.NET and Windows Forms. Enjoy the versatility of our new-generation Reporting Tool. Dive into our online community. Visit www.telerik.com.

As I've said before this show comes to you with the audio expertise and stewardship of Carl Franklin. The name comes from Travis Illig, but the goal of the show is simple. Avoid wasting the listener's time. (and make the commute less boring)

Enjoy. Who knows what'll happen in the next show?

Technorati Tags: ,,

About Scott

Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.

facebook bluesky subscribe
About   Newsletter
Hosting By
Hosted on Linux using .NET in an Azure App Service

Splitting DateTime - Unit Testing ASP.NET MVC Custom Model Binders

February 26, 2009 Comment on this post [27] Posted in ASP.NET | ASP.NET MVC
Sponsored By

I've got this form for users to create an event. One of the fields is a DateTime, like this:

image

And that's kind of lame as it's hard to type in a Date and a Time at the same time. It's also no fun. Most sites would have those separated, and ideally use some kind of Calendar Picker with jQuery or something.

image

But when you post a form like this back to a Controller Action, it doesn't exactly line up neatly with a System.DateTime object. There's no clean way to get partials like this and combine them into a single DateTime. The "ViewModel" in doesn't match the Model itself. I could certainly make my method take two DateTimes, along with the other fields, then put them together later. It could get mess though, if I split things up even more, like some travel sites do with Month, Date, Year each in separate boxes, then Hours, Minutes, and Seconds off in their own.

image

I figured this might be a decent place for a custom "DateAndTimeModelBinder" after my last attempt at a Model Binder was near-universally panned. ;)

Here's my thoughts, and I'm interested in your thoughts as well, Dear Reader.

DateAndTimeModelBinder

First, usage. You can either put this Custom Model Binder in charge of all your DateTimes by registering it in the Global.asax:

ModelBinders.Binders[typeof(DateTime)] = 
new DateAndTimeModelBinder() { Date = "Date", Time = "Time" };

The strings there are the suffixes of the fields in your View that will be holding the Date and the Time. There are other options in there like Hour, Minute, you get the idea.

Instead of my View having a date in one field:

<label for="EventDate">Event Date:</label>
<%= Html.TextBox("EventDate", Model.Dinner.EventDate) %>

I split it up, and add my chosen suffixes:

<label for="EventDate">Event Date:</label>
<%= Html.TextBox("EventDate.Date", Model.Dinner.EventDate.ToShortDateString()) %>
<%= Html.TextBox("EventDate.Time", Model.Dinner.EventDate.ToShortTimeString()) %>

Now, when the Form is POST'ed back, no one is the wiser, and the model is unchanged:

[AcceptVerbs(HttpVerbs.Post), Authorize]
public ActionResult Create(Dinner dinnerToCreate) {
//The two fields are now inside dinnerCreate.EventDate
// and model validation runs as before...
}

That's the general idea. You can also just put the attribute on a specific parameter, like this:

public ActionResult Edit(int id, 
[DateAndTime("year", "mo", "day", "hh","mm","secondsorhwatever")]
DateTime foo) {
...yada yada yada...
}

It's so nice, that I give it the Works On My Machine Seal:

Here's the code, so far. It's longish. I'm interested in your opinions on how to make it clearer, cleaner and DRYer (without breaking the tests!)

NOTE: If you're reading this via RSS, the code will be syntax highlighted and easier to read if you visit this post on my site directly.

public class DateAndTimeModelBinder : IModelBinder
{
public DateAndTimeModelBinder() { }

public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
if (bindingContext == null)
{
throw new ArgumentNullException("bindingContext");
}

//Maybe we're lucky and they just want a DateTime the regular way.
DateTime? dateTimeAttempt = GetA<DateTime>(bindingContext, "DateTime");
if (dateTimeAttempt != null)
{
return dateTimeAttempt.Value;
}

//If they haven't set Month,Day,Year OR Date, set "date" and get ready for an attempt
if (this.MonthDayYearSet == false && this.DateSet == false)
{
this.Date = "Date";
}

//If they haven't set Hour, Minute, Second OR Time, set "time" and get ready for an attempt
if (this.HourMinuteSecondSet == false && this.TimeSet == false)
{
this.Time = "Time";
}

//Did they want the Date *and* Time?
DateTime? dateAttempt = GetA<DateTime>(bindingContext, this.Date);
DateTime? timeAttempt = GetA<DateTime>(bindingContext, this.Time);

//Maybe they wanted the Time via parts
if (this.HourMinuteSecondSet)
{
timeAttempt = new DateTime(
DateTime.MinValue.Year, DateTime.MinValue.Month, DateTime.MinValue.Day,
GetA<int>(bindingContext, this.Hour).Value,
GetA<int>(bindingContext, this.Minute).Value,
GetA<int>(bindingContext, this.Second).Value);
}

//Maybe they wanted the Date via parts
if (this.MonthDayYearSet)
{
dateAttempt = new DateTime(
GetA<int>(bindingContext, this.Year).Value,
GetA<int>(bindingContext, this.Month).Value,
GetA<int>(bindingContext, this.Day).Value,
DateTime.MinValue.Hour, DateTime.MinValue.Minute, DateTime.MinValue.Second);
}

//If we got both parts, assemble them!
if (dateAttempt != null && timeAttempt != null)
{
return new DateTime(dateAttempt.Value.Year,
dateAttempt.Value.Month,
dateAttempt.Value.Day,
timeAttempt.Value.Hour,
timeAttempt.Value.Minute,
timeAttempt.Value.Second);
}
//Only got one half? Return as much as we have!
return dateAttempt ?? timeAttempt;
}

private Nullable<T> GetA<T>(ModelBindingContext bindingContext, string key) where T : struct
{
if (String.IsNullOrEmpty(key)) return null;
ValueProviderResult valueResult;
//Try it with the prefix...
bindingContext.ValueProvider.TryGetValue(bindingContext.ModelName + "." + key, out valueResult);
//Didn't work? Try without the prefix if needed...
if (valueResult == null && bindingContext.FallbackToEmptyPrefix == true)
{
bindingContext.ValueProvider.TryGetValue(key, out valueResult);
}
if (valueResult == null)
{
return null;
}
return (Nullable<T>)valueResult.ConvertTo(typeof(T));
}
public string Date { get; set; }
public string Time { get; set; }

public string Month { get; set; }
public string Day { get; set; }
public string Year { get; set; }

public string Hour { get; set; }
public string Minute { get; set; }
public string Second { get; set; }

public bool DateSet { get { return !String.IsNullOrEmpty(Date); } }
public bool MonthDayYearSet { get { return !(String.IsNullOrEmpty(Month) && String.IsNullOrEmpty(Day) && String.IsNullOrEmpty(Year)); } }

public bool TimeSet { get { return !String.IsNullOrEmpty(Time); } }
public bool HourMinuteSecondSet { get { return !(String.IsNullOrEmpty(Hour) && String.IsNullOrEmpty(Minute) && String.IsNullOrEmpty(Second)); } }

}

public class DateAndTimeAttribute : CustomModelBinderAttribute
{
private IModelBinder _binder;

// The user cares about a full date structure and full
// time structure, or one or the other.
public DateAndTimeAttribute(string date, string time)
{
_binder = new DateAndTimeModelBinder
{
Date = date,
Time = time
};
}

// The user wants to capture the date and time (or only one)
// as individual portions.
public DateAndTimeAttribute(string year, string month, string day,
string hour, string minute, string second)
{
_binder = new DateAndTimeModelBinder
{
Day = day,
Month = month,
Year = year,
Hour = hour,
Minute = minute,
Second = second
};
}

// The user wants to capture the date and time (or only one)
// as individual portions.
public DateAndTimeAttribute(string date, string time,
string year, string month, string day,
string hour, string minute, string second)
{
_binder = new DateAndTimeModelBinder
{
Day = day,
Month = month,
Year = year,
Hour = hour,
Minute = minute,
Second = second,
Date = date,
Time = time
};
}

public override IModelBinder GetBinder() { return _binder; }
}

Testing the Custom Model Binder

It works for Dates or Times, also. If you just want a Time, you'll get a MinDate, and if you just want a Date, you'll get a Date at midnight.

Here's just two of the tests. Note I was able to test this custom Model Binder without any mocking (thanks Phil!)

Some custom model binders do require mocking if they go digging around in the HttpContext or other concrete places. In this case, I just needed to poke around in the Form, so it was cleaner to use the existing ValueProvider.

[TestMethod]
public void Date_Can_Be_Pulled_Via_Provided_Month_Day_Year()
{
var dict = new ValueProviderDictionary(null) {
{ "foo.month", new ValueProviderResult("2","2",null) },
{ "foo.day", new ValueProviderResult("12", "12", null) },
{ "foo.year", new ValueProviderResult("1964", "1964", null) }
};

var bindingContext = new ModelBindingContext() { ModelName = "foo", ValueProvider = dict};

DateAndTimeModelBinder b = new DateAndTimeModelBinder() { Month = "month", Day = "day", Year = "year" };

DateTime result = (DateTime)b.BindModel(null, bindingContext);
Assert.AreEqual(DateTime.Parse("1964-02-12 12:00:00 am"), result);
}

[TestMethod]
public void DateTime_Can_Be_Pulled_Via_Provided_Month_Day_Year_Hour_Minute_Second_Alternate_Names()
{
var dict = new ValueProviderDictionary(null) {
{ "foo.month1", new ValueProviderResult("2","2",null) },
{ "foo.day1", new ValueProviderResult("12", "12", null) },
{ "foo.year1", new ValueProviderResult("1964", "1964", null) },
{ "foo.hour1", new ValueProviderResult("13","13",null) },
{ "foo.minute1", new ValueProviderResult("44", "44", null) },
{ "foo.second1", new ValueProviderResult("01", "01", null) }
};

var bindingContext = new ModelBindingContext() { ModelName = "foo", ValueProvider = dict };

DateAndTimeModelBinder b = new DateAndTimeModelBinder() { Month = "month1", Day = "day1", Year = "year1", Hour = "hour1", Minute = "minute1", Second = "second1" };

DateTime result = (DateTime)b.BindModel(null, bindingContext);
Assert.AreEqual(DateTime.Parse("1964-02-12 13:44:01"), result);
}

Thanks to LeviB for his help. Your thoughts?

About Scott

Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.

facebook bluesky subscribe
About   Newsletter
Hosting By
Hosted on Linux using .NET in an Azure App Service

IE6 Warning - Stop Living In The Past - Get off of IE6

February 24, 2009 Comment on this post [83] Posted in ASP.NET | Musings
Sponsored By

Here's a chart showing ONLY Internet Explorer visits to my blog over the last few weeks:

17.96% of visitors to my site are on IE6

I'm bummed to see that nearly 20% (17.96%, in fact) of my visitors are using IE6. (Interesting that 8% are already using IE8!)

There's a great website that's attempting to deal with this and get folks off of IE6, called http://www.stoplivinginthepast.com. It all started like this and spread over Norway like wildfire. Hopefully it'll spread over the rest of the world and we can all add one less browser we need to test against.

There's lots of ways you can add a warning to your website or blog. The EASIEST way would be to add some HTML like this: (modified from examples posted here)

<!--[if lte IE 6]>
<style type="text/css">
#ie6msg{border:3px solid #c33; margin:8px 0; background:#fcc; color:#000;}
#ie6msg h4{margin:8px; padding:0;}
#ie6msg p{margin:8px; padding:0;}
#ie6msg p a.getie7{font-weight:bold; color:#006;}
#ie6msg p a.ie6expl{font-weight:bold; color:#006;}
</style>
<div id="ie6msg">
<h4>Did you know that your browser is out of date?</h4>
<p>To get the best possible experience using my website I recommend that you upgrade your browser to a newer version. The current version is <a class="getie7" href="http://www.microsoft.com/windows/downloads/ie/getitnow.mspx">Internet Explorer 7</a> or <a class="getie7" href="http://www.microsoft.com/windows/Internet-explorer/beta/default.aspx">Internet Explorer 8 (Beta)</a>. The upgrade is free. If you’re using a PC at work you should contact your IT-administrator. Either way, I'd personally like to encourage you to stop using IE6 and try a more secure and Web Standards-friendly browser.</p>
<p>You could also try some other popular browsers like <a class="ie6expl" href="http://mozilla.com">FireFox</a> or <a class="ie6expl" href="http://www.opera.com">Opera</a>.</p>
</div>
<![endif]-->

There are many plug-ins for different blog engines posted there as well. However, adding text like this is easy because it uses some built in crazy detection code that is unique to Internet Explorer (and oft-maligned) using HTML comments. Note the first line of the code has this weird thing: <!--[if lte IE 6]> called a conditional comment. This is easy to do, just add the text above to your blog's template. There's no server-side requirement at all.

Just a picture of what you'd see if you were running IE6

If you're using DasBlog for your blog engine, as I am, just add the text above to the top of your hometemplate.blogtemplate file and you're all set.

The downside is that it's roughly 1000 bytes, but it's temporary. Another technique would be to sniff the user's browser on the server side and only emit this text when they are running IE6 or below.

Now, it's your turn!

About Scott

Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.

facebook bluesky subscribe
About   Newsletter
Hosting By
Hosted on Linux using .NET in an Azure App Service

Fun with Twitter for Mix09

February 20, 2009 Comment on this post [6] Posted in Mix
Sponsored By

image One of the conference organizers for Mix09 gave me some free tickets to give away last week. I figured where better than Twitter for such nonsense, so we've been having some fun over there. (Here's how to use Twitter, if you care about the uselessfulness of Microblogging)

*That Twitter Bird is from Kean Hui's collection of 100 Twitter Bird Icons.

Twitter is limited, since you've only got 140 characters to be creative. Here's some of the things the "tweeple" have come up with.

The "#mix09" characters you see in many of the tweets are a hashtag, that folks on Twitter use to create topics/rooms to that folks can follow the conversation using http://search.twitter.com or other Twitter Trending tools like http://twitterfall.com.

Warning, what follows are all the tweets in response to my bolded questions. Some are a chuckle, others, not so much. ;) Good fun, though and a silly way to give away tix.

You know it's Bubble 2.0 when...

You know it's Bubble 2.0 when Scott Hanselman asks you if you "Would like fries with that". #mix09

#mix09 You know it's Bubble 2.0 when you don't need a government bailout...yet.

You know it's Bubble 2.0 when TwitPic acquires both Google and Microsoft. #mix09

#mix09 You know it's Bubble 2.0 when your parents want their own "MyFace" page.

You know it's 'Bubble 2.0' when 50% of all tweeple describe themselves as "Entrepreneurs" #mix09 You know it's 'Bubble 2.0' when Steve Ballmer yells 'Tweeple, Tweeple, Tweeple!'. #mix09 You know it's 'Bubble 2.0' when companies begin looking to an online bookstore for their infrastructure needs You know it's 'Bubble 2.0' when @scobleizer becomes the next U.S. president #mix09 You know it's 'Bubble 2.0' when searching for "web 2.0" returns more hits than "Angelina Jolie". #mix09 you know its bubble 2.0 when you can win #mix09 tix for doing haiku in 140 charcacters or less.

#mix09 You know it's 'Bubble 2.0' when you can buy "How to become a social media expert" cds on ebay

#mix09 You know it's 'Bubble 2.0' when URL shrinking web sites start charging per character.

You know it's Bubble 2.0 when you know more "Social Media Experts" than developers. #mix09 You know it's Bubble 2.0 when they announce an app store for the Newton. #mix09

#mix09 You know it's 'Bubble 2.0' when Bubble 1.9 beta's trial period expires.

You know it's 'Bubble 2.0' when everyone calls it 'Bubble 3.0' #mix09 You know it's 'Bubble 2.0' when your heart skips a beat at the mention of Jon Skeet's name #mix09

#mix09 You know it's Bubble 2.0 when you get free tickets to shows for telling jokes!

You know it's 'Bubble 2.0' when Michael Arrington goes on vacation. #mix09

#mix09 You know it's 'Bubble 2.0' when even a brand new Twitter account is valued at $500

#mix09 You know it's 'Bubble 2.0' when even Scott Hanselman has to get a job at Panera

#mix09 You know it's bubble 2.0 when 3 of 4 local news agencies have "twitter guy" icons complete w\capes and creepy leotard

#mix09 You know it's Bubble 2.0 when Microsoft starts bailing out its partners.

You know it's 'Bubble 2.0' when you don't need to live in San Francisco to make it. #mix09 You know it's 'Bubble 2.0' when you can actually charge money for valuable services and don't get directly paid for them #mix09

#mix09 you know it's Bubble 2.0 when CEO's of IT companies take advice from CEO's of investment banks

#mix09 "You know it's 'Bubble 2.0' when even twitter thinks they can make money...

You know it's 'Bubble 2.0' when people are giving away free mix tickets for "You know it's Bubble 2.0 when" jokes #mix09

#mix09 Tweets in the Style of ChuckNorrisFacts.com

#mix09 Chuck Norris was written in C# which itself was written in Chuck Norris

During #mix09 excessive tweets have been known to take out both engines on flights out of McCarran airport.

#mix09 can talk about Fight Club.

#mix09 What the Web calls innovation, MIX calls "barely trying"

#MIX09 MVC actually stands for Model-View-ChuckNorris. Controller is just one of his nicknames

#mix09 Chuck Norris says WPF is Will Pound Frequently

#MIX09 You don't follow Chuck Norris on Twitter. He follows you, finds you, and kills you

#MIX09 "Ask The Experts" track was changed to "Ask Chuck Norris" instead. Organizers apologize.

#mix09 List<ScottGu> throws an exception - there is only one ScottGu.

#mix09 Fact: ScottGu doesn't build with MSBuild. MSBuild builds with ScottGu.

#MIX09 ScottGu won his first programming contest when he was 25... seconds.

At #mix09 the Luxor has to borrow power from Silverlight

#mix09 fact: we don't need to put Mix09 on the Internet - the Internet is coming to Mix09

#mix09 Chuck Norris schedules ass-kickings with his Windows Mobile 7 phone through a Bluetooth implant in his brain

#mix09 if MIX09 were a man, he'd 5 Chuck Norrises

#mix09 chuck Norris has been coding on Windows 8 for years.

#mix09 - If MIX09 played Roulette, the house would give 33-to-1 odds in MIX09's favor.

#mix09 - Only MIX09 can prevent Forest Fires.

#mix09 Superman wears Scott Guthrie pajamas at #mix09 Microsoft will demo their newest development platform: Windows SkyNet 2012 R2 The Venetian Hotel will be sporting the Expression Blend "dark theme" becuase of #MIX09

#mix09 Silverlight 3 Beta is not being released, it is merely allowing mortals to see it.

ScottGu finished coding Silverlight 5 last weekend, but since MIX only happens once a year, he can't ship it until 2011

#mix09 invented Al Gore.

#mix09 "ScottGu doesn't wait on a mutex, the mutex waits on ScottGu."

The design of Silverlight DeepZoom was directly inspired by Scott Guthrie's powers of bionic vision.

#MIX09 is the only event that will make Chuck Norris wear a charcoal grey turtleneck.

#mix09 always has 1.21 gigawatts of power.

#mix09 plans to replace Jon Skeet as what powers the world's Google queries

#mix09 Scott Hanselman's entry in the Mix 10K contest was Live Mesh rewritten in 512 bytes.

#mix09 is running multiple sessions on "how to divide by zero" because of the anticipated popularity scott hanselman can divide by zero! #mix09

#mix09 fact: ScottGu's keyboard doesn't have the ESC key because he can never bet trapped!

#mix09 fact: If ScottGu threw a roundhouse kick, he might tear a ligament. :-)

#mix09 can make the Kessel run in under twelve parsecs @shanselman destroyed the periodic table, because he only recognizes the element of surprise. #mix09 Chuck Norris doesn't need to attend #mix09 because he already wrote all the code being presented in '08

#mix09 fact: ScottGu gave last year's Mix presentations while at the same time providing updates for BillG and SteveB IN SEATTLE

#mix09 fact: ScottGu doesn't write code...oh no, he thinks about the finished product and the code appears.

#mix09 Scott Guthrie once won a game of Connect 4 in 3 moves.

Every time you attend #mix09 god saves a kitten.

If you don't <3 your web, #mix09 will track you down, and you WILL <3 your web, or else.

#mix09 fact: Attending a Mix session is like having 14 red bulls then cliff diving off of the side of the Venetian in the pool what happens in Vegas doesn't matter, unless it happened at #mix09.

#mix09 Chuck Norris has no need for virtual methods. Nothing can override Chuck Norris

#mix09 ScottGu codes better than anyone except Chuck Norris. Even then it's a tie.

If Chuck Norris went to #mix09, he could show us how to write threadsafe stateful code without locks If Chuck Norris went, #mix09 would not be about rich media. All forms of media would give Chuck Norris their money.

Chuck Norris has no need to go to #mix09. He has already been to mix20.

#mix09 there is no mix. Only a group of geeks chuck Norris let fly into vegas.

#mix09 facts: mix09 is so amazing that Chuck Norris, Vin Diesel and Jack Bauer won't attend out of fear MIX never ends, it just waits for Vegas to recover between keynotes.

After seeing the speaking schedule at MIX09, Chuck Norris took out a restraining order against ScottGu's keynote-fu.

New #mix09 Logos created using ONLY MSPaint

#1 for #mix09 logos with Paint http://twitpic.com/1f4ax by @sundermedia - Doesn't even look like me!

#2 for #mix09 logos with Paint http://twitpic.com/1f3zq by @encosia - Will it Blend^G^G^G^G^GMix?

#3 for #mix09 logos with Paint http://twitpic.com/1f57t by @subdigital - No tools nor skill, but still a nice logo.

Honorable Mention for #mix09 logo: http://twitpic.com/1f59j by @johnsheehan - Really?!? I mean, ORLY?

http://twitpic.com/1f2mm - @shanselman a morning mspaint logo for ya #mix09

#mix09-related twaiku (twitter haiku)

a mix twoosh haiku? / very tall order this is / how 'bout free airfare?

Mix-0-9 for free ~ will leave me and Devs happy ~ not stuck in England...

Budget is frozen / Vegas is to far too drive / Guess I'll MIX next year :) I can't get to MIX / Please go and say hi for me / Can't wait for MIX 10. :-(

#mix09 Scraunched, scrounged, schmoozed, scratched code ~ finding strengths for Mix now vague ~ strengthed designs breakthroughs Shlepp coach: squirrelled, scrunched, scroonched; Wherethrough Mix: schmoozing, breakthroughs; Yields: Zeitgeist, choice spoils!

Get into the Mix | Meet lots of awesome people | Return with much swag

#MIX09 Free Tix For MIX Please / We Got TARP Funds Folks Are Pissed / Still Need To Learn Stuff Can't get in the MIX, even though I want to go, boss won't pay the price.

Why do I love Mix? Hot new tech from Microsoft Tix please, Hanselman. :) The new media / Converges at this show here / Go MIX it up now mix oh nine vegas, silverlight three will whisper, desktop apps for all

#mix09 haiku: i wish i could go / too few girl developers / gotta represent! ;)

#MIX09 haiku to best please the eye, learn to develop, design come to mix 09

#mix09 a web conference, with new web technology, time for MIX '09 developers flock, to #mix09 and neon lights, sure sign of spring i would love to goto mix, mix oh nine vegas, give me tickets please #mix09

#mix09 - Going to Vegas, I want to see new web tech, MIX '09, I come!

"hanselman presents / what happens at mix oh nine / stays in las vegas" #mix09 oh If I could mix - would it amend who I am - yes, hence I will mix Preconception's out / Content Is King in 09 / Delve into the Mix

Related Posts:

About Scott

Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.

facebook bluesky subscribe
About   Newsletter
Hosting By
Hosted on Linux using .NET in an Azure App Service

Hanselminutes Podcast 150 - Uncle Bob Martin, this time with feeling

February 19, 2009 Comment on this post [25] Posted in Back to Basics | Learning .NET | Podcast
Sponsored By

photo_martin_r My one-hundred-and-fiftieth podcast is up. He's back! And he's pissed! (Not really)

RWendi has a review and commentary of the past view week's goings on around Uncle Bob, Joel Spolsky and Jeff Atwood, sparked by Uncle Bob's discussion of  SOLID on show number 145. There's also a breakdown at InfoQ.

In this NEW episode, Scott sits down with Robert C. Martin as Uncle Bob (@unclebobmartin) tries to put the SOLID commandments principle into some perspective.

Here's some alternate titles for this show, suggested by the folks on Twitter!

  • "He's back and he's pissed."
  • "Bob's your Uncle."
  • "Joel Who?"
  • "SOLID State"
  • "I got your tests right here!"
  • "Smack Overflow"
  • "Pay Attention This Time: Bob Martin on SOLID"

(No, Bob's not pissed. We're just having a laugh.")

Subscribe: Subscribe to Hanselminutes Subscribe to my Podcast in iTunes

Do also remember the complete archives are always up and they have PDF Transcripts, a little known feature that show up a few weeks after each show.

Telerik is our sponsor for this show!

Building quality software is never easy. It requires skills and imagination. We cannot promise to improve your skills, but when it comes to User Interface, we can provide the building blocks to take your application a step closer to your imagination. Explore the leading UI suites for ASP.NET and Windows Forms. Enjoy the versatility of our new-generation Reporting Tool. Dive into our online community. Visit www.telerik.com.

As I've said before this show comes to you with the audio expertise and stewardship of Carl Franklin. The name comes from Travis Illig, but the goal of the show is simple. Avoid wasting the listener's time. (and make the commute less boring)

Enjoy. Who knows what'll happen in the next show?

Technorati Tags: SOLID,OOD,Uncle Bob,Software,Design

About Scott

Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.

facebook bluesky subscribe
About   Newsletter
Hosting By
Hosted on Linux using .NET in an Azure App Service

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