In my continued quest to use Ruby to build my .Net apps, I have been successful using Ruby’s “sh” command to call the C# compiler (csc.exe) and successfully build my assemblies. I still have not gotten it to use MSBuild, but I’ve been lazily trying to use the .csproj files generated by Visual Studio, but it doesn’t seem to work. MSBuild acts like everything worked, however no files get changed. I guess I’ll actually need to take a look at building it with MSBuild and then incorporating that back into a Rake task.
So I’ve started down the path of setting up continuous integration (CI). I’m working on a project now for a client that wants to be involved with the process as much as possible. The CI with a few other hacks will allow him to use the current working version of his website at anytime.
I started looking into some CI products and ended up watching a screencast on CI Factory. I was amazed at my initial reaction (yuuk!)! I’m not knocking CI Factory directly, rather the fact that I need to configure a product that will configure a suite of products for me sounded like something that would be overly complicated to maintain / use. This is not what I need to stay agile and keep a client involved.
So in my tinkering with RoR, I ran into CruiseControl.rb. This product was easy to install and I already had the required dependencies from my RoR work. It works out of the box for RoR, but needs a little love for building .Net apps.
I started out by deciding that I was going to continue to use MSBuild for building my projects and use CrusieControl.rb to do the CI and other tasks not including the actual build. This would allow me to continue to work in Visual Studio as normal without changing a development process already underway.
So far I have integrated Rake into Visual Studio, created a rake file in my solution and created a task to build my projects. It works great from the command line (rake dotnet_build) but when calling from CruiseControl, it throws an error that is probably complaining about not having resgen.exe in the path – that will be taken care of soon and I plan on publishing a full post on each step in the near future.
I am very excited by the possibilities that Rake and Ruby bring to my .Net development. I’m already thinking of how to integrate this with the new IIS 7 API to have a Capistrano like feel to deploying my ASP.Net apps.
Like a couple of aging heavyweight fighters, Java and Microsoft have been slugging it out in the enterprise web application market for some time now. It seems like the fight continues round after round with no real winner in sight. But there have been some very interesting things happening in the last month that seem to indicate that the conditions may be right for Ruby on Rails (RoR) to slide in take some of the “Enterprise” market share.When I refer to “Enterprise” I am most certainly pointing at the plethora of programming shops where they’re sticking to ASP.Net or JSP and Servlets. I have worked in the former for the last 8 years and have worked with external vendors and service providers that were the latter. Many of the platform discussions came down to the same points. Funny thing is, they seem similarly bloated at times for solving some of the same everyday problems. If you want to see a good comparison of Ruby to C# (Java guys will feel at home too), check out Softies on Rails.
For the Java environments, JRuby has hit another milestone and they are confident enough to hang it out there for RoR developers to give it a shot. Building a Ruby interpreter on Java instead of C allows you to extend the Java classes, deploy Rails applications to a web server as a WAR file, and provide similar portability to RoR as Cold Fusion enjoys.
For the Microsoft environments, the IIS Team announced they have implemented Fast CGI for IIS 7. This will make RoR on IIS more efficient and easier to deploy. Rob Conery has the drop on this as well as instructions for how he was able to make this work. Rob is the founder of a framework for .Net inspired by Rails called SubSonic and if you write ASP.Net 2.0 applications, you need to take a look.
Both of these recent events seem to indicate that in organizations that already have a significant amount of infrastructure built up in either Java or .Net will not have to do much at all to make Rails run in the same environment. I think this will lead to greater adoption because it will be faster and easier to deploy and configure, making it an easier sell to your development manager, VP, etc., or for you to sneak it in.
I’ve recently been planning an open source project for this summer. I was approached last year during the holiday season by a woman on a forum with a story about her friend with Multiple Sclerosis who had lost most of his ability to speak normally. She didn’t have any money and was taking this guy into her home because he had no where else to go. She was looking for donations to buy a laptop to run a free application built for a Mac that would allow him to type and it would speak for him. The only problem is that the original developer of the application had long since passed away and the source code was not available.
So when I heard about this story, I thought to myself there was something more I could do than pitch them $20 – I could write them an application. They could get a PC laptop for a much cheaper price and really make the donations she received stretch further. I started into motion by getting a CodePlex project set up and creating a very small demo to send to her. They were excited and said the new application would be very helpful and encouraged me to continue with development.
Now I kicked back into planning mode. I thought that it would be important to do this the right way and not just slam out some code in a day or two and send it their way. As the week progressed I got a message from the woman that someone had offered a sweet deal on equipment similar to what Stephen Hawking has. She would no longer need my application and she was thankful for the week and a half that I had worked on the project. This information combined with the fact that it was the holiday season and I had plenty of other things fighting for time in my schedule caused the project to be shelved indefinitely.
Some time later, I was walking to a coffee shop near my office with a friend who had a nephew that was born with a cleft palate. He was listening to my story and told me that there are other people like his nephew that would benefit from this. This led me to think that there would still be some value in continuing this project.
I have now started planning again. I have several ideas and have started a project plan document. I’m looking to use an open source text to speech engine to support further goals of eventually making this application cross-platform. If you would like to help in any way I could use assistance in development, documentation and of course testers!
Once again I have neglected my blog and the few readers I have (had). I have recently started a new job and although it has been going GREAT, I have had little extra time to write a lot of code at home or blog about cool stuff. I do have some partial posts and some ideas I’m working out, so I hope to have some more content soon. A sample of the ideas on the list are comparing the speed of ADO.Net 2.0 to Generics, Useful Communication of Errors to the User, a full review of LearnVisualStudio.Net, and Leveraging Enumerations and Attributes to Retrieve and Modify Metadata.
I used Vista for over a week and I was not impressed. I was not particularly thrilled that when deleting some files I had to do 3 separate actions because of the Windows Defender crap. It made me feel like Windows was trying to defend itself from me. I like my operating systems subservient! I want to be in control of my computing experience. So the box that Vista lived on has started it’s conversion to a dual boot Ubuntu / XP Pro machine.
The part that burns me the most is Microsoft is huge! They have so many developers and resources, so why is it that their OS takes 551 MB to sit idle and won’t see more than 2.8 GB of ram? This is what the World’s Greatest software company has to offer?
As I move on into learning more about Ruby and Mono using the Ubuntu partition, I will still need the XP partition to use my RealFlight G3.5 R/C simulator and have a stable installation of Visual Studio 2005. I can not go cold turkey yet! (And as bad as their OS may be, their tools are very good.)
So far I have completed the Ubuntu partition. It took me about 3-4 hours total to install, update, and add all of the software I wanted or needed. I have installed Firefox, Thunderbird, Ruby, Java, Eclipse, MonoDevelop, Apache, PHP, MySQL 5, OpenOffice, and PHPMyAdmin.
As an interesting observation, I have had some trouble with this hardware accepting 2GB of ram and the onboard NIC operating at the right speed when using Vista and XP. I have not seen the same problems while running linux.
I have been slacking off in the blogging department lately, but let me fill you in on the last 3 weeks or so.
I taught a class recently in Advanced Crystal Reports XI. It was a great opportunity and a chance to see just how much I really know about Crystal Reports. It’s amazing how many questions can come up. I thought it would feel wierd on the other side of the podium, but it didn’t!
I also had the opportunity to review a paper about Visual Studio Team System (VSTS) that should be public in Q1 2007. It was small role, but it’s a start! I have installed and used VSTS for a few months now, and I do like it. There are some things that are just designed for shops bigger than mine, and so those features go unused. Team Foundation Server (TFS) is yet another great product, but there are small things that do not work directly out of the box (that should!). For instance, creating a new project has to go through the provided wizard. There is no included web service that will create a project for you. Another is time reporting. There is no out of the box time report. You have to write your own custom query to get that data. Maybe Microsoft is just a forward thinker, but my day job still wants to know how many hours a project takes.
At one of my favorite websites, LearnVisualStudio.Net, I have been almost completely absent from the forums. I had made a decision to focus my efforts for a while to concentrate more on my development and get some of my projects off of my plate. The project to write a Text To Speech application for a gentlemen in Wisconsin that had lost the ability to speak was put on hold; he was given a hardware and software package very similar to what Steven Hawking has. The project to work on a social meeting site fell through on communication problems. I was not able to stress the importance of the information I had requested and decided to step away. My last project, a website for an equipment distribution company actually has kept moving and is almost finished.
I have recently decided to become a more well rounded developer and learn something new. I wanted to get away from my comfort zone and break away from the label “Windows Developer”, so I picked up a Ruby book. I had seen some of the hype surrounding Rails and thought that I would give it a try. So far, so good. I’ll keep you posted. My first initial observations are that ASP.Net 2.0 in certain situations can be like taking an elephant gun to go squirrel hunting. I like ASP.Net for writing enterprise apps, but on smaller domains it seems like it could be overkill. It’s times like that where a scripting language becomes very handy. Maybe in the next few years, Microsoft will jump on the bandwagon with a dynamically typed scripting language and framework to compete with everyone else.
I’m also looking into a quick self-sponsored project over the holidays to move hosts from Godaddy to Dreamhost and change my blogging software from Community Server to Typo or Mephisto. Watch for the change!
I hadn’t really had the need to use Attributes in C# until I started a recent open source project. Now that I started using them, I’m finding that they are an extremely valuable tool! In the project I’m working on, it’s my intent to display a user interface based on metadata from the class and property levels.
Because my work before .Net (before 2003 really) largely consisted of classic ASP ala VBScript, I hadn’t really understood metaprogramming or Reflection. I didn’t get involved enough in Java development to ever need it either. After using Reflection in my latest project and over the last 2 years building a few plug-in type systems, I am sold on its value. On the CodingHorror blog, Jeff Atwood talks about Brad Abrams favorite class in the .Net Framework is String. Well, I can’t narrow it down to one…in fact, I can’t narrow it down to a class! So today I’m starting my Top 5 Namespaces in the .Net Framework. System.Reflection is the first namespace to make the list.