Reblogged: What should I learn to get started in .NET and web development?

[Note: I am reblogging this post which originally was posted to the LearningLine blog. Hope you all find it useful here as well]

I recently had a conversation with someone who is looking to make a fresh start and become a developer (coming from other IT positions).  The question they had was:

What should I learn to get started in .NET and web development?

Now this question was starting from a position of “I’d like to get started with .NET and the web. How do I do that?” So please hold your “No, choose Ruby (or NodeJS or … )” comments. That’s another blog post. :)

Here’s my advice along with a bunch of courses you can use to accomplish this efficiently and affordably. Continue reading

Take the first hour of any online developer course for free at LearningLine

[Note: reblogged from blog.learninglineapp.com. I'd like to personally invite you to check out our work over at LearningLine - just follow the links below.]

We believe that LearningLine is the most effective online training for developers, period. Today it gets even better. We are announcing the ability to preview any of our online courses, for free without entering any payment information.

This is not a trial that becomes a subscription or a silly 5 minute preview like other company’s offer.  You can now study approximately the first hour of any one of our courses. And you can spend as much time as you like doing so.

To get started, just head over to our schedule page, click on any course title you’d like and choose “Preview course for free“:

   preview-online-developer-course-for-free

This means there is now lot of content available to you right now. At a typical student speed working for an hour a day, it would take over a month to complete all the content that is available for preview. Continue reading

Announcing LearningLine: Instructor-led online training from DevelopMentor

I am very proud to announce an exciting new online learning platform from DevelopMentor:


http://www.learninglineapp.com

At DevelopMentor we have been thinking deeply about online training. We wanted to create an environment that combines the best parts of online learning and classroom training, the best parts of self-directed exploration and expert-led mentoring. We believe we have created just such an environment and I am thrilled to publicly announce it today.

Here’s a short 2-minute video which will give you a quick overview. You can get more details at http://www.learninglineapp.com.

Online training today

There are many shortcomings in how developers learn online today. Continue reading

Join Me at Guerrilla .NET in November

Just a quick announcement for an developer upcoming event I’ll be participating in…

Early November I’ll be co-teaching DevelopMentor’s biggest .NET developer event of the year in Los Angeles: Guerrilla .NET. If you haven’t been to Guerrilla .NET, it’s a very unique and memorable event – it’s unlike almost any other training class you’ve seen. We’ve just updated the outline with the most important current and upcoming technologies (see below).

I hope to see you there! Feel free to contact me with any questions.
@mkennedy

Guerrilla .NET
November 5th-9th
in Los Angeles
    Newly Updated with: Windows 8, VS 2012, MVC 4 and Entity Framework 5.

Guerrilla .NET provides a deep exploration of .NET design philosophy and practical advice. You learn a myriad of patterns and best practices, and you get hands-on experience developing applications using Visual Studio 2012 and Windows 8. Learn to write code using new .NET class libraries like Entity Framework 5, MVC 4, and even the new Windows Runtime (WinRT).

Course Topic Highlights:

  • Windows 8 For The Developer
  • LINQ and Entity Framework 5
  • XAML-based Programming
  • ASP.NET MVC 4.0: Beyond the Basics
  • Introduction to jQuery
  • Model-View-ViewModel for WPF and Metro
  • Building RESTful Services with The ASP.NET Web API
  • Programming Win8 Apps: Metro / WinRT
  • Entity Framework 5 and Code First
  • PFx: Task: a Unified Threading API
  • PFx: The Parallel Class and Concurrent Data Structures
  • C# 5.0
  • What’s New in .NET 4.5
  • Cloud Computing for the .NET Developer: IaaS, PaaS, and Patterns
  • Applied NoSQL with LINQ, and MongoDB
  • KnockoutJS
  • Power Debugging
  • Design Patterns for Testable Applications
  • Topic X

Asynchronous Programming in .NET 4.5 (Video)

Here’s a recording of a webcast I did for DevelopMentor covering .NET 4.5 and .NET 4 asynchrouns programming concepts, including Task<T>, async, and await.

Enjoy!
@mkennedy

PS – Be sure to watch it in 720p quality.

Michael’s .NET Suggested Reading List

With Guerrilla .NET from DevelopMentor coming up on May 7th, it’s time to refresh my .NET reading list.

Want to get ready for this class or a class like it or just get a quick-start on .NET? Here’s what I would recommend. There are many books covering the topics (but no small list covering most). Instead of trying to read them all in-depth (a fairly unattainable goal), I would suggest that you read the first 2 – 3 chapters from all of these books listed below. This would cost about $250 if they buy them all, but they are all available on Safari Books Online.

http://my.safaribooksonline.com/

You can get the free trial for 10 days and if you like it you can then pay $19 / month and have access to all these books (see the coupon at the bottom of the trial page on safari online).

CLR via C#, Third Edition (foundational knowledge)
http://my.safaribooksonline.com/book/programming/csharp/9780735640467

WPF 4 Unleashed
http://my.safaribooksonline.com/book/programming/microsoft-wpf/9780132174367

Silverlight 4 in Action
http://my.safaribooksonline.com/book/web-development/silverlight/9781935182375

Pro ASP.NET MVC 3 Framework, Third Edition:
http://my.safaribooksonline.com/9781430234043

Programming Entity Framework
http://my.safaribooksonline.com/book/software-engineering-and-development/9780596807276

RESTful .NET
http://my.safaribooksonline.com/book/programming/microsoft-dotnet/9780596155025

Learning WCF
http://my.safaribooksonline.com/book/programming/microsoft-wcf/9780596101626

C# in Depth
http://my.safaribooksonline.com/book/-/9781935182474

jQuery in Action
http://my.safaribooksonline.com/book/web-development/jquery/9781935182320

Host Your Web Site in the Cloud
http://my.safaribooksonline.com/book/web-development/9780980576832

MongoDB: The Definitive Guide
http://my.safaribooksonline.com/book/databases/mongodb/9781449381578

Agile Principles, Patterns, and Practices in C#
http://my.safaribooksonline.com/book/programming/csharp/0131857258

Debugging Applications for Microsoft .NET (sections on WinDBG)
http://my.safaribooksonline.com/book/programming/microsoft-dotnet/9780735645349

Cheers,
@mkennedy

Webcast: Building Rich Input Forms in ASP.NET MVC Tuesday April 10

[Update: View the recordings and downloads.]

Want to learn more about building great forms in MVC? Attend my free DevelopMentor webcast this Tuesday.

Webcast: Building Rich Input Forms in ASP.NET MVC

https://www3.gotomeeting.com/register/559059054

In this webcast we will explore the powerful features of ASP.NET MVC that allow us to build rich forms that accept user input. We’ll begin by discussing the built-in HTML Helpers and Model Binding. Next we’ll add validation and show how we can do both client- and server-side validation using DataAnnotations. Finally, we’ll see that sometimes using domain models as our form-bound objects doesn’t make sense. We’ll look at more advanced scenarios using View Models.

Cheers,
@mkennedy

Article: 10 Features in .NET 4.0 that made Me Smile

I recently wrote another article for DevelopMentor‘s Developments newsletter (not subscribed yet? see top-right of this page). This one is entitled

10 Features in .NET 4.0 that made Me Smile

Read it on the DevelopMentor website: http://www.develop.com/tenfeaturesdotnet4

I am republishing it below for you all to enjoy on your RSS readers.

Cheers,
Michael


10 Features in .NET 4.0 that made Me Smile

I have been reviewing some of our upcoming classes at DevelopMentor this week. One of those classes, What’s New in .NET 4.0, left me excited for things to come. There are a bunch of small but wonderful features discussed in that class. I thought I’d take this opportunity to write a few of them up and share the joy. I bet some of them make you smile too.

Continue reading

ASP.NET WebForms + Routing Video and Downloads

I recently did a webcast for DevelopMentor on using the routing framework introduced in  ASP.NET MVC within ASP.NET WebForms based applications to build more modern websites without a major rewrite of existing web applications. The talk was called “Building Modern Websites with ASP.NET WebForms“.

Here’s all the related downloads. We had some microphone troubles so I want to  apologize in advance for the sub-optimal sound quality.


Watch streaming video (WMV HQ)   Download WMV VideoListen to MP3 StreamingDownload MP3

You can also download the slides and peepleocity.com sample website built during the presentation.

Keep up with DevelopMentor on Twitter

You may know that I work for DevelopMentor where I’m an instructor in the .NET curriculum (among other cool things I do there). You probably also know I’m kind of loopy for Twitter as evidenced by my Twitter page and .NET community site driven by Twitter:

http://twitter.com/mkennedy
http://dotnet.ubbuzz.com/

Today those two things came together in a big way. Introducing DevelopMentor’s Twitter presence:

    @DevelopMentor_
http://twitter.com/developmentor_

I encourage you get out there and follow us! Here you will see all the combined Twitter messages of most of the DevelopMentor instructors as well as a couple of messages from DevelopMentor itself. You’ll get the chance to keep on top of the world as viewed by some of the smartest people I’ve had the chance to work with: the DM instructors! You’ll see which instructor posted any given message with an attribution at the end (either “via @marksm” or ^MS depending on the available space).

I’m excited about this not just because I think it is cool and useful (and has to do with Twitter :) ), but over the last few days I’m the guy who wrote the back-end systems to make this all go. It was a short but fun project. It’s a real testament to .NET that this was mostly written an hour.

