Car Culture (April 7, 2025)

18 months ago, TurtleSoft moved from Ithaca to a suburb of Binghamton NY.

Ithaca is a very walkable city. That’s partly because of its history: most of its growth was in the 1800s, when you traveled by foot or horse. There’s also some geology: the city is compressed into a narrow glacial valley with a lake at one end, so everything is close by.

Binghamton metro is typical USA, with much better support for cars than for bikes or pedestrians. That’s also due to history and geology: most growth here was in the post-automobile 1900s, and the Susquehanna valley is much broader.

Up until last week I mostly liked the change. Driving is so much easier here. Walking is worse, but there is enough to do on this property that the lack of nearby gorges and college campuses doesn’t matter much.

Then the engine on my car wouldn’t turn over. A sign that my 09 Honda Fit may have reached end-of-life, mostly due to road salt. While waiting for a tow to the nearest repair shop, I started to look at new cars online. Except, there was no way to go see them. All the car dealers are on four-lane highways lined with commerce, aka stroads.

The local transit system is pretty good, but it only covers business districts and residential areas. No bus service anywhere close to the dealers. Also no sidewalks or bike lanes there, just high-speed traffic with lots of turns and turbulence. Dangerous for pedestrians and bike riders.

I rode bicycle a lot in Ithaca, and was careful to spend most time on quiet streets, bike lanes or sidewalks. Despite that, over the years I had 6 collisions with cars. 5 were slow-speed hits at intersections, so nothing worse than a few bruises (and one totaled bike).  The worst happened on a rural road, when a pickup full of rednecks slowed down beside me, and carefully dropped a half-empty can of beer exactly ahead of the front tire. It clamped around the rubber, rotated until it jammed into the brake, cut the tube and tire, took out a few spokes, sprayed my crotch with the contents, and flipped me into the ditch.

I also was hit twice by cars while on foot (also slow speed at intersections). My advice for those: jump on top and grab onto whatever you can. One driver went half a block before noticing me clinging to their hood. They must have been thinking about something more important than driving.

In 2009 I also had a suddenly-dead car, but could walk to all the dealers. Here, test drives would have needed 6 cab or Uber rides, just to get around in a safe metal box. Fortunately, the problem was a seized bearing in the AC, easily fixed with a bypass belt.

I’m mobile again, but the clock is ticking. I may need to buy a motorcycle for emergency backup transportation. Cars are great, but not when your comfort depends on them.

Dennis Kolva
Programming Director
TurtleSoft.com

Accounting for Android (Mar 24, 2025)

Last October, TurtleSoft hired a subcontractor to write networking code for our new accounting software. It was a three-part contract: first for desktop, then for Android phones and tablets, then for iPhone and iPad.

The desktop part finished in December. It lets multiple users access the same file over a LAN (local area network), similar to what Goldenseal does. Even better, it also works over the Internet. Connect a laptop to Wifi, enter the IP address for the server machine, and it’s just like you’re at home.

Part two of the contract was to build a prototype app to run on Android. That just finished last week, much later than expected.

The good news is that we probably can run the full desktop app on Android tablets, plus a smaller, simpler version on Android phones. The bad news is that programming it will be hard. Getting Qt, Android and Java to play nice with each other is no easy task.

Part three of the contract starts next: building a similar prototype for iPad and iPhone. Hopefully it will be easier.

The projects for mobile devices were mostly just “proof of concept”. We wanted to see if they could work at all, how they would feel to use, and how hard they’d be to program. Final work on them will wait until the desktop version is released and stable.

Meanwhile, testing on the desktop app still turns up up plenty of bugs. We used it full-time to run our own business for a while, but had to revert and re-enter a couple weeks of purchases and sales, all because of a serious bug in bank transactions. They were missing some important data that only showed up when we added running totals to the display.

If the iOS project goes quickly enough, we plan on a first public release of the new accounting software for Mac and Windows desktops, soon after it’s done. If iOS bogs down as much as Android, then we’ll launch the desktop version before it finishes.

Dennis Kolva
Programming Director
TurtleSoft.com

Release Schedule #2 (March 6, 2025)

This week is a milestone for our new accounting software. TurtleSoft now uses it full-time to run our own business. We have used it in parallel with Goldenseal for many short spells, but now data only goes into the new file.

The new app still has plenty of glitches. Using the software every day turns them up more quickly. Most are just annoyances that don’t take long to fix. If something more serious turns up, hopefully the daily backups will be enough to allow recovery.

The previous TurtleSoft company file had a few hundred bad Sales breakdowns buried in it, left over from similar beta testing in the early days of Goldenseal accounting. Most were fixed by the code that translates from Goldenseal to the new app, but some were too damaged. Those didn’t survive the transition and disappeared. In the new accounting app, at least that block of Sales records from the 1990s won’t crash any more when you view them. Now they just give an error message.

