Ever wonder how big the .NET and Python communities are?

Do you ever wonder how big .NET and Python communities are? I’m working on an article about Python and .NET and this comparison definately came to mind. So I did some research on meetup.com.

I chose seven locations:

  1. Chicago, IL
  2. Los Angeles, CA
  3. New York, NY
  4. Seattle, WA
  5. Portland, OR
  6. San Francisco, CA
  7. Silicon Valley, CA

And did a search for meetups on .NET and on Python. Here is a graph of the results:

Relative size of python and ,net communities via user groups.[click image to enlarge] Continue reading

Much of my blog’s sample apps are now on GitHub and Azure

Here is a quick announcement if you have been downloading or using any of the libraries and sample applications from my blog. The most popular ones are now all on GitHub. This means you’re welcome to come and download or fork them! You can even contribute back if you see something useful that is missing.

My new GitHub projects:

Github: text-encoding-aspnet-mvc-by-example
Sample app: http://text-encoding-aspnet-mvc-by-example.azurewebsites.net/

GitHub: web-apps-hotkeys
Sample app: http://web-apps-hotkeys.azurewebsites.net/

GitHub: improve-mvc-perf-with-async-views
Sample app: http://improve-mvc-perf-with-async-views.azurewebsites.net/async

If you know of something I’ve published and you’d like it on GitHub, just send me a note!

Finally, the keen reader will notice I’ve moved my sample apps to Windows Azure Websites. I’ve been a vocal critic of Azure at times, but Azure Websites are quite nice. You get up to 10 domains for free. They are worth checking out.


Watch Building beautiful websites with Bootstrap

We just published my latest webcast. Feel free to watch it or download the demos and slides. Hope you enjoy it!

   Building beautiful websites with Bootstrap: A case studybootstrap-webcast-starter

MongoDB for .NET developers

I’m very proud to announce DevelopMentor’s soon-to-be released MongoDB for .NET course which I am authoring along with Pierre Nallet.

   Please subscribe to be notified »

NoSQL and MongoDB for .NET developers

