James Hollingworth’s Adventures in Code

Icon

Muney: Financial Management for Students

Over the past year, I have spent quite a long time on my dissertation. I’m pretty proud of it and I have had quite a few positive comments from various lecturers (I’ve even been asked to write a paper on it for a journal). I’ve decided to write a few articles about my work, hopefully it will hope someone out. If your interested in it, my final report can be found here.

My project was a personal financial management application for students (the actual title was FAST: Financial Analysis for STudents although my final application was called Muney). Essentially I was having problems with my finances a while ago, being the good programmer that I am, I had a look at what software was available. To be honest, from a students perspective, Microsoft Money & Quicken are pretty terrible. Users are required to have a significant amount of financial knowledge to use them effectively. In their defense, these app’s aren’t really aimed at the student demographic.

This was obviously a known problem since I found a few web applications such as wesabe & buxfer, which were developed to solve just this problem. Although these applications are much more student friendly they were really basic, not offering solutions for tasks students are commonly pretty poor at performing (e.g. bill management, budgeting)

So based on this, I decided to develop a financial application which automates important monetary tasks and does so in a way which is easy for a student, with no prior financial knowledge, to understand and use. The application was written using C# & Castle Project’s Monorail framework a screen shot is shown below

The application had a variety of features including

  • Bulk importing financial information via an OFX parser (currently open sourcing the parser I had to write to achieve this)
  • Automatically renaming and categorizng transactions
  • Bill managment (including automatically discovering new bills and recognizing transactions as payments for bills via clustering techniques)
  • Automatic budgeting (including time series forecasting to predict a users expenditure)

Since i covered quite a few topics devloping these features, i’m going to split this blog into a series of articles. The application can be split up into three tasks, organizing, managing and planning a users finances:

Here are the articles discussing these tasks

  • Organization
  • Managment (coming soon…)
  • Planning (coming soon…)

Filed under: .net, c#, castleproject, dissertation, monorail, muney, ofx , , , , , , , ,

Subsonic like NHibernate Query Generator button in Visual Studio

One thing I love about SubSonic, in fact the reason i switched, was how awsome the querying is. I don’t know why but something like new UserCollection().Where(“UserID”, id).Where(“Password”, password) just does it for me. Going from that back to either HQL or ICriterion was a rather painful experience. A very clever guy called Oren, has come up with a solution to this called NHibernate Query Generator (NQG). You can do some rather nifty things like FindOne(WHERE.User.Name == “James” && WHERE.User.Password == “NotGoingToTellYou”). Many (including Oren) belive that you shouldnt have strings in your code and thus the code to create all these cool queries is autogenerated.

The problem I found was I had to constantly change back & forth between the command line & VS to update the code. To solve this i borrowed a trick from SubSonic. I have created a little button in VS (see below) which will run the query complier for you.

Nhibernate Button

To do this, firstly download the latest version of NQG, then copy the exe file NHQG.exe to an safe location e.g. “c:\Program Files\NHibernate\”. Next you need to open up visual studio, and click Tools -> External Tools and then click add. Give whatever name you want e.g. NHibernate, and then for the command the location of NHQG.exe, in my case “c:\Program Files\NHibernate\NHQG.exe”. In the arguments field, you have a few choices:

  • /Lang: language used, either cs | vb
  • /InputFilePattern: location of either Nhibernate mapping file or the dll (if your using Castle Projects ActiveRecord)
  • /OutputDirectory: Directory you want the files to go to e.g. ./Models/Queries
  • /BaseNamespace: Base namspace for queries, e.g. Priority.Queries

so a complete example would look like “/Lang:cs /InputFilePattern:bin/Priority.dll /OutputDirectory:Models/Queries /BaseNamespace:Priority.Queries”

For Inital directory you just add $(ProjectDir) which sets the starting location to be the root of the project directory. Finally, make sure that it is the first in the menu (it will become clear why in a second).

externaltools2.png

Once you click ok, you will now be able to run the application by clicking on Tools -> NHibernate. To create a button for this, you need to click Tools -> Customize -> Toolbars & then click new, a new menu should appear. Next you need to switch back to Commands, Select Tools and the scroll down until you see all the External Command x’s. Drag External Command 1 onto your new toolbar and then click close. It should change the text from External Command 1 to NHibernate (or whatever name you gave it) and your done!

Hope this helps someone!

Right now that we have

Filed under: NHibernate, c#, castleproject, visual studio, visual studio 2008 , , , , ,

Monorail: Get client’s browser

For future reference, to get the clients browser:

    $Context.UnderlyingContext.Request.Browser.Browser

This is infact accessing the HttpRequest.Browser property so you can then get all the usual info like browser version:

    $Context.UnderlyingContext.Request.Browser.MajorVersion

Hope this helps someone!

Filed under: .net, castleproject, monorail, nvelocity ,

Visual Studio syntax highlighting for Monorail views

I was just having a look through the options in visual studio 2008 and noticed a new section for selecting the default editor for non-standard files, such as monorail views (.vm). Up to now i’ve either had to make do with the basic text editor or mess around with the registry, neither of which is that much fun. The dialog is in options -> text editor -> file extension you can then choose what editor you want to associate with each file extension. Hope this is helpful to someone!

Adding monorail views to vs 2008

Filed under: .net, castleproject, monorail, nvelocity, visual studio, visual studio 2008 ,

Web Hosting Workaround for monorail

So I recently needed to put an web app I wrote with monorail online. Ended up buying hosting through re-invent who have so far have been very good. The one big problem I soon realized was they (like pretty much every web hosting company) don’t support Castle Project and in particular Monorail. Basically whenever I tried to access a page it would just come up with a 404. So after many hours of hair pulling, I was about to give up and have a very painful rewrite in asp.net. Luckily I had another search on the forums and found out that most web hosting companies will block any non standard file names, i.e. .castle. So using the url rerouting in monorail, I just added the following rule


<routing>
<rule>
<pattern>(.+)(.aspx)</pattern>
<replace><![CDATA[ $1.castle ]]></replace>
</rule>
</routing>

After I added that, I found that everything worked perfectly. There are some problems with it, namely that in methods like RedirectToAction() it will add the castle extension. As a current workaround I have just add the following to the base controller:


protected new void RedirectToAction(string action)
{
Redirect(action + ".aspx");
}

I know its not the most elegant solution, but its better than nothing. Hope this helps some people!

Filed under: castleproject, monorail ,

my bookmarks