Archive for the ‘Finance’ Category

TD Ameritrade external bank authorization

Wednesday, January 30th, 2008

So, TD Ameritrade, welcome to the future.

I initially opened an online broker account with Datek many years ago. Datek was acquired by Ameritrade in 2002. And then in 2006 Ameritrade aquired TD Waterhouse and is now called TD Ameritrade.

Why is this history important? Because I recently tried to transfer some funds out of my TD Ameritrade account to my bank account. But the transfer was rejected. I was asking for an amount that was much less than my cash balance, so that wasn’t the problem. (Moving some recent dividends to a higher yielding interest rate account.) In the email from TD Ameritrade rejecting the transfer, they said that I had to call customer service and verify the bank.

This was strange, as I had already verified this bank information and had previously made successful transfers from TD Ameritrade into this bank account. But, I wanted my money, so I called TD Ameritrade customer service. After 20 minutes on hold (again, wanted my money) waiting for an agent, at 7:00pm, I got through to an agent. I told the agent about my situation attempting to access my money. They initially were a bit confused, as they saw that both bank accounts tied to my TD Ameritrade account had been electronically verified. But then he must have found something related to this recent issue, and said that he needed me to personally re-verify my bank information. This is where I find the verification process to be a bit lacking.

I appreciate the concern to make sure that the bank account I am trying to transfer my money to is really mine, but two pieces of the required information were not exactly appropriate. First, they wanted to know my employer. Hmm. Since I have had an account for something like 7 years, and being a part of Generation X and the Internet revolution, I have had multiple jobs with different companies; through my own doing and employer mergers. So I told the agent my current employer. (Though I don’t ever remember telling TD Ameritrade who any of my employers were. Maybe they get it from my credit report???) The agent said something like, “Um, is there something else.” So I went into a reverse chronological list of my previous employers. Somewhere in there I must have hit the right combination, as the agent went on to other questions.

One of these other questions was where is the bank that I am trying to transfer to located; the city and state. Well, before the Internet, this would have been potentially easier to answer, but not necessarily. But now, since this particular bank is an Internet-only bank, it makes it really hard to answer. (A brick-and-mortar bank may still be hard, as there are banks with branches in multiple states, for instance.) I tried to tell the agent that I didn’t know. He offered this advice, “Well, where do you go to see a teller.” My reply was basically, “Well, there are no tellers. I use an ATM and the Internet to access the bank.” Eventually, I got it “right” with the agent by looking up the information on the TD Ameritrade web application bank information. My guess is that TD Ameritrade figures this out from the bank routing information. Which me, as a plebeian customer of the bank, would have no knowledge of where geographically the bank routing information defines. (Yes, I am a geek, but not really a bank geek.)

But, after all this, my bank is verified again with TD Ameritrade and they are (per their online app) sending me my money.

at&t International (not) SMS messages

Monday, January 21st, 2008

SMS Intl $0.25 Msg OutCheck your at&t bill. I had noticed an item on my bill, “SMS Intl $0.25 Msg Out”. Initially I thought that I had somehow sent an international SMS message. And it cost $0.25, which is much more than $0.00 for the first 100 domestic SMS messages in my “package”.

Next month my bill included this item too. Since I mostly send text messages to Twitter, I thought that the Twitter short code may be causing the charge. (Because how does Twitter make money, by the way?) So I stopped sending SMS to Twitter.

So this time, on my December 2007 bill, I again noticed the “SMS Intl $0.25 Msg Out” charge and called customer service. I asked the agent if they could tell me what SMS messages were “international” since they weren’t marked on my call detail. She said that she would take a look. Moments later, she returned and said that these charges were due to a billing problem. The billing problem was incorrectly marking domestic SMS messages as international. She said that they announced this billing issue a couple of months ago and were performing automated updates to fix the problems, but it was difficult and they didn’t get all of the charges reversed. She was able to credit my account for all of the charges from the past three months that were incorrectly marked as international SMS. She also made the off hand remark that I didn’t use SMS very much. I said that that was because they started getting charged $0.25 per message so I cut back. She said that that was a good point. 🙂

So double check your at&t bill.

2008 Financial Resolution

Wednesday, November 28th, 2007

I stumbled upon the blog Cash Money Life via a post at Get Rich Slowly. So here is my 2008 Financial Resolution for a Chance to Win an iPod. My financial goal is to pay off the remaining $7,000 second mortgage principal balance by November 2008. I will do this by paying a bit over $500 per month starting 12/2007.