This course is a deep exploration of building applications in MongoDB (the most popular NoSQL document-database). There are many benefits to choosing a NoSQL database over traditional RDMBSs such as SQL Server or Oracle. This course starts out by looking at why you should choose NoSQL in the first place. We will explore the native query language and capabilities of MongoDB. Then we will start working with MongoDB from our .NET applications and look at several topics that explore the advanced aspects of the MongoDB .NET API including (MongoDB from .NET, Advanced serialization in .NET, Untyped API in .NET via BSON documents, and more). We will see how to leverage the immense scalability of MongoDB using the aggregation framework, replica sets, and sharding. You will discover how to store and manage files of virtually unlimited size in MongoDB using GridFS. We will discuss how to properly design your entities and documents (both natively and in C#) to take full advantage of what MongoDB has to offer. Finally, we will round out the course with a few topics that you will need to be successful with MongoDB including Server administration for developers and Security and permissions.

During this class, you will learn:

  • Learn why you should consider NoSQL as your database.
  • Discover the MongoDB shell and ‘native’ query language and capabilities
  • Work with MongoDB from .NET and LINQ
  • Design your classes and entities to take full advantage of MongoDB
  • Build and tune high performance applications with indexing and profiling
  • Use the extensive .NET serialization API to go between .NET and MongoDB
  • Work with the filesystem (GridFS) within MongoDB from .NET
  • Answer complex questions while leveraging MongoDB’s scalability using the aggregation framework
  • Learn enough to administration MongoDB servers to be productive
  • Scale out using sharding and replica sets
  • Add security and permissions to MongoDB

Note: Some of the topics cover in this course are technology agnostic (for example the native query lesson is equality applicable to .NET developers as well as Python developers) and some are specifically optimized for .NET developers (for example Advanced serialization in .NET).

Why should you choose DevelopMentor’s MongoDB course? At DevelopMentor we have experience building and running large scale MongoDB deployments in .NET including our online training platform LearningLine and develop.com itself. The course authors work closely with the MongoDB team and are in the MongoDB Masters program. We have been teaching MongoDB in our Guerrilla .NET course for several years. In short, we we know what we’re doing with MongoDB and .NET and we’d love to share it with you.

Come to my SDD Conference sessions in May, 2014


I’m super excited to announce that I’ll be speak at the brand new SDD conference in London next May. I’ll be doing two sessions on ASP.NET MVC and two on MongoDB as well as a full day post conference workshop on MongoDB.

I hope to see you there.


Installing MongoDB on Windows and OS X

Ready to get started with NoSQL and MongoDB? Here are two 7-minute walkthroughs for installing MongoDB as a Windows service / OS X daemon.

These are both excerpts from my upcoming online MongoDB course for DevelopMentor. You can take the first 1 1/2 hours for free here:

Early access: MongoDB and NoSQL for .NET developers



Feedback welcome.


A Roundup of MongoDB Management Tools

I’ve been working with MongoDB for a long time now. Back in the early days, there really were no management tools analogous to RDBMS tools (e.g. SQL Server Management Studio). Since then, things have changed significantly. It’s time to look around and see what management / monitoring tooling is around these days for MongoDB.

The news is good. There are many different options to choose depending on your platform and use-cases.

1. Robomongo, price: $0 / open-source, platforms: Windows, OS X, Linux

Robomongo — is a shell-centric cross-platform open source MongoDB management tool (i.e. Admin GUI). Robomongo embeds the same JavaScript engine that powers MongoDB’s mongo shell. Everything you can write in mongo shell — you can write in Robomongo!


Key features: Continue reading

Optimistic concurrency in MongoDB using .NET and C#

[Available via NuGet - MongoDB.Kennedy.Concurrency]
[Available via GitHub - optimistic_concurrency_mongodb_dotnet]

This article demonstrates a technique and supporting library for adding optimistic concurrency control to NoSQL databases and MongoDB in particular.

Watch a video walk-through using this library:

Quickly, what is optimistic concurrency control?

Ideally, all databases that allow concurrent access or disconnected access need to implement some form of concurrency control. This usually comes in two flavors:

  1. Pessimistic concurrency control
  2. Optimistic concurrency control

Pessimistic concurrency control is usually used when working heavily within transactions. That may be fine for bank transfers, but it typically falls down in the face of disconnected models used by almost all ORMs such as Entity Framework. Moreover, it is entirely inappropriate for NoSQL databases.

Frameworks such as Entity Framework have optimistic concurrency control built in (although it may be turned off). It’s instructive to quickly see how it works. Basically there are three steps:

  1. Get an entity from the DB and disconnect.
  2. Edit in memory.
  3. Update the db with changes using a special update clause. Something like: “Update this row WHERE the current values are same as original values”.

If that update returns “0 rows modified” then we know it was changed since we loaded it and are about to overwrite someone’s changes. This results in a concurrency exception and not changes go through.

Optimistic concurrency control for MongoDB

By carefully constructing update commands in C# with the official 10gen C# driver, we can achieve almost exactly the same flow. At the end of this article is a simple C# class (data context) which has save and delete methods which internally are safe via optimistic concurrency control. Continue reading

Announcing LearningLine: Instructor-led online training from DevelopMentor

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


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

3 Open-Source Validation Projects for ASP.NET MVC

The goal of this post is to show you validation options beyond those that come in-the-box from Microsoft and the ASP.NET team.

Currently, there are nine pre-built validation attributes that come with MVC:


While these are very helpful, knowing where to look to find additional validation options is super helpful. For example, what if the State property is only supposed to be required if Country property is set to USA? Good luck with that one! Continue reading

Use NuGet package restore to simplify code sharing

Here’s a quick post on how and why you want to consider using NuGet package restore.

First, if you’re unfamiliar with NuGet, it’s basically “add reference” to external software projects (typically open source ones such as jQuery, but also for Microsoft ones such as Entity Framework). You definitely need to check out David Ebbo’s post introducing it. NuGet will change the way you develop.

Now when using NuGet it maintains a packages folder near your solution file. For things like ASP.NET MVC that heavily leverage NuGet, you’ll see this folder is very large. It’s usually much larger than your project itself in the beginning.

If you write small projects and share them out as compressed files (e.g. zip’s), and size matters to you, you might want to consider enabling NuGet package restore (off by default) for those projects and delete the packages folder before zipping and sending it out.

As an example, with a typical MVC 4 project, the “raw” content is 680 KB. After doing a build and counting the packages folder you’ll see it jumps to 16.9 MB. If that helps you significantly, then it’s probably a good idea to use package restore.

Three things have to happen to use NuGet package restore. Continue reading

Download My Web Apps Have HotKeys Too Sample App

I recently blogged about how web apps have hotkeys too. To encourage more developers to add hotkeys to their web applications, I created a jQuery plugin called jQuery.hotKeyMap.js and a sample application.

I just added a download link for the source code:


It’s an ASP.NET MVC 3 web app. Hope you find it useful!


Add Hot Keys to Web Apps With jQuery.hotKeyMap.js

github_icon Hot keys (or accelerator keys) have been an important navigational tool for desktop applications for many years. Finally, web applications are adopting this functionality too. Check out this simple example of a web app with hotkeys.

Expect a more general blog post on the topic soon. For now, I’d like to share my jQuery plugin that enables this capability with you.

Announcing jQuery.hotKeyMap.js: A jQuery plugin that allows you to add complex hot-key functionality and navigation to your web apps with very little effort.

Continue reading

Speaking on NoSQL and MVC at the South Sound .NET User Group (Near Seattle, WA)

Update: Thanks to everyone who came. You can download the sample application we build here and slides below:


11 Killer Open Source Projects I Found with NuGet

So maybe I’m late to the party, but I recently started playing with NuGet. It’s a killer new way to find, install, maintain, and manage references to open source libraries in Visual Studio 2010. Plenty of people have written about it (Phil Haack and  Scott Hanselman for example). Let’s just say you should learn about NuGet if you don’t know it already.

What I want to talk about is all the cool open source projects I found just by flipping through the pages of the NuGet directory in the Visual Studio “Add Library Package Reference” dialog.

Continue reading