New Goldenseal File Format

While working on the code that saves changes to disk, we ended up rewriting some old, complicated NeoAccess code which kept track of “dirty” records that needed to be saved.  It was 2 files and a few hundred lines of code, that we replaced with about 10 lines.  Saves will now run a bit faster, but more importantly, will be more reliable, and much easier to maintain.

We ran into the same thing while rewriting lists (arrays) in PowerPlant. The new code is about 10% as big, and 10x easier to understand.  That translates to easier maintenance and fewer bugs.

The C++ programming language has improved enormously since we started using it, which is the main reason we could shrink things so much. Since 1998, the “standard library” has added many new classes to handle programming tasks that used to require hand-rolled code.  Our old compiler did not support them, but now we can be more up-to-date.

Since the initial work has gone so well, we are ready to start a major rewrite of the basic database code.  We can throw out a lot of hard-to-maintain code from the 1990’s, and replace it with clean, modern, simpler language.  It’s also time to modernize the file format.

Back in version 2.0 we did a similar overhaul to the database format.  In that one, users had to export their data to a text file, and then import it back into a new file.

However, this time around we can make the process much easier.  When you open your old company file, it will automatically read all your records using the existing format, and write them to a new file with the new format.  Everything will look the same in the new file, but the basic database format underneath it will be different, and better.  Slightly better performance, and much greater reliability.

We will be testing the new code on our own Turtlesoft company file this summer.  Some time in the Fall we will also be ready for beta testers, to try out the new format.  Please let us know if you are interested.

Dennis Kolva
Programming Director
Turtle Creek Software

Goldenseal Pro Progress Report #5

Goldenseal Pro now reads most types of records from the database. The new software code is working on both Macintosh and Windows, and we are definitely finding it helpful to do both in parallel.

The next step is to have it write changes back to the file.

In the past 2 weeks our staff rewrote the basic memory handling, with a new class that replaces the old memory “handles” with modern C++.

We are still working on the “array” classes, which manage all types of lists.  We flip-flopped for several weeks, but finally decided that the old PowerPlant code is just too complex to be worth saving.  Instead, we will rewrite our arrays from scratch using modern C++ libraries.  As with any remodeling project, deciding on how much to remove and replace can be a difficult judgement call!

This basic “foundation” work goes slowly, but we will soon be ready to move on to the GUI (Graphic User Interface). That’s when progress starts to become quicker and more visible.

Dennis Kolva
Programming Director
Turtle Creek Software

Phone/Pad apps

Our long-term plan is to make Goldenseal a “home base” that runs on a server in your office, and then allows log-ins from anywhere with an Internet connection.

When connecting from a remote laptop or desktop, it will use our current multi-user code, but through a secure VPN (Virtual Private Network) instead of a local network.  While on the remote client, Goldenseal will look the same as if you were running it on that computer.

To connect in from phones or pads, it’s more complicated.  They have screens that are way too small for desktop-style windows.  Memory is much more limited, and processor speeds are slower.  They also use different operating systems (iOS & Android instead of Mac & Windows) that are designed for small mobile devices rather than large-screen hardware.

Because of that, we can never run the full Goldenseal app on mobile. Instead, it will have to use very simple, single-purpose apps that connect to the parent app.   We’ve identified the following tasks that will each get a separate app to “phone in” to the home database:

  1. Expenses.  Data entry screens similar to the Material Purchases, Subcontractor Costs and Other Costs windows.  Probably ability to search prior records with something like the Find command.
  2. Employee Hours.  A screen similar to Employee Hours, for an employee or foreman to enter work hours from the field.
  3. Estimates.  Similar to the Estimates window, for entering measurements and calculating costs.
  4. Sales Billing.  Similar to the Sales window, to write up and print details for a sale or a service call.
  5. Contact/Problem/Project Logs. Similar to the current windows, for entering and tracking meetings, calls, punch lists, project events, etc.
  6. Project Billing.   This may be too complicated for mobile.

When we finish Goldenseal Pro, we will “spin off” smaller desktop apps that do each of the above, for people who only need simple accounting.  That way we can design the mobile and desktop versions of the small apps to look similar. It will be easier for users to switch from desktop to mobile, and also easier for our support staff to help with both.

Fortunately, Turtlesoft started off writing apps for the 512×342 Mac Plus, so we are already experienced with small-screen design.

Dennis Kolva
Programming Director
Turtle Creek Software

Goldenseal Pro Progress Report #4

Our contractor and staff are still working on some basic code updates that are needed before we can start writing the GUI (graphic user interface) for the Goldenseal Pro software.

Back when the Mac first started, RAM was scarce and expensive.  To manage with only a megabyte or less, it had to swap memory around all the time, using memory “handles” to keep track of its location.  That code is now obsolete, and we are rewriting all the memory-handling code to use modern C++ libraries.

Likewise, moving data around used to be a slow process, and it required careful use of “buffers” and “streams” to optimize transfers to/from the hard disk or network. These days, everything is faster, and the operating systems are smarter.  That means we no longer need to worry about low-level optimizing, so we can throw out a lot of old, fragile code, and replace it with modern C++ libraries.  Sometimes one or two lines of new code can replace hundreds of lines of old stuff.

If Goldenseal Pro were a remodeling project, this would be the stage where we are tearing out the old wacky wiring and outdated lead & iron pipes, and replacing it with tidy new romex and PVC.

Dennis Kolva
Programming Director
Turtle Creek Software