Why this goal? It is probably more of a personal thing, but it was a loan for $22,869.00 back in August 2004. (It was for our new house so that we wouldn’t have mortgage insurance.) The loan was for a term of 15 years at 7% interest. How do I know how much to pay each month to achieve this goal? I have a Google spreadsheet that breaks out the interest and payment for each month out through 2019. So, it’s a no-brainer that if I pay it off sooner, I save a bunch of money on interest. But there are a lot of things vying for my money, so it is a balancing act. But the spreadsheet lets me track my progress. And, I have my Google Goal Chart gadget to provide a visual representation of my progress. It helps keep me motivated.

“Built in” text field calculator

Wednesday, September 26th, 2007

I have a little web application that I wrote to balance my check book. I often enter a calculated value into a form text field. I usually use the Google Calculator in the Firefox Search Bar to perform the calculations. I often perform simple calculations like “25 * .03”. (Why? I impose a personal finance fee on each credit card purchase that I make. I use a 3% fee. I put all of my personal finance fees into an online high-interest savings account. So, if I charge $25.00 on a card, I transfer “25 * .03” or $0.75 to my online savings account. It isn’t much, but it adds up.) So, yesterday, I thought, “I wonder if I can integrate Google Calculator functionality into my web application?”

Here is what I came up with.

Calculator example.

You can take a look at the source of the “calculator.html“. It includes “JPetersonCalculator100.js“, which is where the JavaScript that actually implements the calculator is sourced. The calculator function is attached to the text input field using an onKeyPress event handler in the HTML:

onkeypress="processCalculatorKeyPress(event, 2);"

Here is the processCalculatorKeyPress function.

