Microsoft Open Sources their Entity Framework ORM
hanselman.com
hanselman.com
I believe if you are building mobile clients and need to target more than one platform you should do your UI with the native APIs on each platform, but should use something like Mono to achieve as much code-reuse as possible for the lower layers of your app.
Also, does anyone know how to develop for MonoTouch using Visual Studio? I want to like SharpDevelop but I just can't... and of course, VS doesn't run on OSX.
(I haven't tried SharpDevelop in over a year- it might be dramatically better these days, but I don't think so)
Apparently you can do some development, but you can't compile in Visual Studio.
http://escoz.com/blog/developing-with-monotouch-on-windows-a...
So you get Visual Studio, Intellisense, tools like Resharper, but you can't quite build, because of missing elements. The build process would be to swap over to the Mac side to build and simulate.
Not perfect, but it's nice to know it's there.
Be sure to check out MonoDevelop, which has a few full-or-most-time paid developers behind it: http://monodevelop.com/Screenshots
http://lists.ximian.com/pipermail/moonlight-list/2011-Decemb...
>
> Some of the other work I believe is a gold mine of technology,
> in particular our media pipeline, the rendering/layout code and
> the animation framework. Perhaps someone would find a use for
> that code in the future, we currently do not have plans to
> continue developing Moonlight.
>
> - Miguel de Icaza
>I have never been able to do it against MySQL and have it work, on Mono or .NET runtime.
ScottGu, Hanselman et al. really deserve a lot of credit for the big cultural changes they've caused to allow a lot of this.
They deserve big credit. But devs appreciate open source more than other consumers. it's hard to see how open source would work for, say, the parts of Microsoft that make Windows, Office or Xboxes.
it's easy for devs to think of Dev tools as Microsoft as a whole, but they're not the biggest part of it, and are not the ones who bring in the most money (I found this link: http://www.tannerhelland.com/3958/microsoft-money-updated-20... ).
Like it or not, the MS Windows division can therefore boss the dev tools division around (and have in Windows 8, effectively dictating the direction of .Net and WPF).
They are (finally) making the right moves and doing it in a consistent and open way. Any Microsoft insiders know who is driving all this change? ScottGu? Steven Sinofsky?
I still think it's a long shot. The best development platform for .NET is Visual Studio and Windows. And the "cool startups" all use Mac OS or Linux.
.NET has been sold as an enterprise platform since the beginning. That's what it's thought of by most people, and I don't really see this changing anything. Windows Phone is way late to the party and isn't going to do anything significant in the market. Microsoft will continue to be primarily a platform for building enterprise-type CRUD apps.
Their Windows/WP/UI projects are violently closed source, almost all cross-platform Rich/UI initiatives have been killed since Sinofsky has taken back the helm. Personally they should do all C#/.NET devs a service and provide better integration/code-reuse with MonoDroid/MonoTouch, but as they don't see it in their best interest they're pushing for platform-lockin. Which is a strange play when you're hopelessly behind the incumbents.
This is starting to be a real problem for .NET devs now (since MS is losing their influence) as they become pawns in Microsoft's platform strategies, whilst we (C# devs) miss out on the most exciting platforms Microsoft doesn't want you to develop for, e.g: iOS/Android, NaCL, Unity3d, RaspPi, etc. We're just lucky Mono exists which runs on all these platforms.
More details: http://www.winsupersite.com/blog/supersite-blog-39/windows8/...
http://dougseven.com/2011/10/24/language-choice-in-windows-8...
Just because it uses JS doesn't mean its portable! It has proprietary APIS + hooks making it non portable.
Since you've mentioned it, Mozilla isn't touting to use XUL for "open" cross-browser apps - although XUL itself, unlike anything Metro, is open source and does run cross-platform. Mozilla is even deprecating the use of XUL for its new Firefox OS (Boot to Gecko) in favor of using pure HTML5 instead. Maybe MS can work together with Mozilla and come up with a common API?
Where did you hear that? everything I've heard is the exact opposite:
http://www.geek.com/articles/mobile/a-deep-dive-into-mozilla... >> Everything is HTML5 >> The core to the Boot to Gecko project is the web. Everything you see — right down to the power icon and network status information — is generated by and displayed with HTML5. The icons for the apps, the apps themselves, and the notifications the apps generate… all HTML5. Even the Dialer and the Settings for the device are handled this way.
http://en.wikipedia.org/wiki/Firefox_OS >> Firefox OS (formerly Boot to Gecko, B2G) is an open source operating system in development by Mozilla that aims to support HTML5 apps written using "open Web" technologies rather than platform-specific native APIs. The idea is essentially to have all user-accessible software running on the phone be a Web app that uses advanced HTML5 techniques and device APIs to access the phone's hardware directly via JavaScript.[2] It initially targets Android-compatible smartphones.
The difference is Firefox OS is building as much as they can (everything?) with HTML5, Whilst all Metro's advanced functionality is hidden behind proprietary APIs - The comparison of "open-ess" between the 2 is not even close.
Checking out the Mozilla Docs at https://wiki.mozilla.org/WebAPI it appears that these "privileged" APIs are extensions, as they should be. For example, navigator.fm.antennaAvailable is to control the FM Radio.
The only one talking about 'bad' is you saying it's 'not bad'.
Sure it is if those browsers are cross-platform. I doubt the Windows 8 APIs are cross platform.
I'm not sure Plenty of Fish is a great proof either (that .NET is good for a start-up) since it was built by just 1 man, who just uses Response.Write http://highscalability.com/plentyoffish-architecture/:
>> In the process of getting rid of ASP.NET repeaters and instead uses the append string thing or response.write...
Even as a long time .NET developer, I don't believe .NET is optimal for Internet Start-Ups. Most of the pro-web talent are in Ruby/Python/node.js camps where they enjoy first class support of all the popular web DSL's (e.g. less, sass, jade, handlebars, etc). As well as all the bundling, optimization and minification tools which were available for years in other platforms and have only recently been a supported option in .NET with System.Web.Optimization. The pro-web (Single Page App) community is relatively non-existant in .NET. E.g. none of the showcase apps on http://backbonejs.org (the most popular SPA JS fx) are in .NET.
The ASP.NET website packaging model doesn't scale (productivity-wise), since the larger the website becomes the slower build/iteration times get - which is especially important for start-ups. I do believe typed languages are better suited for typed back-end services - I just no longer believe in them for fuzzy development tasks like UI/HTML generation, automated scripts, etc.
.NET is the only way I would personally want to go when targeting large enterprises with products.
I wrote a little bit about the differences here :) http://blog.stackoverflow.com/2012/03/enterprise-vs-consumer...
ZocDoc was the company I was thinking of that uses .Net.
[1]: http://www.quora.com/What-is-the-technology-behind-JustinTV [2]: http://highscalability.com/blog/2010/3/16/justintvs-live-vid...
In the game industry, the game development tools which used to be developed in C++/MFC are now being coded in C#.
Microsoft is hiring compiler developers to implement native code compilation in their C#, if you search their careers portal.
Before Mac OS X, open source was also unheard of at Apple, if it wasn't for their despair at the time and the NeXTStep team, I am not sure if Apple would have so much open source projects.
When you're a cloud provider it makes sense to appear "more open" and support as many technologies as possible == more customers - which is good from the broad developer community as we would have never have seen their node.js on Windows support otherwise.
http://code.google.com/p/dapper-dot-net/ <br/ > https://github.com/robconery/massive <br/ > http://www.toptensoftware.com/petapoco/ <br/ >
Both are "heavy-duty" orms, while those 3 are more lightweight. My personal view is that for writes and maintaining a domain model, NH (or EF, but I prefer NH) is a good option, and when you need performance or just want a light layer to ease the mappings from sql to objects, micro-orms are the best option.
I do miss using Linq to query the db, but not enough to make me go back. I use EF in my main job, and while it does the job, sometimes I find myself being constrained by the framework. That's not an issue with EF so much as it is an issue with any kind of ORM.
I do see where there could be some ways to improve querying the database where you're doing a lot of joins or returning data that is not limited to the table design at all.
Basic queries do work, but not ready for production use.
I was able to put in full text function support in NH HQL rather easily in an app and I don't see that ability in EF. I'm working on a desktop application and the ability to precompile the dynamic proxies would help the startup time of the application. I would love if I could do that in EF, I've done it before in NHibernate.
I've noticed you've made great strides with the latest versions, and Microsoft support here in Uruguay has always been great (in particular Pablo Garcia which now moved to Chile).
Keep up the good work :) .
Edit: I'm not on the team, but we're doing one of our main new projects with EF v4.
Considering Team Foundation Service, project Kudu/Git deploy on Azure etc. it makes sense to think that Microsoft are making a play to seriously take on GitHub and Atlassian, so that they're the one provider that owns an entire software ecosystem, end to end.
Either way, I don't think that the EF team would have had a choice on where to host it...
The benefit of Micro ORMs is that they bind to clean re-usable POCO's (which by nature can be re-used as DTO's, ViewModels, etc).
Most of them also add features as DRY extension methods over the underlying ADO.NET System.Data.* interfaces, so there's no magic behaviour or heavy abstractions happening underneath, letting you add new features orthogonally (by adding your own DRY Extension methods in your own project), and you always have direct access to ADO.NET IDbConnection so you're never restricted when you need it.
http://blogs.msdn.com/b/adonet/archive/2012/02/14/sneak-prev...
(Disclosure: I work at Microsoft)
But I guess it doesn't matter when you're still be the most popular .NET package http://nuget.org/packages (580k) whilst remaining more than a factor of times slower than the competition - that's the .NET OSS ecosystem for you.
PS: A lot of frameworks are actually setup to handle the least important case first, handling large result sets are generally more important than the overhead for tiny query's. It's nice to be able to for things to work so a query that returns 1/2 million rows still returns in 1/100th a second and you can start paging through that result set even if the behavior adds overhead in the simple case. Chances are there is a shortcut if you only want 1 result just look for .first or a similar shortcut.
Like most heavy ORMs it's not obvious what SQL a complex LINQ statement emits where it's common to fall into "pits of failure" where it converts to multiple sub selects or the worst case N+1 queries. I'm personally not a fan of Heavy ORM's their an abstraction over a simple DSL and EF remains unnecessarily bloated and complex.
BTW we do measure + profile, and EF is amongst the worst performing ORMs out there. Please provide benchmarks to the contrary?
PS: If you have demo's that EF adds linear overhead feel free to show it but I have pulled 1,000 rows in under 1 second so I suspect your have messed up your setup somewhere.
Have you tried a Micro ORM?
Partly as a developer who enjoys open source software, but also in part because decisions like this makes life much easier, when you suggest using open source in some a large corporations, where they have a very conservative approach to open source.
Talk about getting a foot in the door.