References: https://en.wikipedia.org/wiki/T/Maker https://en.wikipedia.org/wiki/Peter Roizen My Other Idea: WildWords Crossword Game |
Links for later: The Download Page (Revisions in progress. The download is perfectly useable.) Tutorial Videos |
![]() ![]() ![]() |
This News Is Absolutely, Positively Terrible! The 2023 assessment of 4,600 US adults showed Americans scoring at the lowest numeracy level or beneath it went to 34% from 29% (2017). That means more than a third now struggle to perform tasks beyond basic arithmetic. Here is a tool I would like to put on the table. It circumnavigates the need for a knowledge of algebra required by every other computerized spreadsheet. That knowledge is unfortunately beyond the comfort zone of many people. With T/Maker, useful, practical, and even complicated calculations can be done in two dimensions with just the principles of arithmetic that everyone remembers. Why not develop and teach something special for them? Although I am using my product to start with, Microsoft, Google, or another big player could ensure the existance of something similar and expand the range of equipment on which it works. Users could turn known numbers into new ones that summarize situations or offer useful insights. The 34% and many others do not need need solutions to polynomials or simultaneous linear equations or even formulas with B7's, E9's, and parentheses. For their sake and in the smallest of test groups, I wonder if we could kindly ask the algebra driver to exit the bus for a limited time and and take a position under it. I would gladly help such an effort. |
![]() Step 1 uses the exclamation point ! operator which tells T/Maker to enter a value into the calculator. Since this symbol is not followed by one of a variety of possibilities, the number to enter is assumed to be the one in the "white adjacent column" (abbreviated as wAj). A plus sign + adds a value to the calculator which is OK to start a trail with if the calculator has the number you want to start with (often zero). Step 2 multiplies the current value in the calculator (cVc) by the wAj. Step 3 outputs the current value in the calculator to the wAj and sets the calculator to zero. Note: If the step 3 had used the number symbol # instead of the equal sign, the value in the calculator would have been left unchanged instead of set to zero. This is often used to display a value in the calculator while carrying it forward for other purposes. The darkened green cells indicate the starting locations where step 1 of the trail is to be restarted. Typical tables often have few trails which are started from many locations. Such trails typically serve one clear purpose and must have a trails screen to themselves. If a trail is only used from one starting location, it sometimes serves many puposes with steps wandering around. Even so, multiple trails can be used keep intentions clear. Let's watch a video of a trails screen where the text and data have already been typed in (saves time). Steps will be added to do some ad hoc calculations. This is no harder than using a hand calculator but you, of course, can permanently store the result and view or modify it later. A chart is also made to highlight a similarity across various T/Maker screens. This video seems mIndlessly obvious. Sort of stupid. But wait a minute! Using a spreadsheet is stupidly easy? Isn't that actually quite amazing. Click here! |
Lists: Sometimes a well-made list with a minimum of calculations is valuable on its own.
Below is one similar to a favorite of mine. It lists all bills
that need to be paid. The list includes the number per year, how it
arrives, where to find details about it, what day it closes, how it is
paid, an approximate average amount, the total per year (calculated),
and a
number to sort on for my prefered order. The other number calculated is
the column total of "Total." The table can also be sorted on any
other column. I print one every three months and use the last three
columns to mark an amount paid if any for potentially adjusting the
average. With the number of bills one has these days, I am happy
to have this page in a permanent location on my phyiscal desktop. ![]() My actual list has a lot more lines. Take a quick look at some easy and useful manipulations of this list including the insertion of a cloned row. Click here! |
Surprise! Many
things are not as complicated as you might expect. The tariffs that
shocked the world can be calculated by the trail shown, and it can be
used on other rows with just a click. Below, the steps are explained. Step 1. enters the wAj (white adjacent cell) into the cVc (current value in the calculator). Step 2. neg, is a function with no operand that reverses the sign of the cVc. It has nothing to do with column C. Step 3. divides the cVc by the wAj. Step 4. multiplies the cVc by 100. It has nothing to do with column E. Step 5 divides the cVc by 2 and imposes a minimum that the cVc is at least 10. These operators are followed by a constant so the value in the wAj is not used. Step 6. Outputs the cVc to the wAj (column G). Columns A through F came from the NY Times. Column G is calculated using the trail. Only the data in columns B and D are used. This presentation is made so that all operators and operands can be seen in full detail. I confess, it's to make it self-explanatory and kind of pretty! ![]() You can also follow an operator by a column name when you don't want to physically place it in the correct column. The names of the columns are the letters from A to Z in upper or lowercase. The calculation above could have been done in the one step below placed anywhere on the row. This approach is often used in trails that make use of values dispersed across a variety of columns. I recommend lower case letters for column names. !b neg /d *100 /2 >10 =g |
Summary of Referring to Values in a Step So Far: It
is so important to be able to look at a step and immediately understand
what calculations it does and with what values it does them. I am not
troubled by boring you a bit with pounding these basics into your head.
As we have already seen, an operator which expects a following operand
but has none specified, will take the value from or place the value
into the wAj (white adjacent cell). A good rules is this: if an
operator takes an operand that is not the adjacent white cell, put no
space between the operator and the following operand (in a very few
cases illegal). If it takes no operand or refers to the wAj, follow it
by a space. I have been doing that mostly without being conscious of
itl I will henceforth try it as a rule. Also, it is always a good idea
to read some text you have written out loud to see how it flows off
your lips. Do the same with steps. "Enter the A cell value into the
calculator, subract 32, divide by 9, multiply by 5, and then put the
value in the B cell." Sounds like Dick and Jane reading a math book!![]() Syntactical Anomaly: Do not enter a negative number as an operand. T/Maker interprets - (dash) as subtraction operator. Use _ (the underscore character) instead. Wrong: *-3 (intended to multiply by -3). Right: *_3 ![]() |
Building Confidence:
If you click on the text above the distressed individual, you can read
some horror stories of mistakes in commercial spreadsheets that led to
millions of dollars lost. Like me, you probably don't have it, so you
can't lose it. But it's nice to feel confident the calculations you
specify are being accomplished in the fashion you expected. It is
estimated that more than 90% of conventional spreadsheets contain
mistakes. I suspect the syntax and visual presentation used in T/Maker
would yield a significantly lower error rate for typical problems. Even
so, T/Maker includes
a special tool that allows you to walk through any set of calculations
one operation at a time while displaying the values being manipulated.
It's called the Debugger and can build your confidence level while
helping you find any mistakes. Also you may avoid the usual eye strain and accompanying headaches.
|
The Debugger Et All:
We are going to revisit the tariff calculation and take a look at the
light green buttons and the top of the toolbar along with the Debugger.
The table has been redone with two trails. The first one is the one we
showed initially and is used only on row 3. The second trail is the
one-step-only version with a slight modification that is an intentional
and quite subtle mistake. It is used on row 5 only. This is done in
this fashion only for the purpose of demonstrating various features.
The screen below is the one you see when in debug mode. With
T/Maker the order of every calculation is explicit and determined by
your specification. The Debugger will follow that order under your
commands. Trails are
executed in numerical order. For each trail, separate applications are
done row
by row from the top. At each row, these applications are done left to
right. From
each start location, steps are executed in number order. For each step,
the operators are performed left to right. In a conventional
spreadsheet with algebraic formulas, parentheses, and rules of
presedence, the order of actual calculations is not sitting or even
hiding in plain sight. ![]() Let's learn a lot of stuff. Click Here! |
Memory Names:
Memories can be used to store and fetch values and can be created on
the fly in a step. They're great for intermediate values. Names must start with two letters.
Numbers
and letters may optionally follow. Names are not sensitive to case and
should not match a T/Maker keyword. I recommend always
capitalizing at least the first letter to visually differentiate memory names
from column names. ![]() |
![]() |
Mortgages And The Like: For
mortgage payments and a few other common but complicated
calculations, there are built-in procedures to do them. The table below
might be used to calculate the monthly expenses of a potential home
purchase. It would usually be done with three trails each on it's own
screen. I have shown each trail separately with the rows they involve.
This results in a duplication of some rows. The
mortgage payment calculation is the second of the three trails. I will only show that piece in the video. See how it works. Click here!![]() ![]() ![]() |
Forms: With
four different line styles plus the possibility of no line, you can
design some nice forms. Allow text to span
multiple columns when setting formats (Alignment + Spans). Text can be
specified in an invisible ink format
effectively blanking it out. This is useful when elements in a table
are needed for calculations but not desired in a final print-out.![]() |
Printing:
Print the table in one of four fonts. Choose font
style and size. Set a row height to tighten or spread out the
vertical dimension. Decide whether or not to print lines. Options are
available for row names and column names. Switch between landscape
and portrait as well as set margins with two system dialog boxes called
up with a button. The top of the page shows the length and width of your table in pages. In addition to marign adjustments, changing the size of the font and other items may affect these numbers. Use the Recalculate button to refigure the size when you have altered any items. I generally try for a minimum number of pages with the width of only a single page. ![]() |
Graphics: While the charts and graphs are not on a par with well-established
spreadsheets, you can use them to get insights into your data and
a student can learn what type of chart best illustrates a certain
point.
|
Find / Replace Helper in Misc. Menu: If you are in a position where you regularly enter data of purchases or whatever that need to be listed, the Find / Replace helper can be handy. Use it to create abbreviations to minimize typing and store them with the file. Then the Do All Instructions / Cells button is used to replace all abbreviations with the fully spelled out text. For a needed monthly list of purchases, start with the previous month's file, rename it, and blank out the data to take advantage of the abbreviations stored in it. Quick look. Click here! ![]() |
Starting From (Almost) Scratch : I do keep the template below handy without any data. It gives me a
head start on adding up lump sums or quantities with unit prices.
My once a year hand-prepared maintenance bill for a small ski boat gets
checked for labor and parts. The template includes a single
pie chart for all the items most of which are zero. I just push the
Show button for that.![]() ![]() |
![]() |
The When Clause: Different
rows or columns in a table may require very different calculations.
With the Apply button you do have the possibility to have a number of
different trails and choose to apply them across different rows or
columns as needed. This introduces an overhead of keeping track of what
is used where and making choices when a new row or column is
added. Another approach is to put something in the trail or a
step that lets the trail determine if it should do a calculation or
not. This is achieved through what is called a "When Clause." This clause
is a true or false test which can be put in a step. If the clause is
true, the operators after it are executed normally. If the clause is
false execution moves on to the next step. The clause itself consists of the word "when," a first operand, a test to be performed, and the second operand for the test. One chooses the elements proceeding from left to right on the help screen. This completes the edit area to the right of the light green "Load Clipboard and Cursor" button below. You may also edit what is in that area to provide specifics of what happens when the test is true. Then you can push the just mentioned button to get a cursor representing the text and click it where needed. It is often the case that some form of almost the same clause is needed more than once. You can change the text in the edit area and use the aforementioned button to get a new cursor. Note below that the calculation given is only executed for rows designated with the code "A". ![]() Watch the construction of a When Clause demonstrating another use of it with the Tally Table button.
|
Statistics: Basic
statistics can be obtianed with one trail using the & (Combo
cursor). It uses memories to keep track of a number of key indices.
These can be fetched from the memories and displayed as in the table
below. With a few other trails you can put the values in normalized
form and calculate correlation coefficients. This table includes those
calculations. The current maximimum number of rows is 250. I have been
meaning to try this with perhaps 25 numbers for each variable and all
completely random. I am curious what the chances are of seeing
correlation coefficients that suggest a correlation even though all
numbers were random.![]() |
![]() |
Mortgage Payment The Hard Way: This
is the formula for a monthly mortgage payment (M) from the amount
borrowed (Principle) over (n) periods at an interest rate (i) per
period: M = P [ i(1 + i)^n ] / [ (1 + i)^n – 1 ]. It is more easily forgotten than remembered. This example is for readers who wonder about unexpected tasks that T/Maker might handle. Most will not be attempting to construct a table at this level of complexity. But hopefully they can get the idea of how it works. Skip it if you like. I do know the payment accounting that is done each month. Interest is added. The payment is subtracted. That yields the remaining balance for the next month. And so it goes for every period. T/Maker is programmable. With the terms of a mortgage and a given monthly payment, it could do the math. If the final balance ended up negative by more than a trivial amount, it would mean the payment was too large. If it ended up too positive, it would mean the payment was too small. Something called a binary search is a smart way to deal with this type of situation. First we need to find a low and a high estimate for the correct payment (discussed later), then we take the average of the two, and do the math. If the remaining balance is too negative the payment was too much. We change the high estimate to the average we just used and start over with a new average. If the balance is too positive, the payment was too little. We change the low estimate to the average instead and try again. If the balance was a trivial amount from zero, the payment is right and we stop repeating loops. The term "Binary" is used because the range of possibilities is cut in half with each iteration. We will have three sorts of stages in this process: 1) Start Up: calculate the correct value as in the previous example to compare with this approach and set some nicely named memories with initial values. 2) Prep Next Guess: Prepare memories with values to run through all payments and establish our next payment guess. 3) Run and Evaluate: Do all payments, evaluate the remaining balance, and take the appropriate action. We will do one trail for each stage which makes it easier to see what is going on. A trail is a very flexible item. Trail 1: ![]() ![]() ![]() Startup: When T/Maker begins calculating all memories are effectively zero. In the first step, Pass is a memory which will be zero at the first execution of the trail. A When Clause is used with the "not equal" comparison to see what the story is. This test will fail since Pass is zero, so the rest of step 1 will not be done. T/Maker will jump to step 2. Later when Pass is not zero, the rest of the step will be done and T/Maker would EXit this TRAIL (EXTRAIL) and jump to step 1 of next trail, namely, 2. This trail is meant to be executed only once. Steps 2 through 5 calculate the correct mortgage payment in the way of the previous example. Step 6 puts the borrowed amount in the memory Amount. Step 7 divides the interest per period by 100 so it is a rate as opposed to a percentage. Step 8 puts the number of periods in the memory Months. In truth, it could be quarters or years or whatever. Perhaps a memory named Periods would have been more to the point. Trail 2: ![]() ![]() Prep Next Guess: The first two steps of trail 2 are only done the first time trail 2 is executed. Otherwise, the Low and High estimates for the Payment are controlled in the third stage. The Low payment is calculated to only pay back something less than the full amount of the loan. Banks don't generally offer that. The High payment would pay back the interest on the full amount every month plus the Low payment. This would probably be called "sharking." Step 3 displays the Low payment. Step 4 calculates and displays the Payment based on the average of Low and High. Step 5 displays the High payment. Step 6 sets the memory Remains to full Amount (this is before the first payment is made). It also sets the Time to 1 (think of this as the current month/period). And it adds 1 to the memory Pass. This makes sure we won't do the one-time steps again and serves to count the total number of different payment amounts that were tried before the correct payment was found. Trail 3: ![]() ![]() Step 1 calculates the remaining amount including new interest. Step 2 subtracts the next payment from the remaining amount. Steps 3 and 4 simply display memory values of interest, Step 5 Regardless of the Time, If what remains is already less than minus 5 the payment is too high. So the High value is reset to the current Payment and the table is RESTART(ed) from the beginning. However, this time Pass is not equal to zero so various steps will be skipped. Step 6 tests if the final payment was just made. If not, this trail is RETRAIL(ed) which means T/Maker will jump back to the first step for this trail and advance another time period. Step 7 is only tested after all payments are made. It checks if the remaining amount is greater than 5. If so the Payment was too low, so the Low value is reset to the current Payment and the table RESTART(ed). Otherwise it is mission accomplished! The amount remaining is between minus and plus $5. If there were a trail 4, T/Maker would have started on it. Don't lose sight of the benefit that this example offers an oppotunity for students to learn something interesting independent of this problem solved. This can be done with many other subjects: statistics, probabilities, etc. For the record, no trail yet has used a cell name except the example of how to use a cell name! |
Simulations With Random Numbers: The
table below gambles on roulette with the optimal strategy. One sets
what they are willing to risk and how much they want to win. You choose
your lucky number as well! The strategy involves betting only on a
single number
with an amount that achieves your goal on your first win. That amount
goes up to cover bets lost. The more you are willing risk for a smaller
win, the
better your chances. To avoid being responsible for a bad decision you
might make, the example below of risking 10,000 to win 500 actually
loses after 108 lost bets in row. It wins much more often than it
loses. But a loss wipes out the gain from 20 wins. This simulation is done in one trail so it could be shown one screen. Dividing tasks into a few trails be more natural. You can think of the trail as a program that runs over and over again until either the number of passes exceeds "Max Passes," the money is all lost, or the desired winnings are achieved. Steps 1 to 4 initialize values in memories for the very first pass. Steps 5 through 8 place the remianing funds, update the number of passes, and check for a terminal condition. Steps 9 and 10 calculate the bet ("cel" stands for ceiling and forces the bet, if possible, to be the whole number big enough to achieve the desired winnings). Step 11 rolls the dice. Step 12 handles a losing bet. Step 13 handles a winning bet. In either case, the trail is restarted which would exit if a terminal condition has arrived. At the top of the screen is the "heavy" math toolbar to remind you of what's available. Why is this the optimal strategy? Like all casino games, the odds favor the house. When you bet on more that one number, part of your bet is actually betting against other parts of your bet. The more money that gets to the table, the more slices of it the house is expected to get. The odds pay you as though there were 36 numbers on the wheel but there are 38 when you include 0 and 00. ![]() |
Importing Data: To
try T/Maker, you don't have to start with typing data. You can probably
import data from a program you have that exports files in the popular
CSV (Comma Seperated Values) format. T/Maker can also import data using
white space as a delimiter, parsing mostly vertical columns, or using a
first line that is a template for where columns of data are located.
![]()
Save the file as it is first. Duplicate or move data in a table by exporting it. Then import it to the new location. Erase the old data when that operation is completed. Don't save anything until you are sure. BTW, one backup file is kept with zzz prepended to the file name if you set that option in the Options Menu. |
![]() ![]() |
![]() The necessary designations for the graph values were put in the table manually on the Graphs input page. I first did the graph as a single line showing the parabola f(x) versus x. That was rather boring and quite low on information value. I then tried the presentation above. The value of x is shown as a red bar which starts off negative and climbs. The blue bar shows the value of the function. You can see the two solutions where the height of the blue bar is zero. When things are easy, a spirit of trial and error discovery is encouraged. That often leads to something unexpected and better. |