| | $Id: 0-StartHere.txt,v 1.1 2001/07/14 06:17:00 tundra Exp $ |
---|
| | |
---|
| | INTRODUCTION TO HB |
---|
| | ================== |
---|
| | |
---|
| | (BIG HINT: You do not care about HB as a useful program (probably), |
---|
| | but if you're trying to learn Python, it may help.) |
---|
| | |
---|
| | |
---|
| | What Is HB? |
---|
| | =========== |
---|
| | |
---|
| | HB is a fairly simple, but not trivial, Home Budget management program |
---|
| | written in the Python programming language. (You'll need a version of |
---|
| | Python for your operating system to run hb.py, the actual HB program. |
---|
| | You can get this at www.python.org.) HB is not going to replace |
---|
| | Quicken or MS-Money any time soon, but as the next section explains, I |
---|
| | had a good reason or two for writing it. |
---|
| | |
---|
| | |
---|
| | Why Did I Write It? |
---|
| | =================== |
---|
| | |
---|
| | Two Reasons: |
---|
| | |
---|
| | Years ago - decades, actually - one of the very first programs I wrote |
---|
| | in BASIC was the inevitable Home Budget program. In those days it was |
---|
| | written in MBASIC on a TRS-80 Model 1 talking to cassette tape for |
---|
| | storage. Over the years the program evolved first to floppy disk, |
---|
| | then to MS-DOS, then to compiled QuickBASIC. It was never a very well |
---|
| | written program in the first place and all that evolving didn't make |
---|
| | it any prettier. It was a pain to maintain, but I actually *liked* |
---|
| | using it. You see, I hate all the complexity that GUIs brought to |
---|
| | personal computing. My finances are not like John D. Rockerfeller's |
---|
| | and I don't need a whiz-bang GUI, scratches-your-back-while-it-does- |
---|
| | your-taxes program just to figure out how much money I'm going to owe |
---|
| | at the end of the month, fer cryin' out loud. So, one reason I did HB |
---|
| | was to replace my old piece-of-crap BASIC program. |
---|
| | |
---|
| | The (much more important) other reason I wrote HB was because I wanted |
---|
| | to learn the Python programming language. This is the reason you care |
---|
| | about HB at all, if you do (because only 1 out of 280 million |
---|
| | Americans (me) is actually going to use it for its intended purpose). |
---|
| | |
---|
| | I'm a Computer Scientist by training and a lot of graduate school |
---|
| | (1 - M.S. and 1/2 Ph.D. ;) stuff I did involved languages and compiler |
---|
| | design and I just *love* fiddling around with new computer languages. |
---|
| | Over the years I've programmed some or a lot in: BASIC, Assembly |
---|
| | Languages, C, C++, LISP, FORTRAN, PL/M, PL/1, AWK, Perl, Visual BASIC, |
---|
| | Java, and Forth. When I first started playing with Python, I realized |
---|
| | that this was one of the very coolest languages I'd ever seen. It is |
---|
| | good for just about everything (except, probably, writing operating |
---|
| | systems), promotes good programming style, causes you to write lots of |
---|
| | good code *fast*, and, well, it's just plain FUN. |
---|
| | |
---|
| | The problem is that, while you can learn the basic syntactic elements |
---|
| | and get a sense of semantics of a language from a tutorial, you really |
---|
| | don't "get it" until you write a non-trivial program. In my |
---|
| | experience, this is the only way to being learning the "idioms" of a |
---|
| | language. OTOH, if the program you start with is trying to solve too |
---|
| | complex a problem, you'll end up spending all your time on the problem |
---|
| | not the language. For instance, you probably do not want to make your |
---|
| | first Python program do non-linear differential equations (unless you |
---|
| | happen to be a whiz at them, in which case, you have my condolences ;). |
---|
| | |
---|
| | So, I decided to reimplement my old home budget program in Python. |
---|
| | The program is solving an intellectually simple problem, but it is |
---|
| | non-trivial in the sense that it requires I/O (disk, printer, |
---|
| | keyboard), needs to manage a display space, needs to parse user input, |
---|
| | and so on. Along the way, I added some "nifty" features like unlimited |
---|
| | Undo capability and a table-driven command interpreter that's kinda cool, |
---|
| | if I do say so myself. |
---|
| | |
---|
| | |
---|
| | Why Am I Distributing It? |
---|
| | ========================= |
---|
| | |
---|
| | |
---|
| | As I was writing (and rewriting, and rewriting, and ...) HB, it |
---|
| | occured to me that other people might be able to learn Python a little |
---|
| | faster if they had a complete application to look at. So, I went back |
---|
| | and heavily commented the code (about 50% of hb.py is *comments*), |
---|
| | wrote these docs and decided to make it available to anyone who wanted |
---|
| | to paw through it. |
---|
| | |
---|
| | It also occurs to me that, having misspent my youth in academics, |
---|
| | people teaching Python programming might want to use HB for class |
---|
| | work. This would make me very happy. Too much of what is taught |
---|
| | involves "toy problems" that never get much beyond the trivial example |
---|
| | stage. |
---|
| | |
---|
| | IMPORTANT NOTE: This is not intended to "teach" you Python or |
---|
| | programming or anything else. The idea is that you already know how |
---|
| | to program and have a basic understanding of how Python does things. |
---|
| | The point here is to "Put It All Together" and show an application of |
---|
| | all the pieces as an integrated whole. |
---|
| | |
---|
| | |
---|
| | Program Features |
---|
| | ================ |
---|
| | |
---|
| | This is a pretty straighforward Budget Management system. Nothing too |
---|
| | esoteric here, really: |
---|
| | |
---|
| | Unlimited Different Budgets |
---|
| | Up to the limit of your disk space. |
---|
| | |
---|
| | Unlimited Accounts |
---|
| | Well, the limit is what you can squeeze on a single screen. |
---|
| | |
---|
| | Unlimited UnDo |
---|
| | Limited by memory - if you run out of UnDo stack, |
---|
| | you're using HB for WAY too complicated budgets ;) |
---|
| | |
---|
| | Prints Reports To Printer (Win32 Only) Or Disk File (All OS) |
---|
| | |
---|
| | Handles Monthly "Burn Rate" For Each Account |
---|
| | |
---|
| | Pay, Debit, Credit, And Transfer Funds |
---|
| | |
---|
| | Balance The Budget |
---|
| | |
---|
| | Read And Write Budget Files |
---|
| | |
---|
| | |
---|
| | Code Features |
---|
| | ============= |
---|
| | |
---|
| | This is probably what you really care about: |
---|
| | |
---|
| | Uses Every Major Python Data Structure |
---|
| | Tuples, Tuples Of Tuples, Tuples Of Tuples Of Tuples, Lists, |
---|
| | Dictionaries, and Objects |
---|
| | |
---|
| | Has Mixture Of OO And Procedural Code |
---|
| | Python is *really* good at this. |
---|
| | |
---|
| | Uses A Regular Expression For Input Validation |
---|
| | |
---|
| | Uses 'eval' To Demonstrate Runtime String Execution |
---|
| | |
---|
| | (Some) Exception Handling |
---|
| | |
---|
| | Disk, Keyboard, And Device I/O |
---|
| | |
---|
| | Code Is Completely "UnStrung" |
---|
| | There are no literals (other than newlines) embedded in the code |
---|
| | which makes maintenance and internationalization very simple. |
---|
| | |
---|
| | Completely Table-Driven Command Interpreter |
---|
| | Kinda cool, actually. A little complicated at first, but it makes |
---|
| | adding new features a snap AND prepares the way for mating the program |
---|
| | to a GUI if you must have one in your life. |
---|
| | |
---|
| | Stack-Based Context Management And UnDo Facilities |
---|
| | |
---|
| | LOADED With Explanatory Comments So You Understand What's Going On |
---|
| | |
---|
| | |
---|
| | Caveats And Acknowledgements |
---|
| | ============================ |
---|
| | |
---|
| | I am an experienced programmer, but not an experienced *Python* |
---|
| | programmer. This means that not everything in HB is necessarily good |
---|
| | Python - I hope it is, it probably mostly is, but it probably also has |
---|
| | some warts. If you *are* an experienced "Pythonista" and you see |
---|
| | something in HB that makes you just wince, send me an email and let me |
---|
| | know what needs fixin'. |
---|
| | |
---|
| | I also want to take a moment and thank the many friendly people of |
---|
| | comp.lang.python who answer my many stupid questions promptly and |
---|
| | correctly both on the newsgroup and privately. |
---|
| | |
---|
| | Also, a big "Thank You" to www.diveintopython.org for one of the best |
---|
| | language tutorials I've ever seen. It is a work-in-progress, but a |
---|
| | "must" if you are learning Python. |
---|
| | |
---|
| | Finally, a huge thanks to GVR and the many people who designed, |
---|
| | implemented, and refine one of the slickest programming languages |
---|
| | around... |
---|
| | |
---|
| | |
---|
| | How To Proceed |
---|
| | ============== |
---|
| | |
---|
| | All the files in HB documentation directory begin with a number. All |
---|
| | you have to do is read them in order. This document begins with '0-', |
---|
| | so the next thing you need to read is the one starting with '1-' (the |
---|
| | HB Licensing document - you MUST read and agree to those terms to make |
---|
| | use of HB in any way)... and so on. |
---|
| | |
---|
| | |
---|
| | Political Statement |
---|
| | =================== |
---|
| | |
---|
| | Some people view Open Source and Freeware as Marxists: |
---|
| | |
---|
| | "Code should be made available because it belongs to everyone |
---|
| | and there is a moral imperative to make it freely available." |
---|
| | |
---|
| | In other words, "From each according to their ability, to each according |
---|
| | to their need." (This really worked well in the 20th Century, don't you |
---|
| | think?) |
---|
| | |
---|
| | This is drivel of the worst kind. If you don't understand why, read |
---|
| | "Economics In One Lesson" by Hazlitt, "The Road To Serfdom" by Hayek, and |
---|
| | "Capitalism, The Unknown Ideal" by Rand. I view HB as a Libertarian: |
---|
| | |
---|
| | "HB is my property (well, the property of my corporation). I |
---|
| | created it on my own, so it belongs to me. I make it freely |
---|
| | available because *I can* and *I want to*. The *only* way I |
---|
| | make it available is if you agree to my licensing terms. If |
---|
| | you do not, don't use HB. I have no moral obligation to |
---|
| | make it available at all, I do it because it suits me." |
---|
| | |
---|
| | |
---|
| | Questions Or Comments? |
---|
| | ===================== |
---|
| | |
---|
| | Send 'em to: tundra@tundraware.com |
---|
| | |
---|
| | |