Meanwhile, work on a mobile version is progressing, but slowly. Android is very difficult to work with! Our staff has a comfy routine to build test apps on Mac and Windows, but phone and tablet are much more fussy. Mystery problems and error messages galore.

If the desktop app seems solid enough by the time Android work is finished, the first release will happen soon after that. If still too many bugs, it will wait until after work is completed for iPhone and iPad.

Dennis Kolva
Programming Director
TurtleSoft.com

Construction Price Updating (Feb 22, 2025)

TurtleSoft started in 1987 with construction estimating software written in Microsoft Excel. Our new accounting/estimating software will be the 4th generation since then.

Selling software in a “vertical market” like construction is tough. There are plenty of special problems to deal with, and a small pool who want to buy it. We don’t even get the full construction market: most of our users are a certain size of remodeler. Not too big, not too small, not too specialized.

In future years, we plan to focus more on general-purpose small business software, and not spend as much time on features that are specific to construction. However, there is one task where we can make a huge improvement for our builder and remodeler users: keeping material prices up to date.

The obvious place for us to fetch material prices is from the Home Depot or Lowes websites. Each Cost Item record would need to store a page URL. Then we could add code to get on the web, and find the price inside the HTML on that page.

Alas, Home Depot and Lowes really do not want anyone to scrape prices from their site. Item prices are not visible at all in their HTML code. Instead, it is “obfuscated”. Some Javascript must fill in the price while the page loads, probably by doing math on numbers that are scattered in the source text.

In theory, we probably could find a way to hack their systems. But then it’s an arms race: every time they make a minor change, we must spend many hours to figure it out again.

Smaller chains have more potential. We checked Menards in the Midwest, and their website pages do have pricing that we could access and import. If there are enough other sources to cover most of the US and Canada, it will be worth our time to develop a price-grabber system.

84 Lumber is about the only small chain that has survived around here, and their website does not even list prices. But there may be others that can work.

To check if your own local supplier can be used for automatic updates, follow these steps:

      1. Open a page for any specific material. Check the listed price.
      2. View the HTML source code for the page (View–Developer–Page Source in Chrome, Tools–Browser Tools–Page Source in Firefox).
      3. Search for the price text. It may be listed in several places.
      4. Check a few other products.
      5. Are all the prices near to some marker text that is the same on all pages? If so, please let us know.

Dennis Kolva
Programming Director
TurtleSoft.com

File Size (Feb 11, 2025)

There’s a saying for construction work: cheap/fast/good, pick any two.

It also applies when writing software for accounting. TurtleSoft is not rolling in money like the early to mid 1990s, so this time around we had to go for cheap/slow/good rather than cheap/fast/bad.

One issue we still need to decide on is file size. For that, the choice is more like fast/small/reliable, pick any two.

The NeoAccess database we used for Goldenseal was fast & small, and not reliable. We had to rewrite their code in order to make software good enough to sell. It made files bigger. Some of that was because we added sanity-check data to the indexes that kept track of where each record is located. We also added a second place to store record addresses: a list sorted by file location instead of a binary tree. That way, if the Neo code lost track of a record, we could still find it and repair the damage.

For the new accounting software, we used the same ideas, but added a few more to make the database even more reliable. It has a price. An empty Goldenseal file starts out at 106K. The new app currently starts at 14 megs, over 100x bigger.

Much of the extra bulk comes from a design decision. Any record database needs to keep lists of where records are located in the file: it’s called an index. There are over 200 record classes, and each gets its own index.

NeoAccess started a new index the first time you used a class. It went at the end of the file. Once an index had 8 records, another index went at the end (later we upped that to 32). Their approach was frugal with both RAM and disk space, but the result was indexes scattered throughout the file. They were hard to locate, and fragile. One stray bit change in an index could destroy a big chunk of the file.

The new app starts with 200+ empty indexes at the beginning of the file, even if you don’t ever use them. Doing that adds to file size, but it makes repair easier. We know exactly where everything is. Right now the indexes are big enough that the “tree” of indexes is not very deep. We can shrink them, but it will make things slower and a bit less reliable.

Another index tracks the contents of each file sector. More empty space at start-up. We also can shrink that, with similar consequences.

Goldenseal is a monster. It does all sorts of things: construction estimating, accounting, project management, rentals, sales, contract writing. Most users don’t need all that. We really need to pivot to smaller, cheaper apps that just do one or two things. Those users probably won’t like to start with a 14 meg file.