001: /**
002:  * Handle a key press from a text field that can automatically calculate a
003:  * derived value. Basically, enter normal mathematical formula like
004:  * "5 * .03 =". When you press the equal ("=") key, the value in the text field
005:  * will be replaced with the calculated value. If the value can't be
006:  * calculated, it is left unchanged.
007:  *
008:  * @param e the event
009:  * @param precision the decimal precision to round to.
010:  */
011:  function processCalculatorKeyPress(e, precision) {
012:   var targ;
013:   if (!e) var e = window.event;
014:   if ( targ =;
015:   else if (e.srcElement) targ = e.srcElement;
016:   if (targ.nodeType == 3) // defeat Safari bug
017: 	targ = targ.parentNode;
019:   if (e.keyCode) code = e.keyCode;
020:   else if (e.which) code = e.which;
022:   if (code == 61) { // '='
023:     var expression;
024:     var result;
025:     expression = targ.value;
027:     try {
028:       // calculate, evaluating arithmetic expression
029:       result = eval(expression);
031:       if (typeof result == "number") {
032:         // round, if necessary
033:         if (typeof precision == "number") {
034:           if (precision > 0) {
035:             if (result.toFixed) {
036:               result = result.toFixed(precision);
037:             } else {
038:               var factor = Math.pow(10,precision);
039:               result = Math.round(result * factor) / factor;
040:             }
041:           }
042:         }
044:         targ.value = result;
046:         // don't display key that triggered the calculation
047:         if (e.preventDefault) {
048:           e.preventDefault();
049:         } else {
050:           e.returnValue = false; // IE
051:         }
052:       }
053:     } catch (e) {
054:       // expression wasn't an arithmetic expression, let normal text be displayed
055:     }
056:   }
058:   // var character = String.fromCharCode(code);
059:   // alert('Code was: ' + code + ' Character was: [' + character + '] targ: [' + targ.value + ']');
061:   return false;
062: }

Lines 12 -10 process the event, makeing a “normalized” version that handles differences in browser implementations. Since the function processCalculatorKeyPress is called for EVERY key press, line 22 filters out all key presses except for the one that we care about: the equals (“=”) key. Line 25 saves the value currently entered into the text field. Line 29 uses the JavaScript eval function to evaluate the arithmetic expression. (This is the actual calculator. The rest of the function make the results look pretty.) The “try”, on line 27, and associated “catch”, on line 53, are there to handle any error thrown by the “eval” function. An error would be thrown if the value entered into the test field was not an arithmetic expression. (Or more generally, not a valid JavaScript expression, since “eval” found evaluate any valid JavaScript expression. But that’s not really useful for the calculator.) Line 31 makes sure that the result of the “eval” is a number. Note that execution will only reach line 31 if “eval” didn’t throw an exception. Lines 33 through 41 perform any required rounding of the result. If available, line 36 uses the “toFixed” function to convert the number to the requested number of decimal places, rounding and padding with zero as necessary. If this function is not available, lines 38 and 39 perform rounding without any padding. Line 44 assigns the result of the arithmetic expression to the text input form element. Lines 47-51 indicate that the calculation succeeded so that the equals sign isn’t added to value of the text input field. Line 58 and 59 are commented out. But they illustrate how you can use an alert box to see what characters are pressed. I used this technique when developing the function.

That’s it. It should be relatively easy for you to include this build in text field calculator into your own web application. The basic steps are:

  1. Include the JavaScript function “processCalculatorKeyPress”.
  2. Add the “onkeypress” to the text fields that you would to support the build in calculator functionality. You can configure the precision value, from no rounding (use a negative value, like “-1”) to whatever decimal place is important. For currency input, I use a precision of “2”.

History: My first Google Gadget – Goal Chart

Thursday, April 5th, 2007

I have created my first Google Gadget, Goal Chart, back in November 17, 2006.

Goal Chart

It is still hosted on my Google Pages site: Here is a little blurb about the Goal Chart…

It is a simple gadget that shows one horizontal bar chart. In the preferences, you can edit the goal name, goal value, and current value. It is intended to be a “Savings Goal” chart, where you can specify a monetary value and track your current progress toward the goal. The goal value and current value should be decimal numbers. Once the user preferences are saved, the goal progress is displayed in the bar chart as a percentage.

I have had the Goal Chart installed since November 17, 2006 on my Google Personalized Homepage. I use it to track my progress towards paying off my second mortgage. It provides “visual motivation” by showing a bar chart of my progress towards paying off the loan.

Once the gadget is installed in Google Personal Homepage, you need to edit the preferences. The field “Name” is used in the title of the gadget. The field “Goal” is a decimal number that represents what you want to reach. The field “Current” is a decimal number that represents where you are currently at.

Goal Chart Preferences

This shows my load amount of $22,869.00. I have currently paid back $12,168.43 of the principal. This means that I have paid back 53.21% of the loan. Each month when I send in my loan payment check, I update the Goal Chart preferences, changing the “Current” field. This updates the percentage calculation and bar chart.

(How do I know how much principal I have paid back? That’s a good question. It’s also another topic for another blog post. 🙂 )

[Updated April 5, 2007: I almost forgot. The Goal Chart stores the values that you enter using the Google Gadget API for your Personalized Homepage only. The data isn’t shared with me or anyone else. (Besides Google, who is storing your Personalized Homepage.)]

Amazon Context Links added

Friday, March 30th, 2007

I have added Amazon Context Links to my blog. The links will show up with a double underline. This links are automatically added by Amazon, linking from content in my blog to Amazon products for sale. These links provide advertising to help pay for this blog hosting.

To add them in WordPress, I first went to the Amazon Associates Central. Their “Context Links” page under “Build Links” page provides an interface for building the snippet of code needed to add Amazon Context Links to the site. I copied this chunk of code to the clipboard. Then, I opened the theme’s footer, which in my case was: wp-content/themes/default/footer.php. I pasted the code right before the <?php wp_footer(); ?> text at the end of the file. That was it. We’ll see how this works.

Check your checks

Wednesday, March 28th, 2007

This was the second time that it happened to me. I was checking my bank transactions and noticed that one of the transactions as reported by the bank was $33.28. In my transaction log though, I had recorded $33.08. My bank now provides electronic images of the canceled checks (instead of returning the actual canceled check like they did in the old days). I logged on and looked at the image. Yep, the check was written for $33.08 and “written” for “thirty-three and 08/100”. I sent the bank an email. They responded that they would credit my account $.20. It’s only $.20, but it could have been much more. I am surprised that this doesn’t happen more often. The whole check-writing thing seems a bit archaic, at least to me, a self-proclaimed computer geek, what with the analog (me hand writing a check) to digital (someone/something has to convert it into digital form and enter the transaction amount into a computer) conversion.

Check 1851 error

My bank is Farmers State Bank. Thank you for being quick and courteous.