I keep asking Nikhil about open sourcing Script# and he keeps ignoring me
I'm going to keep using it for now. Nikhil does at least release new versions semi-regularly. Please contact him yourself as well to maintain community pressure to open source Script#!
So I reckon phase two is to use my tier-splitting macro to enable certain model methods to be decorated with [RunAtServer] attributes.
The macro would do all the plumbing to call the server and execute the model there. This would allow a totally seemless Model class to be written. With the client part ending up in JavaScript and the server part being C#.
Seeing as client-side MVP is viable, the next step would be create a framework to reduce some of the boiler-plate coding required. For example, the View class that basically maps to and from DOM elements could probably be code generated.
Thanks for the link to ProMesh.NET, I like the use of attributes making the whole process much more declarative. I'll certainly be considering similar approachs when expanding my client-side MVP framework.
Quite simply, the best video I have seen for a while on Channel 9!
Quick, snappy, fun and interesting. I look forward to more in this style.
Keep hunting down the devs!
Excellent video! I downloaded the C# code and took a quick look. Good work with the runtime proxy generation. Geez, it must have been painful writing all that emit IL code!
I'll take a look at writing some Nemerle macros to make the syntax nice. I'm thinking macros along the lines of:
Comments
C9 Lectures: Dr. Erik Meijer - Functional Programming Fundamentals, Chapter 1 of 13
Re: Expressions everywhere
You should check out Nemerle if feels very much like C#, but with everything (within a method) being an expression.
Doug Hauger: Inside the Windows Azure Platform Business Model
Charges for "compute" are applied even when an instance is idle. So a website that does nothing will cost $86.40 per month!
There must be a fairer use model possible. Google App Engine seems to manage it.
Brian Beckman: Don't fear the Monad
Will we ever see a Microsoft backed version of Haskell for .NET?
Mobile Model in MVP web app
I'm going to keep using it for now. Nikhil does at least release new versions semi-regularly. Please contact him yourself as well to maintain community pressure to open source Script#!
Mobile Model in MVP web app
The code is now online here:
www.aboutcode.net/files/SplitModel.zip
You will also need to install my code generator tool. This is used to generate code from XML files.
www.aboutcode.net/files/Equin.CodeGenerator.zip
Client-side Model-View-Presenter
So I reckon phase two is to use my tier-splitting macro to enable certain model methods to be decorated with [RunAtServer] attributes.
The macro would do all the plumbing to call the server and execute the model there. This would allow a totally seemless Model class to be written. With the client part ending up in JavaScript and the server part being C#.
Client-side Model-View-Presenter
Thanks for the link to ProMesh.NET, I like the use of attributes making the whole process much more declarative. I'll certainly be considering similar approachs when expanding my client-side MVP framework.
Functional ADO.NET
A good approach would be to have an overloaded method. One that passes the reader, another that passes each data record.
I hope people find this pattern useful and adapt it to meet their needs as you have done
Also, does anyone know if this pattern has a name?
HanselMinutes on 9 - #1 -
Quick, snappy, fun and interesting. I look forward to more in this style.
Keep hunting down the devs!
Lap around ASP.NET Ajax Demo from JAOO 2006 Conference, Denmark
Anders Hejlsberg - Lang.Net 2006 Compiler Symposium
C#3.0 is looking sweeeet!
Programming in the Age of Concurrency: Software Transactional Memory
Excellent video!
I downloaded the C# code and took a quick look.
Good work with the runtime proxy generation. Geez, it must have been painful writing all that emit IL code!
I'll take a look at writing some Nemerle macros to make the syntax nice. I'm thinking macros along the lines of:
foo = atomic(Foo(arg1, arg2))
<==>
foo = XAction.MakeFactory(typeof(Foo)).Create(arg1, arg2) : Foo;
-------------------------
atomic(foo.Bar(x,y,z))
<==>
XAction.Run(XStart(foo.Bar), x, y, z);
--------------------------
retry
<==>
XAction.Retry();
--------------------------
y = attempt { Get1, Get2 } (arg1, arg2)
<==>
y = XAction.Run(XAction.OrElse(new XStart(Get1), new XStart(Get2)), arg1, arg2) : int;
y = attempt {Get1, Get2, Get3} (arg1, arg2)
<==>
y = XAction.Run(XAction.OrElse(XAction.OrElse(new XStart(Get1), XAction.OrElse(new XStart(Get2), new XStart(Get3)))), arg1, arg2) : int;