Why to choose CastleProject, Mono and related technologies

Some people ask me why to choose CastleProject to develop .Net applications or how much enhanced/completed is the Mono implementation of .Net. Well, I believe that these frameworks are extremly powerful and I will give you a lot of reasons to use them. Futhermore, this is based on my experience as development manager at Shidix in the past two years.
I had to decide what technologies to use to complete the deadline of some important projects, in terms of reliability, learning curve, licenses costs, maintenance, multiplatform capabilities, business strategy, software quality, and a lot of parameters.
I believe in those technologies becase we are building solid software, Im happy with our solutions.
Alongside this time I've also developed software using other technologies like Java (Hibernate, Ant, Eclipse and NetBeans 5 (its Swing editor is the best I've seen for Java)... ), PHP, Perl and Python so I can give you reasons with a reasonable background.

CastleProject contains several parts. You have MonoRail for web development which is a Ruby on Rails port on .Net, you have ActiveRecord as an ORM which is based on NHibernate, you have Inversion of Control to develop enterprise solutions and a couple of nice facilities more.
Within MonoRail you can choose different View engines to lessen the web design efforts and there are a couple of nice helpers to make AJAX based sites straightforward besides html generation, localization,... Here you have several reasons to use MonoRail instead of ASP.NET directly (thanks to knocte for the links):

The main View engine, called NVelocity is a port of Jakarta's velocity so it is easy to gain Java developers from its different MVC frameworks.

ActiveRecord is a layer on the top of NHibernate. If you are a seasoned Hibernate developer you know that sometimes it is not confortable to struggle with sessions and transactions, for example if you are passing in a relational object from one window to another (in your desktop application) making database changes in both, you have to pass in the session instance as well to avoid sessions conflicts an so. Furthermore you need to write xml for object mappings.
ActiveRecord simplifies the work a lot by mapping properties and relations using .Net attributes and gives you all the NHibernate power. Another important key is that the great NHibernate hackers like Ayende are working in ActiveRecord so you get the latest features and bugfixes, i.e currently Ayende has implemented the ActiveRecord Generics support to increase the performance.
Mixing MonoRail with ActiveRecord makes the web easy, solid and it is a nice experience for developers; the code is clean.

Some great hackers like Marc-André, are developing important addins to the project like the database migration tool and the generator. We at Shidix have developed a Perl tool to generate ActiveRecord models from an UML diagram and then I helped Marc-André a little bit to get the web site generator working in Mono, so currently you can generate a web site application from UML even with an AJAX interface!!!. It really lets you gain time, the scaffolding is fantastic. To be honest I must say the I just sent a few patches to Marc, he did the whole work, he is the author, is a talented developer 😉
CastleProject has been developed on .Net although I use it on Mono and it is integrated on MS Visual Studio, don't worry about that. It is pretty easy to make an add-in for MonoDevelop as well, a few months ago my friend René Martín and I started the Castle add-in and we got it working in three hours. Well, it is not complete but Im considering to finish and to release it, just need some spare time.
Finally there is another important reason to trust in Castle. Castle's father and leader (Hammet), which is a seasoned Java and .Net developer has launched CastleStronghold, a company founded to provide professional support, consulting and development to companies using the Castle Project to build their next generation of enterprise applications on .Net or Mono. Congratuluations Hammet !.

And now lets talk on Mono. Free software matters, is the right way to avoid reinventing the wheel everyday and it is exciting. Sun is open sourcing Java nowdays so free software is not a joke. Think in free software like in a free bird, don't think in free beer :-).
How multiplatform is your .Net?, the idea behind .Net is incredible maybe the greatest development technology since Java and the way Microsoft published the ECMA standard was a wonderful decision but the thuth is that Microsoft .Net is not actually multiplaform. People from Ximian (now Novell) are making an impressive work implementing the ECMA standard and .Net 2.0 implementation is almost complete. Generics implementation were finished a long time ago. Im using generics in my applications very well indeed. There are important third party companies involved in Mono development that are researching and releasing high quality software, i.e MainSoft and their Grasshopper:

That presentation was on the last Mono developers conference in Boston a few weeks ago. MainSoft is a very interesting company to help you porting your .Net applications to Java and more.

In Mono you have the new MonoDevelop IDE. It has a spectacular GUI designer for Gtk# applications based on Glade. I've developed Java Swing applications using NetBeans 5, Windows.Forms applications using SharpDevelop and Visual C# and Gtk# applications using MonoDevelop and my favourite environment is Gtk#, the MonoDevelop's "Stetic" GUI Designer (video). In Gtk# you don't have to worry about resizing events, nor appearance, nor multiplatform because Gtk is multiplatform, you can run Gtk# applications on Windows and MacOS. Anyway the Windows.Forms implementation on Mono is almost complete but I prefer Gtk# for several reasons that I am not gonna write (Im tired 🙂 ).
You can see the current status of the Mono Project on these videos:

Thank you very much to my friend Jeremy Arnold for help me with my english 🙂

Success story: United CastleProject community friends

The CastleProject community, as any other free software project contains members from all over the world. It is fantastic to share knowledge, opinions or even jokes thru the mailing list or irc channel with developers from different countries and cultures.
Some months ago, I met my friend Jeremy Arnold (Charlotte, NC). Besides we are both Castle users and sometimes contributors, I am studiyng english in depth and he is studying spanish, so the communication is funny and very productive when we talk by jabber or skype. Jeremy had a contract with a cars company in the US and needed help with a Windows.Forms application using Castle.ActiveRecord as the ORM so we thought that my Boxerp framework could be useful for this.

Some weeks ago we started working together in the project. He designed the relational models and I designed the responsive client architecture and the GUI. It has been profitable for several reasons and one of these is that now Boxerp also supports a responsive client architecture for Windows.Forms besides Gtk# which deals with threads and remoting communications.
The performance has been a challenge and to deal with lazy collections and threads has been funny :-). I need to investigate in depth about some issues I've found working on it. To use SharpDevelop and MS Visual C# has been nice as well. I have learned a lot of things regarding NHibernate and ActiveRecord, Windows.Forms (the BackgroundWorker, DataGrids...), performance issues, pitfalls, concurrency...
The project is working and we are happy with the final solution.

I hope to commit changes into Boxerp svn as soon as possible to finish the first administration module. I also hope that Jeremy joins the Boxerp development team 😉