Scott Guthrie is amazing. He's behind all the open source projects. Some of them are even taking pull requests. Entity Framework, MVC, ASP.NET, etc are all popular and open source.
Yep - he's the guy that got me into .NET mvc and alt.net... which turned out to be a gateway drug to Ruby on Rails then Scala. (Genuinely) Thanks Scott!
Folks, not much of this is new. Both Entity Framework and ASP.NET MVC were already open source for quite some time [0][1]. All the other repos are nearly empty.
The only real news here is that, indeed, ASP.NET vNext is going to be developed in the open, or at least to some extent. But right now, not a lot of code seems to be released that wasn't already out there (although I did not go through all the repos).
I don't think you should expect to find many current/legacy parts of ASP.NET that aren't open yet: this seems to be mostly for new stuff.
Finally, don't forget that "ASP.NET" doesn't seem to mean a lot (anymore): it's basically Microsoft actively shipping the org chart. Anything that's web related and from MS appears to get tacked "ASP.NET" on front of it. Cause really, what does ASP.NET MVC, basically a pretty uninspired Rails port to C# (and just an open source library like any other), have to do with "active server pages"?
"Uninspired rails port" is a far cry from accurate. I've worked with both rails and asp.net mvc. I started with rails in the 1.x days but also had clients that used .net. I despised web forms for a variety of reasons so I jumped on the mvc bandwagon as soon as the fist community preview was released.
Hack, Connery, Hanselman, & Guthrie openly acknowledge that rails was a source of inspiration in their book http://www.amazon.com/gp/product/0470384611?ie=UTF8&tag=scob... but so was Spring, among others. Above all, I think the .net mvc framework was trying to capture the fasted-paced, fly-by-the-seat-of-your-pants essence of the rails way more than anything else. In doing so, they unearthed a lot of awesome concepts previously unknown to most .net developers like domain-driven design, tdd/bdd, dependency injection, scaffolding; old hats to Java and ruby guys.
The mvc .net team did an amazing job of breaking stride with the asp.net mentality of letting the framework do as much as possible. Yet .net was still very much confined by it's own structure, forcing the mvc framework to remain rigid. They opted for configuration over convention which, in my opinion, was by far the biggest differentiator in rails to the mvc frameworks that preceded it.
They also filled it up to the edge with Ruby-like magic all over the place.
ASP.NET MVC is the only place I've ever seen in mainstream compiled languages where the code can break in untraceable ways if you change the name of a method parameter (f.ex. for controller actions). Or where models suddenly don't get data because you forget to add "{get; set;}" to the code somewhere. Absolutely no way to find out why it went wrong. The data just isn't there.
Sure, you can learn this and then not make the mistake again, but the reason I don't use Ruby or Python much anymore is because I've had with with having to spend a full day going through a framework's source code to find out why my bug is a bug. In an ecosystem and language like C#, you expect things to either work or to get a pretty OK error message, preferably at compile time. The more magic, the more time I waste tracing bugs.
What's the point of using a compiled language if half your code is a dynamic viewbag of string keys and liberal JSON parsers that just ignore fields it doesn't expect or can't fill?
> Sure, you can learn this and then not make the mistake again, but the reason I don't use Ruby or Python much anymore is because I've had with with having to spend a full day going through a framework's source code to find out why my bug is a bug. In an ecosystem and language like C#, you expect things to either work or to get a pretty OK error message, preferably at compile time.
No, that's what you expect. I expect that the traits of frameworks you describe to be features of particular frameworks and to be largely independent of language, except that in languages that don't provide introspection/metaprogramming facilities that enable them, you probably won't find them (probably, because usually there may be elaborate ways of hacking around language limitations to do magic, and then even examining the source code will make the magic less obvious.)
You can easily have magic-free frameworks in Ruby or Python, and easily heavy-magic frameworks in most (mostly) statically-typed compiled languages like C# and friends as long as they have some introspection/metaprogramming facilities (and optional dynamic typing like C# makes this more viable, too.)
If you want to choose a language so as to avoid any need to examine the traits of particular frameworks so that you don't run into a heavy-magic one, you are going to need a much more limited language than C#.
> What's the point of using a compiled language if half your code is a dynamic viewbag of string keys and liberal JSON parsers that just ignore fields it doesn't expect or can't fill?
The point is the other half of the code. (The part that, in Python or Ruby you might be tempted to drop down to a C or Java [for JRuby] extension to do.)
convention over configuration is the motto on Rails and ASP.Net MVC is actually the opposite so that's why OP says it was the biggest differentiator between the two frameworks.
ASP.NET MVC shares a ton of the common infrastructure with ASP.NET webforms. It's true that when there was only webforms, there was no need to distinguish and it was all called "ASP.NET". However, MVC and webforms are now two different patterns one can use to structure applications that run on the large, extensive and shared "ASP.NET" infrastructure.
"ASP.NET" is the name of Microsoft's .NET web platform. To answer your rhetorical question, ASP.NET MVC is an MVC framework for Microsoft's .NET web platform. "Microsoft MVC" would not be clearly constrained to web development.
What does that even mean? In this case, a bunch of libraries and a protocol for dispatching HTTP requests to .NET code.
If I use Mono's XSP server, and use it to host a ServiceStack backend, am I using "the ASP.NET platform"? It's 100% non-Microsoft open source. Am I using ASP.net when I host the same backend on IIS instead? Or when I host ASP.NET MVC (which is just a library) on Mono/XSP?
First 4 words of content at https://github.com/mono/xsp are "Mono's ASP.NET hosting server". So yeah, you're using ASP.NET. In the same way that working with Mono is using .NET.
Or maybe not. Perhaps someone means to specify that they're using Mono/XSP as opposed to one of Microsoft's implementations. But then it'll probably be obvious from the context.
One should note that this is the "new" ASP.NET. The old version, the one explicitly tied to IIS, is not and will probably never be open source software.
They're building a new stack from the ground up. Which is the only way, really, to make it "cross platform".
Not quite: that's "ASP.NET MVC", the razor view engine, "web pages", and some other libraries like Entity Framework and SignalR. Technically these are just libraries built on the closed-source ASP.NET stack, colloquially known as System.Web, which is essentially IIS.
I agree that even now it still seems kind of odd when Microsoft embraces open source technologies, and the company is very big so their support tends to be oddly lumpy (generally better among the groups working on products that are directly related to networking like ASP.NET, Azure, etc) but they've been on this path for quite a while now.
Some clarification:
This seems to be only for demos and samples, not really the home of source code to cooperate on.
“The Home repository is the starting point for people to learn about ASP.NET vNext, it contains samples and documentation to help folks get started and learn more about what we are doing.” [0]
“The GitHub issue list is for bugs, not discussions. If you have a question or want to start a discussion you have several options:
- Post a question on StackOverflow
- Start a discussion in our ASP.NET vNext forum or JabbR chat room [1]
ASP.NET vNext includes updated versions of MVC, Web API, Web Pages, SignalR and EF... Can run on Mono, on Mac and Linux. [2]
MVC, Web API, and Web Pages will be merged into one framework, called MVC 6. MVC 6 has no dependency on System.Web. [3]
Trust me; that's a good thing. Nasty, deeply misguided platform - whoever came up with the idea of PostBack and trying to make the web look like VB6 is definitely not on my Christmas card list. Ties you in knots trying to make the web something it fundamentally isn't.
I'll be quiet now, and get back to working on my MVC code. The day when I can finally stop having to work on WebForms code too will be a happy one :-)
Not a rhetorical question: What's so wrong
with Web Forms?
Postback? That's really part of HTTP.
What the browsers send back to the server is as specified
by HTTP, not Microsoft or Web Forms.
Viewstate? Okay, it's a bit of a tricky thing, but
really can mostly ignore it. Else it provides a
somewhat useful service.
Controls? Yes, for each HTML 'control', there is
an ASP.NET class so to send the HTML for the control
to the user, get an instance of the class corresponding
to the control, assign values to the properties, attach the instance to a big
tree that gets walked by the code in one of the ASP.NET 'events', maybe PAGE_PRERENDER, and move along. Why is this
so bad?
Web Forms is my first and so far only
way I've written Web pages. Explain what
is wrong with Web Forms and what is much
better and why?
IMO, there was nothing horribly wrong with WebForms itself when it was introduced -- So long as you were writing your HTML by hand and using HtmlControls rather than the drag-n-drop stuff.
ViewState was far better than other frameworks that shoved the client state into a server session object and broke the Back button. Plus the clients were saving state instead of wasting server memory. If it got too ugly, you didn't even have to use it, the http variables were still there.
Remember this was all designed back when Netscape 4 was a popular browser and any Javascript was considered exotic. Of course we have much better way to do things now, the WebForm approach broke down hard as soon as it encountered AJAX. But originally it was fine.
I should have added a disclaimer that I haven't worked with web forms in many years, so my commentary is probably not the most infomred. The ajax controls always seemed a bit ugly to me.
The real issue is the amount of "Black Box" in WebForms. A lot of the guidance is "Do it this way". Why? "Because". You really can't know what is going on behind the scenes. ViewState and the PostBack model are both parts of that. I used them for years...never knew how they worked or what was going on to make them work.
This in turn forced people to go to the MVP pattern to manage those systems, but I still find plenty of clients with code behind that is THOUSANDS of lines long. Everything in one file.
Also, many of the controls were very hard to style, with some very strange html in there.
Web Forms treats the browser as a dumb terminal. Everything is processed on the server. Javascript is relegated to making the boilerplate work. Almost nothing happens client side.
This is all fine if you are on the local network, but it ignores all the issues that go along with the network, such as latency. There is no silver bullet for latency. It's a physical constraint. The same goes for bandwidth. Throwing an UpdatePanel on the form doesn't solve the problem. Try using a Web Forms page on your phone some time with a 3G connection.
Right, Web Forms, and, really, HTTP and HTML, treat
the client like a 'dumb terminal', one with some quite
amazing capabilities but, still, 'dumb' in that the
Web browser is just displaying some pixels and the user
is just entering data via the standard HTML 'controls',
text boxes, radio buttons, check boxes, etc.
For my site for now, treating the user's Web browser
as a dumb terminal is what I wanted. One reason: There
is less, hopefully nothing, new for a user to understand
about how my user interface (UI) works.
But, yes, at times, a more 'dynamic' Web page could
be of interest.
Right, JavaScript running in the client's Web browser can yield much more 'dynamic' Web pages. And, with AJAX, still more can be done to have 'dynamic' pages.
But so far for my Web site, I have yet to write a single line of JavaScript. Somehow ASP.NET writes some JavaScript for me and sends it to the user, but I don't know what that JavaScript code does and hope not to care.
My guess is that if I want to
write some JavaScript somehow there is a way in
ASP.NET Web Forms for me to do so, i.e., maybe just
put my code in the file of JavaScript code that
ASP.NET writes and Microsoft's IIS sends.
You mentioned a phone: My Web pages are just dirt simple
and each just 800 pixels wide -- I hope that the pages will look good on nearly any device with a Web browser right up to date as of, say, five years ago.
there is a graph of 3G speeds by various vendors, etc. and about the slowest is 0.59 Mbps. Fine with me: One of my Web pages sends, including the JavaScript file, for about 400,000 bits. So, the page should download on the slowest 3G connection in about 1 second. If I take the extra blanks out of the JavaScript
ASP.NET writes for me, then the page should load a little
faster still.
At least at my site,
Web Forms is sending mostly just some HTML; maybe, I don't know, ASP.NET Web Forms is slow on the server, but I'm not seeing
just why what Web Forms is doing should be slower for the data transmission or the user's Web browser than
some other way of sending HTML.
You can't fault it for what it tried to be, though - a plug-and-play, drag-and-drop toolset designed to make web development accessible to savvy end-users and inexperienced developers, at least for what consitutes perhaps 80% of most businesses' needs - simple CRUD apps.
I think there's a lot of value in that, and for as much frustration as maintaining Web Forms apps has caused me (and will continue to cause me) I think it would be neat if they open-sourced it...what's to be lost if the alternative is to just let it rot into obscurity? I would totally fork the repo.
ASP.NET vNext (and Rosyln) runs on Mono, on both Mac and Linux today. While Mono isn't a project from Microsoft, we'll collaborate with the Mono team, plus Mono will be added to our test matrix. It's our aspiration that it 'just work.'"
Visual Studio a) will never run on Unix, and b) is not required to do .NET development.
I know people who do their .NET work in Sublime Text with a nant build chain. It's not my preferred method, but it works great for them. Hell, I know a guy that uses ASP.NET to host an Angular app, and to unify his build system, he has Grunt pick up the heavy lifting of running his MSBuild files whenever he does the pre-deploy steps for his JavaScript.
If you think you need Visual Studio to do .NET development, it's because you fundamentally don't understand the technologies at play and just wanted to say something provocative and witty.
The only reason I bring up Visual Studio is because most people don't even see the world out side of that IDE. "If it's not MS and it's not possible inside of Visual Studio it doesn't exist." That's how a whole lot of .NET developers, and .NET houses work -- and so that leads to my comment on VS.
> If you think you need Visual Studio to do .NET development, it's because you fundamentally don't understand the technologies at play and just wanted to say something provocative and witty.
On the off chance you're not just being knee-jerk and defensive because Something You Like is under fire--people think that VS is necessary because life is way too short to spend building something half as good as the other options in twice the time. I mean, could write Scala in TextMate, too, if I had the jones for it. But I could also not, and use IntelliJ, because I value having tools that are able to improve my productivity. (And decrease my frustration; by sticking with the JVM I have the benefit of not have to rely on Mono, whose GC, from experience, I do not trust in long-running processes; after spending a year owning a trivial Mono ASP.NET app that presented no end of troubles, I am very happy not needing to have a watchdog ready to kick it over when it undergoes its daily spaz-out.)
Xamarin Studio is not an acceptable product, either. I've been trying to use it for a couple weeks now and about ready to pitch a computer out a window--the basic functions of editing code are magnificently broken and have been for a long time. Random phantom line breaks in the editor that aren't in the code file, bad auto-indenting, phantom error highlighting, no partial-build error solving--and Visual Studio doesn't work on OS X. (To say nothing of the "you have to restart because XS forgot how to talk to xbuild" bugs...) That leaves the shitty bodges you well-actually'd your way into or not doing .NET at all. The latter makes a lot more sense for a lot more people.
I really enjoy C# and F# and I'd love to use .NET more if the frustrations in using it on not-Windows were not of such a magnitude. I am critical because it should be better and isn't. (Worse, Xamarin removed most reasons to contribute to the Mono ecosystem a while ago by making so much of the useful bits commercial, which is understandable--gotta eat--but also unfortunate.)
>"I mean, could write Scala in TextMate, too, if I had the jones for it. But I could also not, and use IntelliJ, because I value having tools that are able to improve my productivity."
I would argue that it would depend on the person behind the keyboard. I love VS but I happen to be working all day on vi at work and here I know colleges that are as fast or even faster than a lot of people relying on Intellisense. So my guess is that YMMV
I don't understand the thinking behind phrases like "too little, too late" about a company whose tooling will likely span the entire careers of a number of generations of developers.
I say that a lot and I feel like .NET is loosing relevance. Embracing open source and making Linux a first-class citizen in the eco system would be the only way for .NET to increase adoption or stay technologically relevant, and unfortunately its happening too slow.
Sure you can, but the technology of the future is not being built or run on windows stacks. You find it everywhere in the enterprise, yet almost every big new tech company that has come up in the last 10 years all rely primarily on open source technology.
Xamarin / Mono and Unity run pretty much everywhere. Unity even runs on WebGL, none of this is tied to windows stacks.
Also, Microsoft has a great startup programme with Bizspark, we built a company on it a few years ago that eventually ended up as part of a $700m acquisition
Yes. Most users of .NET is in the enterprise (as opposed to tech and startups) and Java has positioned itself as the go-to platform for big data analytics and processing.
I think this comes down to clinging to an antiquated product model. A lot of the technologies that are seeing rapid adoption are open source and driven by transparent communities. In some cases companies back them (e.g. cloudera, datastax, 10gen, typesafe).
And where exactly do you think most devs work? As far as startups go, and we may be usual, but we are a healthcare analytics company using Sql Server for medium? data and processing, with a pretty light .Net middleware/front-end.
Yes this might be true right now, but take a look at a lot of the tech startups are cropping up - humor yourself and look up a list of the tech ipos the last two years. They are overwhelmingly based on open source technology and they are also displacing or disrupting your traditional 'enterprise' businesses.
Even though C# and .NET has a huge developer following, .NET is losing ground to OSS within the top traffic driving sites. 10 years ago, people would build their MVP in .NET because it was the best technology around, but nowadays I see more people building new businesses and placing their strategic technology bets elsewhere (Java/Python/Ruby or Node).
A lot of these developers don't want to be married to the Windows eco-system, for a variety of reasons. Microsoft cannot continue to thrive on the sole basis of it being the only game in town anymore. So all in all what I'm trying to say is I don't think the long-term prospect is looking great.
When company X that the hivemind dislikes makes it to the news, they are often criticized with not open sourcing their product Y. When they finally open source it, they are met with "Too late!". Sometimes there is no winning with people who have already made up their mind.
>Too little
Really? Its MS, their core products and the open source we are talking about. Heck they even open sourced it under a liberal license.
Too little? Biggest change for ASP.NET from release of ASP.NET!
"Too much of pain" was the first (and last) thing I said when trying to configure ruby on ubuntu. Or tried to download some app and run it.
I guess all those thousands of Rails apps running on Ubuntu had some kind of magic or secret knowledge to get that working. Going open source and posting some libs on Github is 'Huge'? That's kind of funny considering how much is out there, top notch, and did it way before MS did, and yet, it wasn't "huge" for them.
I think Hudo's point is that experience with technologies is subjective. I loathe Windows after having been comfortable in terminal, and I loathe Eclipse after having been comfortable in VS.
I've gotten apps working on .net and ubuntu -- configuration was a drag in both, but it works, and isn't the entire basis for loving or hating a platform. So what I'm saying is I agree with your comment.
The catch here (and point) is why should you have to switch from VS at all? If it's a real source code editor shouldn't it handle Java, Clojure, Haskell, Python, Ruby, JavaScript, etc all just fine? Some of the oldest and free editors do and do it well. I realize MS has an agenda (perhaps) or they've de-prioritized any of these features into oblivion -- but who are they serving, I certainly didn't feel it was me even after giving them a lot of $ for VS.
Other editors certainly 'do it', but they're so embarassingly bad that a huge amount of non-VS devs resort to using text editors instead of dealing with the clunky IDEs.
There's definitely some places where this may be true, but there's a lot of locations and industries where .NET is firmly planted and not going anywhere anytime soon. For instance, Houston and the oil industry here (not just the big companies like Exxon, but the massive ecosystem surrounding petroleum). It may not be about winning new industries, but gaining the benefits of open source where they already are.
I believe one of the big changes in ASP.NET vNext is the ability to deploy outside of IIS.
Other types of projects, notably WebAPI, have been able to easily deploy outside of IIS for years. I actually just converted two WebAPI projects to self-hosting. It took about a day, which is not bad considering that includes time to learn what I was doing and reworking an existing deployment process.
Nope, I'm not a fan of Php either actually. Mostly I rock the Java, Node, Clojure, Scala, *nix (mac), C++11 on Ubuntu and Mac with JS+Angular. I guess that's the stack mate.
This entire version of ASP.NET is specifically about modularizing the stack and breaking it's dependence on IIS so it will work well with Mono + Apache and Nginx. That's quite literally why this version is being written, as aside from MVC, ASP.NET as an IIS interface technology has been feature complete for years and wasn't in line for any major changes.
As a person who likes C# and MVC but doesn't like Windows, I've hoped for this for a long time. The fact that Microsoft is going to include mono in their tests is awesome. It's like a genie granted me a wish.