It seems like the all cool guys are moving to GitHub, which uses, as the name implies, GIT as source control system.

What is Git

The main difference between Git and all the other main SCS like CVS, SVN, TFS is that Git is a "distributed version control system". This means that when you are working, you are doing against your own “clone” of the repository, you do check-ins locally, and then you push the changes up to the master version of the repository.

Given it's distributed nature, Git makes easier contributing to opensource projects, but it has development workflow a bit different from the other SCS.

I’m not going deeper into the details as there are tons of tutorials, including a series of screencasts: GitCasts.

How I started contributing to Ninject

To give you an example of what the “contributing” workflow is like, I’ll use the steps I followed to start contributing to Ninject (so all urls will be the Ninject’s ones)

This created the repository in folder named “ninject”, so, for the following commands to work, I moved to that folder: cd ninject

then an important step: I bound my repository to the original one, so that I could keep it in sync with the changes Nate does to the main repository: git remote add upstream git://github.com/enkari/ninject.gitNotice that here I used the clone url of the original repository (not mine)

To get changes that were made to the original repository I’d do: git pull upstream master

Since the last command copied it to my local repository, I’ve then to push it back to my online one: git push

But there is lot more

Here was just a very brief introduction on how to get started with Git. As I said at the beginning there are tons of tutorials available. I’d suggest the following:

A few days ago, Simon Tokumine, a Ruby On Rails developer from UK who had to build a web app using, as he calls it, .NET MVC (ASP.NET MVC as we usually calls it), wrote a nice post that makes a comparison between RoR and ASP.NET MVC. Actually it was not really a comparison, more a “ASP.NET MVC for RoR developers” kind of post.
He was a foreigner that came into the .NET country and visited the city called ASP.NET MVC, and he gave his opinion on his first (or second) visit. But not being a local he only used what the tourist guides (the MSDN and the official docs) told him and he didn’t know where the locals gather and what they do make their life easier.
In this post I’m going to give him and to other RoR developers that want (or are forced to) evaluate and eventually use ASP.NET MVC in a project the tips that they need to do as locals do, and I’m going to do address, among the topics that he used in the original post, only the ones that need a response (the others were pretty obvious, like “Learn C#” or “C# is more verbose compared to Ruby”). So, head to his post to read the whole article.

.NET MVC is actually .NET VC

He is right, ASP.NET MVC is addressing only the Controller and the View part of the MVC pattern. I think that there are good reasons behind this decision: .NET developers have always been used to having a lot of freedom, especially in the data access side of things. And I might say that .NET developers don’t like “conventions” that much. ASP.NET MVC is a huge step toward a more “opinionated” and convention-based mindset, but including also a convention-based approach to data access would scared many .NET developers away. Furthermore, there are so many ORM in the .NET space, either opensource, commercial and even from Microsoft. Finally, unlike RoR world, .NET developers have to deal with legacy codebases, and while rewriting the UI side of things is easy and most companies do it every 3-4 years anyway, rebuilding the data access and domain logic is less likely to happen. Just as proof of this, at the moment I’m working on the rewriting of a web app, but most of the services for data retrieval are still in COM+ components built in 1997 by people that left the company. Something that probably RoR developers have the luxury to ignore.

But now that I took the defenses of ASP.NET MVC, let me say that, there is a way to accomplish automatic data validation, binding from request; it’s not baked with the framework, but there is: the way I found the best (at the moment) is using xVal, which allows you to use any validation rule engine and any validation notification library. I used it combined with jQuery validation plugin and the Enterprise Library Validation Block.

Anyway, Microsoft has a data access story for ASP.NET: it’s called Dynamic Data. And there a version of Dynamic Data for ASP.NET MVC (beware, still a preview) in the works. If I’m not wrong, it should rely on EF, but will also allow the developer to use he’s own Domain Model. And there is also the scaffolding feature to help you quickly write your views based on the Presentation Model you want to pass to the view.

And you still want a fully convention-based approach (like RoR’s ActiveRecord), I suggest you have a look at S#arp Architecture, which uses NHibernate as ORM and is based on ASP.NET MVC, or even have a look at FuBuMVC, which is loosely related to ASP.NET MVC and is supposed to take the same RoR approach of being a one-size fits all application framework (not sure the state of the development tho).

The community is extremely anemic

That is quite unfair, probably you didn’t look around enough. There is stackoverflow.com, there is the ASP.NET forum. There are quite a few blogs and blog networks that I suggest you to give a look at: CodeBetter and devlicio.us to name a few. And then there is nice series (in think of almost 50 posts) of tips about ASP.NET MVC by Stephen Walther and one by LA.NET, on most of the aspects of the framework. Another good source of information is the ALT.NET mailing list: even if not devoted to ASP.NET MVC only, it is worth registering to it.

Also, if you look at CodePlex, there are a few projects for ASP.NET MVC, but they are mostly about libraries to enhance the framework itself. I agree with you that there are not as many as many plugins, but what would you expect from a library that shipped less than a week ago?

Documentation is rudimentary

The framework shipped last week, and you based your description on a RC release. The MSDN doesn’t have anything yet, but there are is a quite good documentation on the asp.net/mvc site.

ASP.NET MVC is not OpenSource

Yes, it is not OpenSource, but it is public source (released under the Microsoft Source License). You cannot contribute, but since to code is available you can look at it and fix any bug you find or add your own conventions. The only think that you cannot do is releasing the modified code. But most of the times you’d not need it. Almost everything in ASP.NET MVC is extensible, and you can easily add your own conventions by extending or replacing some parts of framework, like, to name a few, controller factory, action invokers, result invoker, view engines, model binder and so on.
It would have been nice if it was properly opensourced, tho. Not for a technical reason but more for a philosophical one.

Ajax is done by hand

I’d hated if all javascript was abstracted away with a server-side wrapper. But with jQuery and all the plugins there is no need to use that. And, if you use xVal, the client-side validation is written for you, so you don’t need to deal with that boring stuff.

Passing variables to the view can be extremely laborious

That is right, I think this issue as not been solved yet. Together with the “component” story. The best way at the moment is creating a Presentation Model for each view that needs to be rendered, and have this contains all the bits of data needed. It can become a bit tedious for small views, or if you have many views, but better than the looseness of the dictionary of data. I admit this would be easier with Ruby, where you can build the presentation model without creating the class, using the dynamic-ness of the language. There is an extension to ASP.NET MVC to support IronRuby, but it’s still in an early stage. So we’ve to either wait IronRuby or C# 4 dynamic types, whichever comes first.

It’s hard to convert ASP.NET developers to use .NET MVC

I totally agree with you on this: web forms developer have a different state of mind. But this should not be an issue for RoR devs

There is a worry that MS will drop the project if forced to make a cost cutting decision

Now that it is shipped, it’s almost impossible that it happens. Also, there are already plans to a ASP.NET MVC v2 inside ASP.NET 4.0. And finally, if they stop developing on it, they will not cut it, they will just leave it untouched as they did with remoting and they are going to do with Linq2Sql

I hope I helped adding some pointers to resources that were missing in Simon’s post.

But all in all, Simon is right: ASP.NET MVC is not as mature as RoR, mostly for the community standpoint. For most of the people around, that consider things only after they reach the RTM status, ASP.NET MVC is a 5 days old framework, while RoR exists since 5+ years. But I hope that ASP.NET MVC becomes a great community as the RoR one is.

Today I set down watching the livecast of the second day keynote just to see what it was going on, because I pretty much knew everything about IE8 and I didn’t know who Deborah Adler was.

OK, IE8 RTM was released… and the “exceptional” standard compliancy was shown on stage, together with the webslices and accellerators. But, not big news. Now I’ve to update my IE6 warning message.

But I was really pleased not to have closed the stream when Deborah Adler coming on stage.

Bill Buxton introduced her saying:

“She doesn’t come from our culture. To her, a developer is someone who turns your photos into prints!”

She told her story, of how experiencing a user’s real problem and feeling his pain helped her revolutionizing the medical prescription packaging industry and, most of all, creating a better and safer world through a better user experience.

The message that she gave us with her talk was that the real key to success, both for you and your users, is that you, as user experience designer, put yourself in your user’s shoes, think about their needs, feel their pain and come out with something that is made for them.

She ended her speech with that inspiring words:

“Let me give you the life-long lessons I learned from this project. What separates you from your competitors isn’t design or development, it’s truly thinking about the person who will use your design or development and figuring out how it can solve their needs. Once you start thinking about your customers’ needs, it becomes a habit. When you start from this perspective, you’re no longer just a designer, you’re a user experience designer, and I salute you for this!”

“Ultimately, we are deluding ourselves if we think that the products that we design are the ‘things’ that we sell, rather than the individual, social and cultural experience that they engender, and the value and impact that they have. Design that ignores this is not worthy of the name.”

That takes me to a sad realization: how many user experience designers are staffed in software projects? Talking from my experience, most of the time their number is ZERO. I hope that now that Microsoft is starting to evangelize this, big companies will start thinking that UX is not only for consumer oriented project (like MTV or ESPN or similar stuff) but is a competence that must be inside every project that has an human as end user.

And, with all the new Rich Applications framework around, the new input paradigm (multi-touch, gestures and similar), creating a good user experience becomes more complex, because you have so many things you can do and making good use of the 3D fx and all the fancy stuff is difficult.

That’s why it’s an exciting time to be a User Experience Designer, because UX can change the user’s life.

The Opening keynote by Buxton

I would have never expected such an awesome keynote by Buxton: it was about user experience designer, about UX in MS, about the importance of sketching. Buxton is a researcher, but it was one of the most amazing keynote I ever watched, even more than Steve Jobs ones.

Empowering startups

Then StackOverflow on stage, to talk about their experience as .NET startup, and how they built their “modern web2.0” standard based site using the latest web technologies on .NET and using the Bizspark program that Microsoft created to allow startup to build their business lowering the costs of licenses.

Silverlight

And then came Silverlight, the big thing of the day. Started with a talk of Netflix and how Silverlight helped them great a better experience for users and then moved to Silverlight 3 new features:

improved media experience, new codecs, IIS Media Services, and SmoothStreaming for live content and improved experience for users (pause live stream, replay live stream, slow-mo for live stream). Seems pretty amazing. (Demo by NBC)

Expression Blend 3

And finally the development experience, with more integration with Adobe products (import from Photoshop and SketchFlow, a kind of mockup tool with integrated flow designer. Just like Balsamiq with integrated flow and the ability to make the sketches interactive.

RIA DataServices

From that I can understand from the demo, it’s a library that spans both server side with ASP.NET and client with Silverlight. You can create a data service on the server, and on the client automatically create a proxy to access the data services on the server. Seems like a great accelerator for building data based applications on Silverlight. But still makes the “too much abstraction” approach. Time will tell if this is a leaky abstraction or not.

Wrapping up

Great technologic announcements, but apart from this, I like to see that Microsoft is taking a big step toward helping “real” web development and helping developer thinks about more User Experience. And he is trying to push .NET adoption for the market that are usually not likely to use Microsoft products, like startups and PHP developers.

This new release should doesn’t have anything new since RC2, except having updated jQuery to the latest version (1.3.2), and solved a bug with integration with Silvelight.

Not sure if the release was intentional or just someone that forgot to set the timezone field while publishing the download, but it’s here.

And now that RTM is out, we can go on and do the final changes to our “Beginning ASP.NET MVC v1.0” book so that it can be available in bookstores by the end of spring (but if you want, you can always pre-order it on Amazon US or Amazon UK).

With excitement I followed the live text-cast of the iPhone OS 3.0 Preview event.

My favorite highlights are:

Native access to Google Maps API and turn by turn directions

Push Notifications (but no background apps)

Copy&Paste

Landscape mode in Mail

MMS

Web form auto-fill and password manager

They started with a good pace, showing the new feature for the devs, and then they slowed the pace, showing some amazing apps that were not possible before OS 3.0, like a glucose meter that connects to the iPhone (Scott will like that), or match result notifications from ESPN and many other more. But that part was a way "boring”… everybody was waiting for the end-user’s new features. Ok, they have to showcase their partner, but they must find a balance.

And then finished with the consumer features, like the much anticipated copy&paste and many other more. This almost made me forget the boring demos.

Here is a quick recap of the new features:

AppStore:

there is a subscription model for payments

ability to buy new “contents” from inside apps (like new level for games or new contents for magazines or tourist guides)

API:

1000 new API

Peer to Peer connectivity over network and bluetooth (I’m not a big gamer, so not really excited by this)

Communication with accessories

Native access to Google Maps API (you can embed maps into your apps instead of just opening the browser) and turn by turn directions (TomTom on the way?)

Push Notification… no background applications because they would drain the battery too much (this will enable, to what they say, applications like IM, that are connected to the server when running, and will receive push notifications when they are turned off). Meebo already built a native iPhone app on OS 3.0, that uses the new push server infrastructure (no more using web apps for this).

Consumers:

Copy/Cut/Paste, even between different app. And shake to undo selection

Send more than one picture per email: just copy and paste as many as you want

Landscape mode in all Apple’s apps, like Mail, SMS, Calendar and Notes

The SMS app becomes “Messages” (because it has MMS now)

Voice Memos

Search in Mails, Notes, Calendars, iPod… like in Spotlight

Note Sync, form’s auto-fill, password manager for Safari Mobile, and much more

The SDK beta is available from today, and available for consumers in a few months, and will be a free upgrade for iPhone users (both the first version and the 3G one).

MIX09 is starting in two days, and again, even this year, I’m not going to Vegas: I had to choose between ALT.NET Conf + MVP Summit and MIX09, and I chose for the former. Can’t fly from Italy to US twice in 3 weeks (and I’m still recovering from last flight’s jetlag).

But luckily, as they did with last PDC, the keynotes will be streamed live, and all the session recordings will be available almost immediately. I’ll miss the community interactions and I’ll not meet all the awesome guys that will go to Vegas, but at least I won’t miss the new announcements and the sessions.

Unfortunately there is no way to link to the session abstracts on the normal site, but MIX09 has a mobile version of the site (which seems like it’s made for the iPhone), so the links are taking to the mobile version of the abstracts.

There were keynotes from executives, sessions from the product teams that told us which are the new features they are putting into the new version of products and the new products that are coming out in the future.

I’ll not tell you what I heard, because everything is under NDA (but you don’t have to wait too long as most of the things will be unveiled at MIX09) but I’m going to give you what I got from the sessions.

But even if we didn’t have any exclusive on what is going technology wise, we had a lot of interaction with the various product team (above is the picture from the web development open panel) that asked our feedbacks on the direction the web development tools and libraries are taking. And it’s refreshing to see that they are starting to try and embrace OpenSource (look at Phil’s t-shirt during his MVC talk).

This was the main theme of all the summit, at least in my area of interest, both as sessions and during the social events: at the various parties we had lots of talks with various people in the asp.net team.

The Oxite Chat

One of the best was the one with Duncan Mackenzie, the PM of the team behind Oxite, C9 and VisitMix sites: it was really interesting to hear how they did, what their reaction was to the unexpected attention that they got from main stream media, and many other things. And he is the one to blame for to Oxite sticker on my laptop lid.

The main point was that they are all web devs, and they were excited by the fact that now, with ASP.NET MVC, they could fine tune the markup and write a nicely semantic and SEO-friendly HTML, while the people that criticized them were not looking at that side of the medal, but were only looking at the purity of the pattern. At some degree I got where they were going, but it was nice to hear from them the real story.

The takeaways

I came back from Seattle very excited about what I saw, and most of all I was excited by the new way of doing things that part of Microsoft is adopting.

The only thing that disappointed me was that I didn’t have enough time to spend the time with everybody I wanted to, and to visit Seattle and the surroundings. Maybe next year I’ll try to spend more time sightseeing, probably staying in Seattle a little bit more.

I’m still recovering from the jet-lag, after the almost 15hrs of travel time back from Seattle, were I attended both the ALT.NET Conference and the MVP Summit. In this post I’m going to tell you my thoughts on the weekend of discussions that happened at the ALT.NET conference. Thoughts on the MVP Summit will follow in another posts.

I had already experienced other discussion-based session at the Italian ALT.NET conference, and the one I attended in Redmond totally confirmed my opinion: this is the best way to provide value to the attendees that already know the topics, but also to the one that only know a little. I don’t think I’ll be able to attend “traditional” sessions on topic I know any more. And I think I’ll have to bring something of what I saw there at the next Italian ALT.NET Conference in June.

ALT.NET Conf personal highlights

Going back to the various sessions, what came out from the community related ones, is that .NET is too complicate to get started with for the average developers: it’s not that easy to download new libraries and all their dependencies. Also it came out that customizing opensource web applications is not easy as it is in other opensource communities, for example PHP.

To solve the first issue, a new project is spontaneously born during the conference: Rocks. It should be a kind of gem for .NET. The idea behind it is nice, I hope it evolves to a finished product as it will really help new developers to get started with using opensource .NET libraries.

Another interesting discussion happened with Sergio Pereira, about why most people don’t like to talk at local community events, how to organize and manage user groups and how to encourage people to talk. Stats say that people fear talking in public more than they fear death and getting injured. Talking to local groups, to known people and using the open space format seems to be less intimidating. And this kind of format might also help the people that don’t want to talk because they don’t have the time to prepare a 1 hour long slide-based presentation. Even if very few people showed up (actually only Sergio, me and Scott Hanselman close to the end) this was one most profitable discussion I had at the conference.

Another session that was really valuable to me was the one where Sampy, the architect of Oxite, came to talk and comment on what happened with the PR fiasco and what they did after the first release. And it ended up that they probably would have not refactored and made the codebase better if the community wasn’t so rude with comments.

Most of the sessions were videotaped, and some were even streamed live. On the ALT.NET Seattle wiki there is a page with the links to all the available videos.

There are not many changes, and the biggest one is the installation procedure:

there is a dependency requirement on .NET 3.5 SP1 (that means you have to have .NET 3.5 SP1 in order for the ASP.NET MVC RC2 to work)

there is a “server-only” install mode

That’s a big change in the installation tools and, since it’s a new process, it’s the thing that is most likely to break. So, if you want to see ASP.NET MVC RTM-ed as soon as possible, download the latest bits, install the RC2 in as many machine as possible and report any problem you encounter on Codeplex. That will spot problems in the installation procedure.

We have been planning this since a half a year, and finally we made it: I’ll be going to talk about the usual, boring stuff I so excited about and that I always talk about (ASP.NET MVC) at the next workshop of DotNetUmbria, the .NET UserGroup of Umbria, the weekend before Easter: Friday April 3rd, in Perugia.

It will be an afternoon long workshop, with two sessions:

Introduction to ASP.NET MVC, where I’ll introduce ASP.NET MVC, what it is, and how to do things with it

ASP.NET MVC, so what? where I’ll be discussing which are the scenarios where ASP.NET MVC is better then WebForms, and how you can do some of the things you were used to with web form, with MVC. And, if I find a bad web form application, I’ll do a refactoring to ASP.NET MVC to show all of this in a real application.