After you follow @DevelopMentor_ you might want to interact with some of the instructors directly. Here’s our Twitter accounts in a single place for your reference:

http://twitter.com/bmaso

http://twitter.com/danamiga

http://twitter.com/jason_diamond

http://twitter.com/markblomsma

http://twitter.com/marksm

http://twitter.com/mauricedb

http://twitter.com/mkennedy

http://twitter.com/richardblewett

http://twitter.com/tonysneed

http://twitter.com/wallacekelly

I hope you enjoy the conversations we’re bound to have on Twitter. Come be part of it.

Signed: @mkennedy

ThreadPool Bug in .NET 2.0 SP1 is Fixed!

I’m glad to confirm that the ThreadPool bug introduced in .NET 3.5 has been fixed in SP1 for .NET 3.5.

For more background information, look at these posts.

  1. .NET 3.5 Brings Breaking Changes to ThreadPool
  2. Breaking Changes in the ThreadPool: The Movie
  3. Follow up on .NET 2.0 SP1 ThreadPool Bug
  4. More on the ThreadPool Bug in .NET 2.0 SP1

Now go forth and create some threads!

 

More on the ThreadPool Bug in .NET 2.0 SP1

There appears to be some confusion about this .NET 2.0 SP1 ThreadPool bug I found. Can you believe someone might be wrong on the internet?

