Posts tagged with alt.net
One of the cool things about living in Seattle is the sheer number of passionate developers around. Whether you’re dropping into offices, heading across campus for lunch, meeting downtown for music and beer or, in my case, last month taking a Saturday out to participate in ALT.NET Seattle, there are ideas, enthusiasm and discussions with great developers to be had everywhere.
The ALT.NET event was interesting. If you didn’t already know the name encapsulates:
- the desire to improve the art, process, individual and product
- the understanding that the right tool for the job doesn’t always ship with the .NET
The event follows the same minimal up-front planning modern development practices enjoy relying on talented people and simple structure to achieving something great in a short space of time.1
This open-spaces format involves a small deck of cards to write topics you’d like to talk about and a board with rooms and times to use. I was surprised at how well the event unfolded (bar one session that veered off-course), given our unplanned attempts at the Guernsey developer group always resulted in five people having dinner in a bar :)
I had an enjoyable day, and my thanks go to Brad Wilson (ASP.NET) for driving and listening to my nostalgic 8-bit discussion with fellow Brit Ade Miller (P&P) who previously worked at Future Publishing (Your Sinclair magazine). I’m now messing around with a .NET based Spectrum emulator I started years ago, and I’m going to blame him for that.
The best news is that there are more events planned for the coming months:
- January 17th - location TBA
- February – provisionally the 7th, location TBA
ALT.NET Seattle 2009 Conference
Registration will open on Tuesday, 6pm (GMT-8), attendance is free, and spaces are limited - so get in quick!
1And as either Glen or Brad said with a nod to the end-of-credits bit in Ferris Bueller – “When it’s over it’s over. Go home already.”
Long-time friend, fellow co-host of the GSDF and the coding genius behind the open-source Ogre3D engine Steve Streeting has written an interesting piece on Open source adoption; countering the fear and doubt. I have no doubt that this was fueled by a lengthy discussion last night in the Ship & Crown pub – a common ritual after our GSDF meetings.
The reasons why I adopted .NET as my primary platform despite being tied to a single-supplier are:
- Ease of deployment & set-up
- Low resistance to adoption
- Great tool integration
- Official & community support
- Love for C# and the CLR
The ALT.NET movement
Many .NET developers are reluctant to look wider afield but this is not exclusively the case and a person focused on the .NET platform but open to selecting beneficial alternatives to the Microsoft prescription is exactly what the Alt.NET moniker was coined to encapsulate.
SourceForge lists over 6,000 open-source C# projects alone and many well-known open source Java & PHP projects have made their way to the .NET platform. NHibernate, NUnit, NCover, Spring.NET & DotNetNuke alongside new .NET developments such as xUnit.NET, SubSonic, Subtext etc.
Best of breed
Where a non-Microsoft option is functionally superior or more cost effective I will consider it whether it is proprietary or open source.
I do not however select a solution simply because it is considered the “best of breed” at that particular moment. Integration, training, availability of support and experienced developers, deployment, cost, barriers to entry and road-maps must be taken into account.
Given that Microsoft provide the .NET platform anything ‘in-the-box’ scores highly in many of these areas.
Sometimes a non-Microsoft solution comes out on top or there is a compelling reason to adopt it anyway. This is why my toolkit already contains Subversion, TortoiseSVN, AnkhSVN, Reflector and NUnit.
Robust alternative projects
I have concerns about longevity and support on projects from companies and hobbyists regardless of whether they are open source or proprietary.
NDoc, CVS & NullableTypes are three I’ve used which died when an alternative commercial or open source project gained more momentum and SourceForge is seemingly littered with thousands of dead projects.
If a project you rely upon dies you have one of a number of options:
- Migrate to something new (gained little from open source)
- Fix bugs and problems yourself (time spent working outside your business domain)
- Have a support contract with somebody else to work on it (single-supplier scenario?)
Competition is important
Competition is important but I can not, in a professional capacity, recommend to customers something that I believe is less suitable in the interest of keeping the competition healthy.
Confusion about choice
I hit this one first hand developing my final-year degree project which required development of a web site in Java.
The number of choices for Java was incredibly confusing despite knowing the syntax. J2SE or J2EE? JSP, Struts, Spring or another servlet package? What about the database and ORM? Application server? What versions work together? What overlaps? Would I be able to get experienced developers? If not how long to train them up?
.NET has many options too but I can start with the .NET Framework and get right into solving the domain problem. If the going gets tough I may have taken a wrong turn and need a different solution. That could involve choosing an alternative component or framework but now I’ll know what problem I’m trying to solve when I go looking.
Developers on complex projects felt that WebForms wasn’t ideal – it is hard to maintain, the output bloated with leaky implementation (ViewState) but it serves many developers well enough.
Open-source projects such as MonoRail addressed this taking cues from Ruby on Rails. Microsoft acknowledge this and add a similar MVC framework going so far as to support additional engines and components allowing elements of MonoRail to be used. Those guys could drop the glue required to get their engines into the pipeline and just concentrate on engines if they wish.
What works for me
Stay small and focused until you feel friction.
Friction isn’t always technical or immediately obvious. It might be future plans and it’s often people. It might be what isn’t there and will never be.
Time lost on friction is not spent developing your domains features.
If another solution causes less friction, use it but don’t underestimate unknowns.
I guess that’s just being pragmatic.
Anyone who’s tried to develop large complex web sites with ASP.NET has likely run into many problems covering the page and control life cycle, view state and post backs and subsequent maintainability including the difficulty in creating automated unit tests.
Microsoft, taking a cue from the popularity of Ruby on Rails and subsequent .NET related efforts such as MonoRail, are embracing the model-view-controller (MVC) pattern and developing something more suited to web development than WebForms which aimed to make web development as similar to Windows development as possible (despite the major underlying differences in architecture).
The prototype, currently named System.Web.Mvc
or Microsoft.Web.Scalene depending on where you look, is headed by Scott Guthrie with both Phil Haack and Scott Hanselman involved (sounds like a dream project and team to be involved with) and a preview release (“drop”) is due within the coming weeks.
Guthrie and Hanselman presented Microsoft MVC at the ALT.NET conference which revealed some interesting details buried in the video, my rough observations and notes based on the prototype they showed follows:
- Don’t repeat yourself
- Highly extensible & pluggable
- Use generics to achieve strong-typing without code generation
- Good performance, fast enough for large-scale sites
- Separation of concern for maintainability
- Clean URLs in and out
- Clean HTML
- Interfaces used extensively
- No sealed classes
- Plug-in points for view engines (e.g. MonoRail’s NVelocity, Brail)
- Support for Inversion of Control (IoC) engines (e.g. Windsor, StructureMap, Spring.NET)
- Runs on the .NET 2.0 CLR
- Some helper classes require .NET 3.5 (extension methods)
- Normal Request, Response objects (via interfaces for mocking)
- Does not support postback
- Supports MasterPages, DataBinding, CodeBehind
- Existing .aspx’s are blocked using web.config
- Solution templates for web project and unit testing
- Full designer & IntelliSense integration
- Route -> ControllerFactory -> Controller -> Action -> ViewEngine -> View
- Routes can be defined dynamically and support RegEx URL matching
- IControllerFactory pops out the required IController
- Routing is case insensitive by default
- Support REST, blog engine, Jango style mappings etc. default is /controller/action/parameters
- FrontController style
- IController exposes:
- Execute(IHttpContext context, RouteData routeData)
- IViewEngine ViewEngine property
- Some implementations available, all with virtual methods:
- ControllerBase (adds dispatching)
- Controller (Populate parameters into
(Populates parameters by making ViewData type T)
- [ControllerAction] attribute to expose methods as actions (secure default behavior by not exposing helper methods)
- Attribute for output caching
[ControllerAction(DefaultAction=true)]to override default method of Index
Parameters (to the controller)
- Automatically parsed where a TypeConverter exists
- Future versions will support more complex serialization of types
- Can be nullable – use null coalesce operator for defaults
IView LoadView(string viewName)
- Implementations include:
- virtual void RenderView(object data)
- Implementations include:
- ViewPage – pick up parameters from
ViewData[""]in conjunction with Controller
pick up parameters from ViewData as type T in conjunction with Controller
- ViewPage – pick up parameters from
- Clean HTML generation (have they sorted out the id mangling by MasterPages/INamingContainer?)
- Static HTML class supports Link, PagingLinks and Url methods
- Map to action names using Lambda expressions to ensure follows refactoring, e.g.
string url – Html.Link<ProductController>(controller =>controller.Edit(4);
- Is there a way to follow the default action?
- Pagination extension methods extend IQueryable for getting pages of data (skip, limit)
- Pattern for view-update-view cycle
- Object property to form field id mapping available and pluggable, allows
- Easy to write tests by using mock objects (request, response)
- Unit testing framework project (NUnit, MBUnit, xUnit.NET)
- What’s with ScottGu’s nametag, can the show’s organizers not afford anything more than a Post It note?
- What cool software is Scott Hanselman using to do the screen-cast video/zoom/overlay/highlighting?