This is one of several quandries we are still working on, in the time left before first release. There are many things we can do to reduce file size, but it’s a matter of weighing the costs.

Dennis Kolva
Programming Director
TurtleSoft.com

 

Release Schedule (Jan 28, 2025)

Almost a year ago, I announced we were ready for a first release of our new accounting software. However, the app just was not ready then. Testing turned up more bugs than expected. Too much important stuff was still undone. Also, building a finished app able to install on Mac and Windows machines proved to be harder than expected. There are extra hoops to jump through, these days.

After a extra year’s work, code quality is looking much better now. Almost everything important works like it should, and almost all serious bugs are zapped. Last week we fixed about 1000 minor compiler warnings. Most were trivial, but a few future mystery bugs lurked in there. Those are now zapped.

The past couple months our staff has focused on multi-user coding, and now Android. Soon iOS. We found a good subcontractor who is doing the hard stuff. What that is done, we probably will also hire him to set up the final builds for Mac and Windows apps. Most likely it will happen in 2 or 3 months. During that time our staff can do more testing, and iron out more wrinkles.

Being able to run business software on any combination of desktop, tablets and phones will be a big plus for TurtleSoft. Intuit and most other competitors have shifted to online “software as a service” systems. The monthly fees are great for their bottom line, but it leaves a gap that we can fill. Some small businesses will prefer to run locally with their data stored on their own desktops. If they can also use phones and cheap tablets at jobsites and on the road, all the better.

A year ago we assumed the first release would be an “alpha”. Something to look at, but not reliable enough to use long-term.  This year we’ll start with a “beta” release. Some lingering bugs for sure, but good enough to rely on day to day.

Dennis Kolva
Programming Director
TurtleSoft.com

Cars vs Computers (Jan 21, 2025)

When thinking about computers, I like to compare them to automobiles. Both technologies have followed similar paths, with a gap of about 100 years.

Cars and computers started out big, slow and awkward: massive steam tractors in the 1850s and 60s; room-size mainframes in the 1950s and 60s.

Then came a half-century of innovation, much of it done by small start-ups. One round created useful vehicles to move people and goods faster than horses. The other built hardware and software to run a business, view cat videos, and do other amazing things with glowing rectangles.

Next was a couple decades of industry consolidation. For cars, most innovators either disappeared, or became brand names at General Motors or Ford. Computer hardware and software followed a similar path, boiling down to Microsoft, Apple, Google, Amazon, Adobe, Meta, Intuit.

Then came a long spell of bloat, perhaps because competition was gone. Cars grew chrome, fins and stylish updates, with little focus on being reliable transportation. With some exceptions (e.g. VW Beetle), 1920 to 1970 was filled with gas-guzzlers: dangerous on the road and hard to maintain.

It took a few more decades until cars turned into reliable transportation that just worked, without much fuss. My current Honda Fit is light-years more reliable than my first vehicle in the 70s: a Fix-Or-Repair-Daily pickup truck.

Computers are not doomed to follow the exact same path as cars, but they sure are in the bloated/mediocre stage now. TurtleSoft first faced that 20 years ago, as Apple migrated through chips, frameworks and programming languages. At first we kept up, but each change grew harder. Goldenseal 4.96 was the furthest we could go without a total rebuild.

Coding a 64-bit desktop accounting app was a long, failed slog, mostly because of poor quality tools from Apple and Microsoft. Qt, a surviving scrappy start-up, saved the day.

Right now we’re struggling to build accounting for Android. It relies on code from two other superpowers: Google and Oracle. Setup has been a version-matching nightmare. We still can’t get it to build apps on TurtleSoft computers, despite more than a week of trying. There are too many libraries necessary, and no instructions on how to get them working with each other.

We will persevere, but it’s not an easy task.

Dennis Kolva
Programming Director
TurtleSoft.com

 

 

Accounting for Android (January 13, 2025)

Our new accounting software now runs on Android tablets. It’s not even a reduced version: the GUI is almost identical to the desktop app. You can store your company file on the tablet, and use it just like a cheaper laptop. It’s also possible to keep your data on a desktop machine at the office, and sign on as an Internet client.

We haven’t tested the tablet version yet, to make sure it lives up to the promise. Our staff is still setting up Qt and Android so we can build the app here and run it. Setup is a complicated process. At the moment, all we have is a screen recording showing that the software works.

It may take a fair amount of testing and tweaking to get Android tablets to be crash-free. The app relies on at least 4 layers of code libraries, and they don’t always work well together. Even worse, Android doesn’t have much of a debugger, so we can’t step through the code to figure out problems. It may need much trial-and-error to get everything in order.

