.NET development Environment Installation
Creating EvejobNET Solution
Open Visual Studio, select “File / New Project” and fill form with following details (make sure you select ASP.NET MVC Web Application template):
Press “OK” and on next window “Create Unit Test Project”, select “Yes” and press OK:
You will get solution loaded into Visual Studio with 2 projects: ASP.NET MVC Application (EvejobNET) and Unit Tests project (EvejobNET.Tests):
You can now try to run it, just press “Start Debuging” Button and make sure that you agree with action to “Modify the Web.config file to Enable Debugging”. Your default browser will open test site, hosted by development server (build in into Visual Studio).
Creating EvejobAzNET Azure Solution
Go to “File / New Project”, select “Cloud Service” template in New Project Window and fill project name and path like on following screenshot:
After you press “OK” you will need to select Roles to be added to solution. At the time I write this, there was no ASP.NET MVC role available, so let’s just temporary add ASP.NET Web Role (keep default name for now):
After you press OK, solution will be opened with WebRole1 Project. Now it is time to remove “WebRole1″ temp project from solution (don’t forget to delete unused folder, with content, WebRole1 in C:\evejob\EvejobAzNET).
Next step is to add new ASP.NET MVC project: like was done above for EvejobNET project – just simply right click in solution explorer on “Solution ‘EvejobAzNET’” and select “Add New Project”, than select ASP.NET MVC Web Application Template and give this template name “EvejobAzNETMvcWebRole” to keep Azure standard naming convention.
One more step to finish – you need to associate role, so in solution explorer right click on “No project associated (WebRole1)” and select same like on screenshot:
In opened window for association, make sure that you select “EvejobAzNETMvcWebRole” project:
Your solution will looks like this now:
Now it’s time to test it – just press “Start Debugging” in Visual Studio. Probably you will get following question (if everything going well):
Sure thing, correct answer “Yes” Ones it finished you will get another window that show “Development Storage Initialization” – just press “OK” button here and continue with execution.
You can get following popup also:
I hope you answer yes, as probably you want to be sure that you use latest Tools available for Azure
Finally, your default browser probably opens with http://127.0.0.1:81/ Url and you will see “My MVC Application”
If so, that we just prepare everything to start EvejobAzNET development
Ah, one small note – you can check status in “Development Fabric” and in “Development Storage” – small icons are added to Windows taskbar – right click on each and select “Show …”:
Thats it!
OK So i decide to publish here MyFaTo (don’t forget to register this cool name for next killer start up! ha ha). If seriously, list contain not only Tools, but also frameworks, plug-ins, extensions etc. Will try to keep this list up to date
Here is first 11 entries (I grab it from my micro blog at Tumblr)
1) EntLib (http://www.codeplex.com/entlib) – “Must Use” blocks for Enterprise Software Developers
Cover most of Aspects, like Caching, Logging, Security, IoC, etc (really waiting for next version 5)
2) Moq (http://code.google.com/p/moq/) – best available mocking library for .NET 3.5 (at least today…….. i pretty sure that still exists in testing / mocking / TDD a LOT of space for creative ideas and implementations! Currently it looks like to write ‘good’ tests, you need to spend more time and effort, than to write a good code (even if you are using TDD……) and looks like current approach to use unit test frameworks / Mock libraries can be changed in future…… For example, right now, when i write this line, i start thinking of new C# Language features for Unit TESTING / Mocking…. Yes, yes, not build in to Visual Studio Team Edition or third party frameworks, but BUILD-IN to language ITSELF! Why not??? We already have LINQ here, lambda expressions, dynamics variables, so why not to embed here keywords with idea to test code that you just write!!! And then, when you just compile your code – compiler can TEST IT (right after build or simultaniosly) and when you run code – code will be tested in run-time (as additional feature)! cool Somebody think about this before??? OK.. Maybe i will need to write dedicated post for this!
3) Because spend above too much time (just so like Moq) about testing, here will just put references to NUnit (http://www.nunit.org/) and xUnit(http://www.codeplex.com/xunit). Looks like best what we have now (and what is free ) for unit testing in .NET……. Sure we want more automation, sure we want…. WFT!!!!@@@…. i start this again… actually what we want is simple like always: “to write code that is already tested” ! ha ha… it’s even better then TDD (write tests before code)… WTF! We want “CDD” (“Code Driven Development” or “Code Driven Design” (c) Ruslan Konviser 2009 – it’s late now here.. i tired… but simple search in Google can’t found that CDD is already in use!!! Please not mix this term with “Code driving testing” – it’s completely different! Aga – new term!!! another “Driven” design … Think it’s most simple term description – “just write code and that’s it!” )
4) TortoiseSVN (http://tortoisesvn.net/) – best available tool to forget about “command-line” style of SVN (at least in daily usage) – integrates to explorer and give you all options available in SVN and even more…
5) AnkhSVN plug-in for Visual Studio (http://ankhsvn.open.collab.net/) – working with SVN repositories directly from Visual Studio… Previous versions have problems with performance, but looks like latest versions 2.x have no problems at all!
6) SlickEdit Gadgets for Microsoft Visual Studio (http://www.slickedit.com/content/view/441) – amazing and free gadgets… mostly i like “line ruler and indentation guide” – just take a look and you will never drop this feature (but first be sure that you enable it!). What’s important is this gadget works well with VS 2005 / 2008 and don’t cause any problems with a lot of other gadgets / plugins! Try it! Cool and Free!
7) Firebug (http://getfirebug.com/) – “You can edit, debug, and monitor CSS, HTML, and JavaScript live in any web page.”. Any yes, i like it more then IE development toolbar…. not really sure why Maybe because it’s more user friendly (or developer friendly)
8) Quartz.NET (http://quartznet.sourceforge.net) Quartz.NET is a full-featured, open source job scheduling system that can be used from smallest apps to large scale enterprise systems.
9) Spring .NET (http://www.springframework.net) Spring.NET framework provides comprehensive infrastructural support for developing enterprise .NET applications A lot of useful modules (you can use them independently from each other) for AOP, Data Access (NHibernate, ADO.NET etc), Web (DIP for Pages etc… But for ASP.NET MVC you will need to wait v2), Testing, Messaging, Threading and even Quartz integration and many more…
If you do a lot of debugging, I suggest to take a look to following tools:
10) Crack.NET (http://cracknetproject.codeplex.com/) - A runtime debugging and scripting tool that gives you access to the internals of a WPF or Windows Forms application
11) Mole for VS (http://www.codeproject.com/KB/macros/MoleForVisualStudioEdit.aspx) - Visualizer with property editing. Mole is a high performance, full featured, multifunction visualizer that allows detailed inspection of WPF, WCF, WF, ASP.NET, XBAP’s and WinForm applications.
12) CPU-Z is a freeware that gathers information on some of the main devices of your system. It is really fast and free way to get info about your hardware! It is also make sense to check another utilities on same site – most are free and useful!
13) Skipped
14) WiX (Windows Installer XML Toolset) is a Toolset that builds Windows installation packages from XML source code. The toolset supports a command line environment that developers may integrate into their build processes to build MSI and MSM setup packages.
15) Paint .NET – free image and photo editing software (it’s not replacement for Photoshop, but good replacement for build-in Windows paint application with a lot of advanced features)
Based on my experience, I suggest to install .NET developer environment in following order:
1) Microsoft SQL Server 2008 (Express with Tools or Express with Advanced Services minimum, as you probably will want to use at least Management Studio after installation… Sure if you have developer, standard or enterprise versions just install them)
2) Visual Studio 2008
3) Service Packs for Visual Studio and Service Packs for SQL Server (order here i think simply does not make any difference)
If you install SQL Server and Visual Studio in wrong order (i.e. Visual Studio and than SQL Server), you will probably have at least issues with Management Studio 2008 installation (update from Management Studio 2005) together with other ’small’, but time consuming issues…
“Evejob” is a Web 2.0 style Social Job Board Open Source web application developed in few frameworks / programming languages simultaneously and released under GPLv2 license.
Why another job board application?
First – every developer understand naturally such business domain because at least one time in his live he was a “Job Seeker” and some day probably also become (will or already) an “Employer”. So I (and readers) will not spend time to learn business domain in developing Job Board application! (sometimes really huge amount of time team or independent developer just learn business domain of application… It’s actually wrong to think about this as “time waste” because as much developers understand the business as more better software they usually made!).
Another reason why I decide to create another job board open source application(s) is absence of such project developed in true MVC architecture (at least by now). Try to search open source Job Board software? You will found huge amount of poorly written PHP scripts (most are not open source) and for sure you will not found any good ASP.NET MVC or Ruby on Rails implementations… Social Job Board software have a huge “potential” and I don’t want to lost opportunity to develop good open source version of such application (and even more – first few versions powered by different platforms!).
Last reason which I want to list here (in reality I have much more reasons for sure), is that I have some cool ideas how to make really SOCIAL Job Board and want to at least try such ideas on practice!
Evejob Application Versions
So, there will be few major versions of Evejob applications:
All versions will be developed and updated in parallel with comparisons between frameworks / languages features, platforms and even IDEs in the way …
Why I will release project as Open Source? Sure primary reason because I want other developers will get benefits from it, like I now get benefits from all open source software that I use every day. Another reason – I want to made this application better, so I need feedback, and not only from end users, but also from other developers! In my case, because I get used few different programming languages, I will probably get really huge feedback – at least few times more then if i will write code using one language! I will get feedback from developers with different cultures (Unix vs Windows environment), different preferable coding styles (dynamic language or static) etc… Think project will benefit from this (and actually I never see something like this before so it will be at least interesting to get a try … ) !
Agile Development
As you probably understand by now, I am a huge fun of Agile development (and even Agile life).
What this means for selected project:
Integrated Development Environments
One thing where I really don’t want to go most simple way is usage of Integrated Development Environments (IDEs) … While all development can be done using even simple text editors (notepad, vim, Emacs etc) I decide to implement this project using rich IDEs available for selected platforms.
Reason – most of developers DO use IDE at work (companies simply buy it) and I think this will help developers to make total compare of PLATFORMS, not just frameworks or programming languages. While a lot of people can argue that IDE does not make any difference (and probably they are right in some cases), I think usage of IDE can significantly decrease developing time ones you get use of functionality they have and sometimes even improve discipline (with tools like ReSharper for C# for example) of developers.
So here is the list of IDEs I am going to use:
Why I choose IntelliJ IDEA, but not Eclipse or Netbeans (really good free alternative to IDEA) or Wing or Komodo etc? For .NET development, Visual Studio is STANDARD and Express Edition that available for free simply “for users other than professional software developers, such as hobbyists and students.” (but even so Express Edition should also work for you). Because my goal is to be at least “professional software developers” (and readers I think also) I must use at least Standard version of Visual Studio that is not free (except cases when Microsoft give it for free for start-ups etc, like on http://www.microsoft.com/bizspark/ for example)… So to make fair comparison I must use something not free for other versions also… This means that great tools like Netbeans or Eclipse simple can’t be used in this case (as both are completely free). Sure if you going to made your own projects you can use Netbeans or Eclipse because both have good support for both Ruby on Rails and Grails development and even Django (with some additional external tools / plugins). Regarding Komodo / Wing etc, they are too specific for selected languages or does not support all frameworks I need (at least by now). While it is available free IntelliJ IDEA version for open source developing, because I (and readers) some day going to make a money, it’s make sense to compare versions for commercial development.
Application Hosting
Hosting… Yes, while I can leave this decision for later in theory, in practice it can (and will) effect our architecture… So let’s made it clear now: I am going to host Grails, Django and Ruby On Rails versions of Evejob application in Google AppEngine. Google AppEngine support Python natively so we can run Django here. Also last version of AppEngine support Java as programming language. So because Grails leverages Groovy (which written on Java), we can also run Grails applications in AppEngine. Same for Ruby On Rails – it is available JRuby implementation of Ruby on Java so we can run Ruby On Rails applications in Google App Engine. To host ASP.NET MVC application in I am going to use latest Microsoft Azure platform.
Operation System
I am going to make all development under Microsoft Windows 7 64 bit Operation System (OS). Visual Studio 2008 does not work on any other non-Windows operation system directly (and I don’t want to use virtualization for such case – IDE must work on operation system for which it was written to get maximum performance… but, while IDEA works on almost any OS, Visual Studio does not!). Even so, It is still exists option to use Mono (cross platform Open Source development framework) to run ASP.NET MVC on other OS except Windows, and to use MonoDevelop instead of Visual Studio for example. Unfortunately I decide to port application to Mono AFTER development will be completed. (primary because I just want to wait until Microsoft legally allow to use Mono or finally will just “close” it, so I will not need to release another version for this wonderful framework).
Project sources, links and documentation