2013-12-27 - New Monitor
I’ve got a new monitor and it seems to be working alright, for being second hand. It’s got some colour and brightness issues so I may end up replacing it with an actually new monitor. The point though is that I have a second monitor which means that I can use the old monitor with the older computer. I fixed GRUB, installed word, Notepad++, WinSCP and it is now ready for writing. My plan is to spend Fridays on this computer working on website related things.
Now I may not be writing posts every Friday. Some of that time might be spent ensuring all the pages are encoded properly, or writing up note sections for comics, or sitting on the bed listening to music. The point is that I won’t be on the computer set up to watch videos, or the computer set up to play games. We’ll see how long this lasts.
2013-08-17 - Imagine the Computer
Someone told me a little while ago that they didn’t think programming required imagination. I thought this was strange since I was sure I used my imagination while programming but then I started thinking about it. At its simplest introductory level programming is just a translation process and I can understand why someone wouldn’t think that required imagination. If you want to add two numbers you get two numbers and then add them, but that’s a trivial example on the level of a book designed to teach children to read. As the problems get more and more complex being able to imagine them becomes more and more important. Now I wouldn’t go so far as to say imagination is required for programming but I would say it’s required for good programming.
Now there’s a reason I mention introductory reading books and that's because writing and programming are very similar. Both involve using the constructs of a language to build environments, characters, and events. In writing one uses words and sentences to build worlds. In programming one uses symbols and statements to build programs. In both cases imagination comes into play by allowing you to look past the words and see the larger picture that they create. With programming this is really important because you are dealing with a medium meant for two distinct audiences. Programmers have to be able to read code in order to maintain it; computers also have to be able to read code in order to create the program. This requires a programmer to be able to read it as the computer does. You have to be able to see the program in the code to be able to understand how changing a line affects the whole. You also must be able to see the code in the program to be able to understand what needs to change in the code to make it work as expected.
Now the reason that I think some people may believe programming doesn’t require imagination is because their imagination isn’t compatible with programming. We are all wired differently, we all have different skills and strengths and that’s what drives us to do different things. I wouldn’t use my imagination when painting because my mind doesn’t work like that. I can picture a circularly linked list in my head but I couldn’t picture “hope” and know how to draw it. That’s fine though because I’m not an artist, I’m a programmer. Programming is what I enjoy doing and that’s what my imagination connects with. When someone sees a program freeze up they see a program that has crashed, I see a program that is taking a long time processing input and hasn’t been able to handle any other messages for a while.
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.