home comics writing pictures archive about

2013-04-14 - Budgeter Project part 1

I have finished my C# book and that means it’s time to start the project. For the past couple of years (Since I started working) I’ve been keeping track of my income and expenses in a spreadsheet. It works alright but I want to build something to automate the process a bit and make entering new items easier. Excel is very good at working with numbers but it’s not really aware of what those numbers mean. By building my own program I can have similar functionality but a lot more content aware. For example excel lets me enter negative amounts because they are valid numbers and that’s all it expects, while the program will know that we are separating transactions into debits and credits and therefore negative amounts don’t make sense. The goal of this project will be to create a program with the same functionality (if not more) and view as the spreadsheet but with more validation and less need for direct input.

The first step will be to figure out the data model. This program is going to do a lot data manipulation and storage so it makes sense to start there. In a lot of ways the spreadsheet is going to be very helpful in this as it shows the kind of information that needs saving. It might also cause problems because I haven’t always been consistent in how I set things up so there might be places where decisions have to be made to either bend the data to fit the model or to expand the model to fit the data. I’ve changed the categories of transactions I use a few times so do I go back and convert all transactions to the new categories or add in the capability of marking categories as unused? The problem with building a specialized application like this is figuring out the right number of options to have; too few and it becomes annoying to use, too many and it gets confusing.

These are the table ideas I have right now and they’re going to serve as the starting point for the data model. The next step will be to start translating the spreadsheet information into these hypothetical tables and see where problems arise. From there it’s just a matter of deciding to change the data or the model until everything agrees.

transaction

This table defines the basic tranaction information and links to aditional information about catagories, if the transaction is a bill and if it's paid with a gift card.

id date description amount catagoryId isCredit isCash billId giftCardId
INT DATE STRING DECIMAL INT BOOL BOOL INT INT

catagory

This table defines the catagories that transactions can be put into. These catagories describle how the information is displayed and which accounts the transaction goes into or out of.

id name colour withSavings isCredit inUse
INT STRING STRING BOOL BOOL BOOL

budgetType

This table defines the basic information for a budget type.

id name standardAmount startDate endDate
INT STRING DECIMAL INT INT

budgetCatagory

This table maps categories to budget types.

id budgetTypeId catagoryId
INT INT INT

budgetMonth

This table defines an instance of a budget type for a specific month. This allows the amount per month to change without having to remake the entire budget type.

id typeId monthId amount
INT INT INT DECIMAL

month

This table defines specific information about individual months, mainly the starting account values. During the month the transaction values will be subtracted from the start and then the end result will be used to create the start for the next month. If a value is changed in an already finished month it will update the starting values of all months after it.

id startCheuqing startSavings startCash
INT DECIMAL DECIMAL DECIMAL

specialAccounts

This table represents special accounts. Primarily these will be gift cards but in the future they could be used for TFSAs or similar accounts that aren’t used on a daily basis.

id monthId name amount
INT INT STRING DECIMAL

bills

This table is used to define bills that transactions can be marked as. This allows these specific transactions to be tracked.

id name
INT STRING

Also just to go against myself I bought an ASP.net book. It does talk about both C# and VB.net though so that could be a nice way of learning visual basic. I still want to get a VB and a python book at some point but this will be good for now. I’ll probably hold off on the ASP book until after I finish this project or at least get it started.

2013-04-05 - Random Quotes 2

It’s been a while since I did the first one of these and I figured I should do another one. I need something to write about anyways. So here’s how this works, I click random page on Wikiquote until I find an interesting quote then I write about it.

“Logic hasn't wholly dispelled the society of witches and prophets and sorcerers and soothsayers.” Raymond F. Jones

It’s strange how people can argue against logic. You present a well thought out argument to someone and they reject it not because they can disprove it but because they can’t accept the conclusion. It’s a strange world we live in where simple explanations are overshadowed by more complex ones. It’s not that long ago that people thought the sun was pulled across the sky by some kind of chariot.

“There are two kinds of men who never amount to much: those who cannot do what they are told and those who can do nothing else.” Cyrus Hermann Kotzschmar Curtis

I like these kinds of quotes because they don’t really tell you to do anything just to stay away from the extremes. Balance is the key to a lot in life and it’s good to keep that in mind. There are going to be people who know more than you and its okay to follow them but don’t follow blindly or else you’ll end up walking into a wall. If you are unsure about something question it and don’t be afraid to refuse. After all, no one knows everything.

“Don't forget that Linux became only possible because 20 years of OS research was carefully studied, analyzed, discussed and thrown away.“ Ingo Molnar

I don’t know enough about the history of Linux to tell if this quote is accurate but even if it’s not I still like it. It speaks to the point that just because something is true in one case does not make it true in all cases. When developing something you need to be mindful of what other people have done before you but that doesn’t necessarily mean copying them. Only implement those things that you feel fit with your vision for your project.

2013-02-23 - Learning Plan

I’ve almost finished my C# textbook, just a few more chapters left, which means I need to find something to do as a final project and something else to learn. For the final project I’m thinking about building a budgeting application to replace the income/expense tracking I currently do with excel. That would give me a chance to build a lot of controls and also work with MS SQL. I should say that this isn’t a final project from the textbook or a class; it's just that when I've finished learning about a topic I like to do a project on my own to cement what I’ve learned and get some experience doing things from scratch.

Now to the other question, what to learn next? I’ve been looking at python and I think it could be interesting. While looking into it I found out it was named after Monty Python which is certainly a point in its favour. The other thing I want to learn is Visual Basic. It is one of the things a lot of jobs seem to be asking for and it’s also something I’ve been wanting to learn for a while since it seems to be fairly different syntax wise to the c inspired languages I’ve worked with so far. I’d like to get a textbook for Visual Basic and python, but that will have to wait until after I get a job.

I’d also like to learn ASP.net as well as Perl or Ruby at some point. Unless I get a job using one of those I’ll probably hold off for a while though. ASP.net seems like an interesting web technology and the others seem to be useful but there are only so many hours in a day. There’s also my Win32 textbook I’m still working on. I’m 375 pages in and still barely a quarter of the way through the book.

2013-02-01 - If looks could kill

I was listening to the radio a while ago and “Games without Frontiers” by Peter Gabriel came on. It’s an interesting song but one line in particular caught my attention, “If looks could kill they probably will”. Now I’ve heard the statement “If looks could kill” many times but this got me thinking about what would happen if looks could kill. Now the obvious, and trivial, answer is that the human race would have died out. For some reason I feel the need to be more positive about it though.

If we assume that people wouldn’t all instantly die off if looks could kill I think it might actually be a good thing. The main idea behind killer looks is people annoying other people to such an extent that they give them a dirty look. If these looks could kill people would have to be much more mindful of them and they’d have to try and avoid them. That would mean that people couldn’t just be absolute bastards without natural selection taking over. It would also give people an excuse not to deal with annoying people. A cashier could tell their manager that they need to step away for a second because they’re going to kill their customer and the manager would let them as it could really happen. So if looks could kill people would have to be nicer and more considerate of other people.

Of course that’s never going to happen because people always get annoyed and then we’ll just slowly wipe ourselves out.

Update on previous post: HA! Steady state, that lasted long.