If you’ve been following the posts (1, 2, 3), then you’ll know I was in touch with the key guys at Microsoft and the root of the problem is that if you create asynchronous work faster than the ThreadPool can create threads, then that work “misses” the SetMinThreads command and are created more slowly.

That is why the Thread.Sleep(1) probably solves the issue for you. If it doesn’t, sleep slightly longer. It’s a timing issue.

With this insight, you’ll see that this does not really affect true servers such as ASP.NET and WCF but does affect things like Delegate.BeginInvoke and friends called in quick succession.

In short, if your server handles more than 1,000 requests per second, during the first second of startup, then your server may run into this problem (ok, ok, more precisely, if your server handles more than 1 request / millisecond).

Let me address a few common concerns out there:

  • Is the sky falling? No.
  • Is it great situation? No.
  • Will be fixed with .NET 2.0 SP2? Yes
  • When? Maybe this summer, maybe later – they aren’t sure.
  • Does this affect WCF and ASP.NET? Probably not. The bug, no. The new ThreadPool behavior, yes.
  • Is there a work around? Yes, create threads more slowly. This is automatic on the server.

Follow up on .NET 2.0 SP1 ThreadPool Bug

Here’s a followup post on the .NET ThreadPool bug that I described here:

Breaking Changes in the ThreadPool: The Movie

I have been in touch with the guys who are in charge of the ThreadPool and they have both confirmed that this is a bug and that they are planning on fixing it in .NET 2.0 SP2 – but they are not sure of the timeline for its release.

In the meantime, Vance Morrison, a .NET Runtime Performance Architect at Microsoft, has given me this work-around.

Take this “broken” code:

 private static void UseThreadPool(int count)
        {
            for ( int i = 0; i < count; i++ )
            {
                ThreadPool.QueueUserWorkItem(
                    delegate { SlowMethod(); } );
            }
        }

And add a strategic Thread.Sleep and it’s fixed:

 private static void UseThreadPool(int count)
        {
            for ( int i = 0; i < count; i++ )
            {
                ThreadPool.QueueUserWorkItem(
                    delegate { SlowMethod(); } );
 Thread.Sleep(1);
            }
        }

 

Breaking Changes in the ThreadPool: The Movie

Well, my recent post on .NET 3.5 Brings BREAKING Changes to ThreadPool sparked quite a bit of interest in the .NET community.

But this is also something difficult to convince people of because it depends so heavily on configuration. The source code doesn’t change, the environment does.

So I’ve put together a screencast demonstrating the problem and elaborating further. If you doubt the validity of the previous post, or can’t reproduce the problem, please watch the video:

Download the video (approx 18 MB)

In the video I work with a modified version of the program. Here’s that for your enjoyment:

The application: NetThreading.exe (From Video).zip (2.59 KB)

The source code:

using System;
using System.Threading;

namespace NewThreadPoolBehavior
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            Console.WriteLine( "Running on " + Environment.Version );
            int w, c;
            ThreadPool.GetMaxThreads( out w, out c );
            Console.WriteLine( "Max Currently: " + w + ", " + c );
            ThreadPool.GetMinThreads( out w, out c );
            Console.WriteLine( "Min Currently: " + w + ", " + c );

            Console.WriteLine( "Set min thread count 20? (y/n) " );
            string txt = Console.ReadLine();
            if ( txt == "y" )
            {
                Console.WriteLine( "Setting min to 20" );
                ThreadPool.SetMinThreads( 20, 100 );
                ThreadPool.GetMinThreads( out w, out c );
                Console.WriteLine( "Min Currently: " + w + ", " + c );
            }
            UseThreadPool( 200 );

            Console.ReadLine();
        }

        private static DateTime startTime;

        private static void UseThreadPool(int count)
        {
            startTime = DateTime.Now;
            for ( int i = 0; i < count; i++ )
            {
                ThreadPool.QueueUserWorkItem(
                    delegate { SlowMethod(); } );
            }
        }

        private static int concurrent = 0;

        private static void SlowMethod()
        {
            TimeSpan dt = DateTime.Now - startTime;
            concurrent++;
            Console.WriteLine( "Starting ops (" + concurrent + " concurrent, elapsed=" +
 dt.TotalSeconds.ToString( "N3" ) + " sec.) " );
            Thread.Sleep( 20000 );
            Console.WriteLine( "Finished ops (" + concurrent + " concurrent)" );
            concurrent--;
        }
    }
}