A Brief Timeline of History*
(*Apologies to Stephen Hawking for this title!)
The following is a rough timeline of
the history and
evolution of AutoMathic. It can be read on its own, but some
references to program features may not make sense without some
understanding of what
AutoMathic is and what it can do.
The timeline also shows how computer technology has changed...
Technological advancements made my vision of AutoMathic attainable, but
also changed my vision of what AutoMathic could be.
Ever since the first portable computers, I've been interested in
small computers that you could have with you all the time. I've
followed their development closely because they fit my vision of having
a computer be a personal, portable extension of your mental capacity.
The PDA and its descendants, with their extreme portability and
ever-increasing capability, seem to be the best expression of where
AutoMathic should belong. Once handheld devices are capable of
real
speech-recognition (not just voice-navigation), a milestone in
AutoMathic's evolution will be reached. In the timeline, bullets
six and seven for the year 2000 have a glimpse of AutoMathic's
hopeful future!
Timeline
1986
- I wrote a program called "MATH" to help me do physics
homework.
It used standard algebraic notation with single-letter variables, but
had no equation-solving capability. The user had to supply
multiple
versions of the equations, each "solved" for a different
variable.
Once enough variables were defined, one of the equations would be used
to automatically calculate the unknown. Since it was really just
a
fancy "expression calculator", it supported a wide range of operations
like exponentiation, roots, sums, products, numeric differentiation,
numeric integration, etc.
- MATH was inspired by programs such as MathCAD and Mathematica
which, unlike spreadsheets, were not limited to rigid, fixed
calculations.
- MATH was written in BASIC on a TRS-80 Model 100. It had 24k
of
memory (used for storing AND running programs), a 40x8 LCD display, a
2MHz CPU, 300 baud integrated modem, and cassette tape storage.
The
Model 100 was the first true laptop computer.
1987
- I added simple symbolic equation-solving capability to MATH, but
took out higher math functions due to the difficulty of handling and
tracking multiple solutions. The new program was named
"SOLVER". The
equation-solving was much like it is today, using a simple, methodical
approach to isolate the unknown. Since it worked symbolically
instead
of using numerical techniques, each step of the process could be (and
was) shown in the same "1d" format that was used to enter equations.
- SOLVER was essentially a limited expression calculator that could
do some of the equation-solving work for you. It was no longer
always
necessary to enter multiple versions of each equation, since SOLVER had
taken over that job. I envisioned using SOLVER to produce
printouts of
homework problems that would be readable enough to be turned-in!
- Most of the core equation-handling commands (list, clear, remove,
solve, substitute, load, and save) were present at this time, so the
program worked much like the current "Kernel Mode".
- I had done some work on Term-Rewrite Systems (TRS), and noticed
that the stylized language of many word problems made them easily
translated into equations. I used my TRS to create rewrite rules
that
converted simple mathematical sentences into equations.
- Early versions of a full translator were a separate program
(driven by my term-rewrite engine) that could translate simple
statements like "area is length times width" into "a=lw". The
term-rewrite engine was controlled by a file that defined the
translation rules; this file evolved into "idioms.dat" and
"words.dat". You ran the translator program and entered
statements.
It would translate your input and create an output file of the
translated equations and expressions. This output file would be
loaded
and used by the SOLVER program... It was clumsy, but it worked!
- The first version of what could be called WPS combined the
translator with the equation-handling core of SOLVER. The
integrated
program did the reading, parsing, and solving interactively. It
took
over the name "SOLVER" since the expression calculator was less
deserving of the name. The main prompt's play on words, "So,
what's
your problem?", has been used since this first version!
- I added the ability to automatically import sentences read from a
keyword-indexed file of "facts" of common mathematical knowledge.
If
an entered noun phrase matched an indexed keyword, any related, stored
facts (themselves, English sentences) would be added to the user's
input until no more related information was found. Prior to
adding
that feature, all relevant facts needed to solve a given problem had to
be entered every time!
1988
- By this point, the program was essentially what it is now (minus
many amenities and with MUCH smaller language and data files).
- I remember showing SOLVER to my mother (using a particularly
complex word problem) but she was not overly impressed because, to a
non-expert, it's common-knowledge that "computers can do math"!
1989
- That year, the Poqet PC was released. It was a
one-pound, DOS 3.3 handheld PC-XT with 512kb RAM, a 7MHz 8088
processor, CGA LCD display, two Type I PCMCIA card slots (the first
device to use the new standard), and powered by a pair of AA
batteries! I imagined having that "palmtop" PC with me all the
time and running SOLVER on it... Unfortunately, it cost $2000 and I was
still a poor college student!
1990
- I printed out the SOLVER program and for the first time saw
the code outside the confines of the Model 100's cramped, 40x8
screen... The whole program was just seven pages of
densely-packed code!
1991
- The HP 95lx was released and was almost an alternative to
the still-expensive Poqet PC. Unfortunately, it had compatibility
problems with many PC applications because it did not have a standard
screen resolution.
1992
- Between 1990 and 1992, several handhelds with features
similar to the Poqet PC were released. By then, the Poqet PC was
down to $1000, and its clones were about $700.
1993
- I bought an Amiga 4000 to go with my 3000. The A4000 had a
25MHz 68040, 6MB RAM, and a 120MB hard drive.
- In
a two-week programming marathon (many of which were all-nighters), I
rewrote SOLVER in C on the A4000 with the SAS C Compiler. With
the rewrite, it got a new name: Word Problem Solver (WPS).
Although it was primarily a direct rewrite, I eliminated most of the
limitations of BASIC, and the program ran faster than you can read the
output! The source code still has some comments which are line
numbers from the last BASIC version.
- I compiled WPS using VAX C, and saw it run on a powerful machine!
- I
got a demo version of a C Compiler for the Macintosh (which I ran on my
Amiga's Emplant Macintosh emulator) and compiled WPS for the Mac!
- Apple
released the Newton and coined the phrase "Personal Digital
Assistant". It had a 20MHz ARM RISC processor, 6MB RAM, a Type II
PCMCIA slot, and natural handwriting recognition, powered by 4 AAA
batteries. I imagined arming the Newton with WPS and having a
kind of smart notepad where you would write your problem on the screen
and the Newton would solve it!
- I bought a Newton, but
rewriting WPS in its NewtonScript development language was not
appealing... A BASIC version of the program was theoretically
doable using the expensive NS BASIC interpreter, but a faithful,
C-to-BASIC conversion was not realistic by this point...
1994
- The HP 200lx was released, and was a truly pocketable DOS
5.0-based handheld PC with a 7MHz 80186 processor, 2MB RAM, and a Type
II PCMCIA slot, powered by 2 AA batteries. I held off buying one
because the Newton was technologically superior, and I hadn't
completely given up on running WPS on it.
- I created a
handful of equation files for the Kernel Mode of WPS. One group
consisted of files for converting between related types of units
(length, time, weight, etc.). To do a unit problem, one would
"load" the appropriate file(s) and assign values to the known
unit(s). The values of the related units were automatically
calculated. To solve problems involving compound units, multiple
files would be loaded. For example, "speed" problems would "load
length_units" and "load time_units".
1995
- Six years after its release, the Poqet PC was being
liquidated at the unbelievable price of $200, a tenth of its original
cost! I immediately bought one and started work on getting WPS on
it...
- The PoqetPC had GWBASIC built-in and I got the last
BASIC version of SOLVER running on it after a few minor compatibility
changes. Six years of patience finally paid off!
- I
used the free C compiler, PCC, to compile WPS for the Poqet PC (after
converting the ANSI C source to K&R C, and fleshing out PCC's
standard library). I finally had the real WPS running on a
handheld computer... but it wasn't the Newton.
1996
- WPS eventually outgrew the memory limitations of the PCC
compiler, so I bought a copy of Borland Turbo C++ 3.0. It was one
of the few C compilers that still generated 8086 code, which was needed
to run on the Poqet PC. With a "real" C compiler for the PC, I
maintained a single codebase for WPS that compiled on the Amiga, MAC,
VAX, and PC.
- The first Windows CE handhelds were released
with the promise of being powerful PDAs. With 40MHz, 32-bit
processors and 4MB of RAM, they had sufficient power.
Unfortunately, they didn't use x86-compatible CPUs, and could not run
DOS applications. WPS would require a rewrite and recompile to
move it to those devices.
1997
- The Toshiba Libretto caught my eye as a powerful replacement
for the Poqet PC. As a true handheld Pentium PC with a color
display, hard drive, etc. it could run Windows 95 (or any other desktop
OS). But, just like the early days of the Poqet PC, it was too
expensive for my budget!
1998
- After a few half-hearted attempts at figuring out how to add
pretty-printed, two-dimensional output to WPS, I forced myself to sit
down, think the problem through, and "just do it"! When my wife
saw the program's new output, she recognized that it was doing real
algebra (just like people do) and not using "computer math" tricks!
- Since
the step-by-step algebra was a lot more understandable with 2D output,
it made sense to add (optional) explanations describing each
step. I added the "detail" command with "low", "medium", and
"high" options at that time.
- Sources of inspiration for WPS
were PBS educational TV shows named "The Mechanical Universe", and
"Project Mathematics!". The shows brought concepts from math and
physics to life by using computer animation to show the manipulation of
equations, and animate diagrams as formulas or variables changed.
That level of interaction and graphics was out of reach, but the shows
made me want to make WPS even more interactive and educational.
1999
- The long-standing inability to truly use units in
Conversational Mode was "fixed" with a kludge that required some
special keywords and syntax for specifying units. WPS still works
this way, but the current keywords, syntax, and dictionary allow much
more natural phrasing.
- Decent voice recognition was becoming
possible for average desktop PCs, and I imagined how great it would be
to speak a word problem to WPS! I tried a friend's copy of Dragon
Dictate, and used cut-n-paste to send recognized speech to WPS...
It was clumsy, but it worked!
2000
- I was still using my Newton, but still hadn't gotten WPS
running on it despite the eventual availability of C cross-compilers
for it. Its APIs would require maintaining a radically different
version of WPS, and I didn't want to lose the single codebase.
- New
PalmOS and Windows CE PDAs made me think about retiring the
Newton. I took a serious look at PalmOS devices from Palm,
Handspring, Sony, and TRG. There was also a variety of Windows CE
handhelds with and without keyboards. The major deciding factors
were ease of use and ease of development.
- Rudimentary
simplification was finally added by taking advantage of the parse trees
used for the 2D output. Basic simplification opportunities were
found by looking through the parse tree for certain patterns, then
manipulating the parse tree directly to get the simplified form.
- Once
simplification was added as an automatic feature, I removed almost all
of the (minimal) ad-hoc simplification that was being done elsewhere in
the program, just to let the simplifier automatically handle (and
optionally explain) it! I also added the "verbose" and "explicit"
detail options to allow viewing the simplification steps and their
explanations.
- One "problem" with WPS' use of the library was
that it was greedy when importing information: It would load
EVERYTHING related to everything that was entered, then immediately
load everything related to that, and so on... The result was that
much more work than necessary was done in solving any problem that
referenced the library. I implemented a better strategy that
loaded one "level" of related information, then tried direct solutions
before loading another level... Now, as soon as enough
information had been loaded to solve the problem using direct methods,
the loading would stop. For some types of problems, a lot of (but
not all) extraneous information was avoided.
- IBM released
its ViaVoice voice recognition program as a free download for the Linux
operating system. I installed it on my 400MHz PC and used an
open-source program, Xvoice, to send the recognized speech directly to
a terminal window running WPS. The recognition was not always
perfect, but I could actually speak word problems to WPS and have it
solve them! Text-to-speech output was also possible, but untried,
since most of WPS' output was not designed to be read aloud.
- ViaVoice
for Linux and my successful experiment made having a Libretto even more
tempting... The Libretto could run Linux, making it at least
theoretically possible to speak word problems into a handheld device
and have it solve them!
- I contemplated rewriting WPS in Java
so that anything with a Java Virtual Machine could run it. This
would make WPS available on a much wider variety of systems, including
anything with a standard web browser. It was not done, primarily
because most handhelds were NOT be able to run Java!
- The Kernel Mode of WPS was documented.
2001
- After deciding I could not give up Newton-style, natural
handwriting recognition, I decided on the PocketPC platform in general,
and the Compaq iPAQ in particular. With a 206MHz StrongARM
processor, 32MB of RAM, and a 12-bit color display, this PDA was as
powerful as the desktops of only a few years before!
- Using
the PocketDOS PC-emulator for the PocketPC, I ran the PC version of WPS
on my iPAQ. This was definitely the most portable version of WPS
ever, but execution was slow because of 8088 emulation, input was slow
through its virtual keyboard, and it would not accept the PocketPC's
built-in handwriting recognition.
- Using Microsoft's free
Embedded Visual C++, I ported WPS to the PocketPC and gave it a simple
GUI. This version allowed natural handwriting recognition,
finally realizing the vision I had for the Newton back in 1993.
Other than the additional code for the GUI, only minimal code changes
were required, so maintaining a separate codebase was/is easy.
- WPS
extended its use of fuzzy-matching to include determining if things
mentioned in the problem match things mentioned in the library.
This optional feature is controlled with the "b_fuzzy_facts" setting.
- Fuzzy
matching in the library resulted in WPS repeatedly asking if one thing
meant another... WPS got a FAQ file (faq.dat) that it checks to
see if the question has ever been asked before, and it uses the file's
answer automatically instead of pestering the user. If the
"b_learn_mode" option is "1", the FAQ file will be updated with the
user's answer whenever WPS asks for a ruling.
- Ever since the
library was added, WPS would ask the user's permission before
consulting the library. That way, if the user knew that there was
already enough information to solve the problem, WPS would not waste
time or effort checking the library; WPS could proceed directly to
indirect methods. The "b_auto_consult" option controls whether
WPS will ask the user or automatically check the library.
2002
- Although the incremental loading of facts from the library
was sometimes better than the original, "kitchen-sink" method, many
problems still brought in much more information than necessary.
In fact, any problem that had to resort to indirect methods would load
anything remotely related before trying an indirect solution.
Indirect methods are used as a last resort, and WPS could not know if a
direct solution might be found by loading "just one more" level of
related information!
Figuring out how to load "exactly what
is needed and nothing else" took a couple of months of R&D in graph
theory. I created a (new?) technique for determining (without
using combinatorial searches) exactly what information is truly
relevant from one situation to another:
Now, WPS' library has precomputed path
and cluster information that captures the graph-like nature of its
stored knowledge: Variables are nodes, and equations form links.
A lower-triangular matrix stores the shortest path between every pair
of variables that belong to a connected graph. An entire set of
connected variables forms a graph representing related topics.
The entire set of connected graphs is the knowledge. WPS
produces near-optimal solutions by loading the minimal set of equations
that form a "path" linking all active variables that can be
linked. This strategy minimizes the amount of external
information to the equations needed to form whatever relationships can
be formed.
- For most problems that require indirect solutions, WPS'
cautious heuristics can find a variable to which to give a hypothetical
value. A few problems require a less-cautious selection, so the
"b_assume_any" option lets WPS give a hypothetical value to any unknown
variable that is alone in a denominator. These variables are
usually the object of a preposition, or a simple unit following a
quantity.
2003
- This documentation of WPS' Conversational Mode was begun.
- The
fuzzy matching algorithm was rewritten to use a left-to-right, longest
matching substring algorithm. If strings with multiple words are
to be matched, the algorithm eliminates matched substrings and
re-compares. This allows multiple words or phrases to be matched
regardless of differences in word order. For single words, a
recursive, ordered match is performed to measure similarity.
- The
simplifier was given the ability to cancel identical-looking additive
inverses that occur at the top level of expressions and equations (e.g.
"n+7=5/100n+n" becomes "7=5n/100"). A more general approach
(requiring the same effort applied to every subtree of the parse-tree)
is possible, but computationally expensive. A completely general
approach would also require converting all terms to a canonical form
for comparison...
- During an internet search, I stumbled upon
a commercial product by CyberEd, Inc. named "Algebra Word Problem
Solver"! This is the first non-research product I've seen which
attempts to do what my WPS does. There are numerous research
projects (e.g. Daniel Bobrow's "Student" program from the late
1960's, and the ISAAC program which specializes in solving physics word
problems), but this is evidently the only commercial product.
They believe theirs is the only such product and invite any information
to the contrary...
- The kernel command, "set", was added to
allow setting all configurable options at run-time. Also, the
program's initialization process was changed from reading a special,
comma-delimited "config" file to executing a normal WPS "config" script
(which uses the new "set" command and/or any other valid kernel
commands).
- After discovering that the parser correctly
handles sentences based on the verb "to do", it was obvious how to
expand the vocabulary to handle many other common, generic verbs.
Constructions based on verbs other than "to be" make it possible to use
active-voice sentences with WPS.
- The output for the save,
list, and info commands was enhanced to show what each variable stands
for when those commands are used in kernel-escapes from Conversational
Mode.
- The program was given the ability to save its
workspace to a save file (named "abort.eqn") whenever an unrecoverable
error occurs. This allows at least some recoverability of work
that might have otherwise been lost.
2004
- Documentation continued...
2005
- The "list" command was enhanced to allow specifying a list of
variables.
- Several new simplifications were added to the simplifier.
- The "append" option was added to the "openlog" command to allow
non-destructive logging capability.
- The "load" command (and related usage) was changed to be silent
by default unless the new "verbose" keyword is used.
- The "formulas" keyword was changed to "equations" in the "list"
and "save" commands.
- Some
hardcoded shortcuts were removed from the equation-solving code that
maneuvers sides and isolates the variable, allowing the simplifier to
automatically handle them.
- While reading a computer
magazine, I saw a review of an impressive (tablet) PC program called
MathJournal by xThink Corp. (www.xthink.com). MathJournal
recognizes handwritten equations, expressions, tables, etc. to solve,
plot, and otherwise manipulate them like an intelligent sheet of
paper. It has no natural-language capability, but recognizes and
intelligently handles a wide array of handwritten mathematical input.
2006
- The "lock" and "unlock" commands were added to allow
preventing changes to some variables while allowing others to be set
and unset according to the normal evaluation rules. Locks can
eliminate the need to re-define variables that should keep their values
in spite of changes to other, related variables.
- The
behaviors of the "clear", "list", "info", and "save" commands (as well
as many behind-the-scenes routines) were updated to handle the
ramifications of locked variables.
- The "_" symbol was added to allow Kernel Mode expressions and
equations to refer to the most recent answer provided by WPS.
- The
kernel command, "set", was updated to allow viewing a single option by
specifying its name as the sole parameter to the command.
2007
- Apple announced and released its own smartphone, the
iPhone. Although not a full-featured PDA in the traditional
sense, it is by far the most advanced and easy-to-use smartphone and
convergence device ever. Beneath its slick, touch-oriented
interface is a version of OS X, with frameworks familiar to any Mac
developer. As a distant cousin to the Newton, and the epitome of
the "always-with-you" handheld, the iPhone seemed to be a natural
platform for running WPS!
- The comma was allowed as a group separator for numbers in all
input.
- The comma was added as a group separator for numbers in some
output.
2008
- Apple released its official SDK for the iPhone, making
native software development in Objective C on Intel-based Macintoshes
available for free! Developers could give away or sell their
applications through Apple's App Store, with Apple giving 70% of all
earnings directly to the developer! Unfortunately, I had no
working knowledge of Objective C, Mac frameworks, or an Intel-based Mac!
- In
an unbelievable stroke of luck, I won an Intel-based 20" iMac at a
tradeshow giveaway (and almost won an iPhone too in a later contest
where I used WPS to calculate the answer to a tedious,
non-deterministic rate problem)!
With the iMac, I registered as an Apple
developer and installed the free SDK. Using the SDK's iPhone
simulator, I created a simple "Hello World" application and began the
long process of learning Objective C, Cocoa, and other Macintosh/iPhone
development frameworks.
- Apple released a new version of the iPhone, adding full GPS
and 3G network capability. To me, this made the iPhone a "must
have" item for its capability and sheer potential for WPS.
- The
simplifier was given the ability to cancel identical-looking additive
inverses that occur at ANY level of expressions and equations (e.g.
"1/(x+2+x-x+x)" becomes "1/(2+x+x)"). This uses the more
generalized approach deemed too expensive in 2003, but not the
completely general approach requiring canonical forms.
- Using
the same mechanism, the simplifier was given the ability to combine
identical-looking terms that appear at ANY level of expressions and
equations (e.g. "1/(x+x-2+x)" becomes "1/(3x-2)"). This also uses
a "visual" approach rather than canonical forms.
- The
simplifier was enhanced to recognize and report instances of division
by zero. Previously, division by zero was only reported during
numeric expression evaluation. As elsewhere, it is left to the
user to manually resolve inconsistent or indeterminate results as
appropriate for the situation.
- The simplifier was enhanced
to convert terms and subexpressions at all levels into a "standard
form" (i.e. factors in terms are sorted, and terms in expressions are
sorted). Converting to a standard form gives the simplifier more
opportunities to use its "visual" approach to simplify equations and
expressions. For example, "(x+1)/(1+x)" reduces to "1", and
"xy-yx" reduces to "0".
A "standard form" is not as powerful as a
true "canonical form", but it has been shown that there is no way to
reduce arbitrary expressions to some universal canonical form.
- The simplifier was enhanced to perform arithmetic on numeric
factors and numeric terms to reduce the number of numeric constants
that appear. WPS' standard form pulls numeric factors to the
front of terms, and numeric terms to the front of expressions (with
integers in front of floating-point numbers)... Arithmetic on
leading numeric items is performed when they can be combined in
"natural" ways (i.e. involving integer results) while preserving
complex constants.
- The "input" command was enhanced to
process the user-defined equation as a whole instead of just
numerically evaluating the right-hand-side to assign a specific
variable value. This allows the "input" command to process
completely arbitrary equations, possibly even containing the input
variable on the right-hand-side.
- I got an iPhone 3G for Christmas and began work to port WPS to
it.
2009
- Stephen Wolfram (Wolfram Research, Mathematica, "A New Kind
of Science", etc.) announces and launches the "Wolfram Alpha" web
service. Wolfram describes Alpha as a "computational knowledge
engine", designed make the world's knowledge computable, and to compute
the answer to nearly any quantitative question posed in a simplified,
free-form language! Alpha combines Mathematica,
scientific/mathematical methods/models/algorithms, terabytes of
"curated" data sources, and heuristic/algorithmic language parsing to
achieve its goals. The breadth and depth
of this project is unprecedented and ambitious, even for Wolfram.
- The simplifier was enhanced to simplify division by a
negative term.
- The
vocabulary was experimentally enhanced to support some "syntactic
sugar" to allow the "unit <unit>" construction to be expressed as
"[<unit>]". For example, "How many unit kph is 55 unit mph"
could be abbreviated to "How many [kph] is 55 [mph]". This
simplifies many unit statements, but at the expense of requiring a
WPS-specific, non-standard syntax.
- The display of numeric
answers was enhanced to show improper fractions (e.g. "5 / 3") as mixed
fractions (e.g. "1 & 2 / 3") also.
- The simplifier was
enhanced to cancel integer factors in fractions that divide evenly
(e.g. "6x/(3y)" reduces to "2x/y", "5x/(15y)" reduces to "x/(3y)").
- The simplifier was enhanced to reduce fractions with integer
factors to lowest terms (e.g. "15y/(10x)" reduces to "3y/(2x)").
The difference between this
simplification and the above (even though the effect is the same) is
that reducing to lowest terms does not require that one factor divide
evenly into the other... The program tries to mimic how people
recognize and simplify fractions by finding those that divide evenly
before finding those that reduce using a different factor.
- The vocabulary was experimentally enhanced to support the use of
time-frequency words such as "hourly", "daily", "weekly", "monthly",
"yearly", etc. These words MUST be used as suffixes (e.g. "cost
monthly", or "2 daily"), NOT prefixes (e.g. "monthly cost").
The potentially-ambiguous terms
(biweekly, bimonthly, biyearly, and biannually) are interpreted
according to their strict definition: "for two". For "twice
each", the program recognizes the official terms "semiweekly",
"semimonthly", "semiannually", and "semiyearly".
2010
- On January 26, installed WPS on my iPhone for the first
time! This was a feature-complete version suitable for real-world
testing outside the confines of the SDK's iPhone simulator.
- On
the same day, Apple unveils the iPad, which could be described as a
supersized iPod Touch with enhanced versions of all the built-in
apps. It runs all iPhone/iPod Touch applications unmodified (at
their original size, or with pixel-doubling to use the full
screen). With the larger screen, larger on-screen keyboard,
keyboard dock accessory, etc., the iPad should be an excellent
(additional) platform for WPS!
With the iPad, Apple releases an updated
version of the SDK so that developers can make or update apps to be
iPad-specific.
- Enhanced the "input" command to include the optional parameter,
"optional". The keyword can be used to prevent prompting for a
variable that already has a value. If used, only an undefined
variable would elicit a prompt... Defined variables would
silently skip the command.
This enhancement can streamline the
flow of "canned" calculation scripts by skipping prompts for variables
that have already been derived from previous inputs.
- The number and quality of predefined scripts was greatly
increased to
automate many common tasks for everyday use, for unit conversion, and
for topics in elementary algebra, geometry, statistics, physics, and
chemistry.
The new scripts take advantage of the
"input" command enhancement to minimize the amount of user input
required.
- The breadth and depth of the knowledgebase and vocabulary was
greatly
enhanced to include many concepts of first-year physics and chemistry,
making the program capable of solving some very complex problems at a
very high level of abstraction.
- Publishing an application to Apple's App Store can be an exercise
in
creative marketing! With that in mind, a (part-creative and
part-automated) brainstorming exercise lead to changing the name from
"WPS" to "AutoMATHic".
- With
nearly all of the app's functionality and content finally complete, the
html-based documentation was reworked to cover the new features and be
better suited for mobile consumption.
- On June 7, Apple unveils the iPhone 4 and the latest version of
the operating system, "iOS 4".
iPhone 4 has twice the horizontal and vertical resolution of previous
models (but re-renders compliant apps automatically), and the new OS
allows multitasking for third-party apps (with simple
"suspend-and-resume" supported with just a recompile). Since iOS
4 will be a free upgrade for all supported devices, its adoption rate
should be extremely high.
- Tested the program on the new SDK's iPad and iPhone 4 simulators,
and worked-out some minor compatibility problems with both devices.
- Tested the program on a borrowed iPad to see how it feels on the
larger screen and how it really looks with the iPad's
pixel-doubling. Minor changes were made to convert AutoMathic
into a "universal app", able to run on all devices and take advantage
of each platform's screen size and resolution.
- Enhanced the equation-solving process to reorder negative addends
into a more traditional ordering as a final step... For example,
this makes the final result of a solution look like "c=f-273" instead
of the less-natural "c=-273+f".
That "unnatural" ordering (used by the program's "standard form") helps with simplification, but detracted
from the overall look of some expressions. This enhancement makes
the
final expressions look more natural and readable.
- On August 2, "www.automathic.info" went live on the internet, introducing the product to the world!
- Submitted version 1.0 of AutoMathic to the App Store on August 8.
- AutoMathic 1.0 was approved and went live on the App Store on August 17!