Work also is progressing on a phone version. That will be much simpler than the desktop and tablet versions. It only acts as a client, and only does one thing at a time. Getting phone accounting apps to be reliable will be much easier. They probably also will be used more often, simply because everyone has a smartphone in their pocket these days.

Next on the list is iOS apps to run on iPhone and iPad. With luck, programming those will go as smoothly as the Android project.

So far, Qt seems to be performing pretty well as a multi-platform development tool. There’s a lot to be said for writing code once, then having it run on 6 different types of hardware.

Dennis Kolva
Programming Director
TurtleSoft.com

2025 Payroll Update (Jan 1 2025)

Our staff just finished US payroll files for 2025.

Similar to last year, we only updated federal tables, plus tax tables for a few larger states. If your state wasn’t updated, please contact us and we will provide them. We did update SUTA cutoff amounts for every state (the actual % rate you pay varies for each company).

Starting this year, US Federal tax tables are in a separate file. Importing payroll withholding tables is now a two-step process: once for the state, once for Federal.

The change saves us a few hours of tedious copy/pasting. No need to put the latest Federal tables into 51 state files. More importantly, it also makes the setup process more reliable. A few times in past years, we pasted into the wrong cell. That totally zaps all the data, and results in extremely wacky withholding amounts (or zero withholding, depending).

Each annual update requires us to type in several hundred numbers. Most years we also need to redo table setup for one or two states. Some tax departments find extremely weird ways to calculate withholding. So, anything we can do to simplify the process is worthwhile.

We probably will be able to go back to a full 50-state-plus-DC update starting in January 2026. However, right now our staff is very busy finishing the new 64-bit accounting software. We don’t want to spend an extra couple days typing in numbers that won’t be used.

Dennis Kolva
Programming Director
TurtleSoft.com

 

Colors (Dec 27)

Our staff uses the Qt framework to build the new accounting software. It creates apps for both Mac and Windows. If there’s enough demand, we could even release something for Linux.

Every month or two, Qt gets an update. Usually they don’t affect our code, but the latest one broke the Windows GUI. All colored backgrounds suddenly went white.

A while back I ranted about past hassles with text on computers. Colors have a similar rocky history. This is not the first time they’ve caused problems.

Our first estimating software (MacNail) ran on the Mac Plus, with simple one-bit black & white pixels. Monochrome was the rule back in those days.

Soon, the Mac II came along with an 8-bit graphics card (enough for 256 colors). In order to actually see more than B&W, we had to jump from the standard one meg of RAM to 4MB (an extra $4000, inside an already expensive machine).

Because memory was so precious, apps and hardware often used a smaller range of colors: usually 8, 16, 32 or 64 of them. Goldenseal still contains ancient code to deal with black & white and the many possible color gamuts.

256 colors was enough for many tasks, but it was too sparse for photos. The best you could do was a custom set of colors to match the contents, then dither with dot patterns to get anything in between. Not great, not terrible.

As computers matured, RAM grew cheaper and colors improved. First it was 16-bits (65,000 choices): fine for almost everything, but photos still needed to be dithered. The specs used 5 bits apiece for red and blue, and 6 bits for green.  Human eyes are more sensitive in the middle of  the spectrum.

Then came 32-bit full color, with one byte apiece for red, green and blue. It allows for 16 million hues, good enough for all but the fanciest photo editing (humans can only distinguish a couple million colors). The left-over byte was soon used for transparency (called the alpha channel).

Life would be easier for programmers if everyone standardized on one color system, similar to UTF-8 for text. Sadly, that is not what happened. Web standard is 32 bit RGBA, but Apple uses decimal numbers instead. Qt stores 2 bytes apiece (64-bit colors). The spectrum also may come in CMYK (cyan/magenta/yellow/black) or HSV (hue/saturation/value), plus the usual RGB and RGBA. They all get to the same places, but with different numbers and different math.

The current Goldenseal uses a palette of 256 colors for lines, text, and field background colors. We set up a custom color palette with extra pastels (for backgrounds) and dark shades (for borders and text). Still plenty of bright colors in between.

We would have kept the same setup for the new accounting software, but 32-bit colors are easier to program. We actually store 64-bits for them, just to be compatible with Qt. Memory is cheap, and maybe it will help for a future RobotOS which adds X-ray vision.

Meanwhile, alpha channels are still evolving (it’s what broke our Windows version). Opacity doesn’t have much impact on accounting software, but we did find a few places to use it. You might like having alphas if you print forms in color?

Color pickers only set RGB colors, so the new Custom Layouts puts transparency into a separate dialog. Right now, it gives weird decimals as we convert between percents and integers. 100 doesn’t divide into 256 very well.

Dennis Kolva
Programming Director
TurtleSoft.com