Goldenseal Pro Progress (Jan 26)

Our staff is making good progress on Goldenseal Pro. The part-time schedule is great. Too much programming time means getting fat. Too much construction work means carpel tunnel syndrome and other joint problems. This is close to the sweet spot in between.

Last summer we hired an experienced QT contractor to write a prototype. By now we have replaced almost all of his code, but it helped to get a running start. The code had a few ‘tricks of the trade’ that we didn’t have to learn the hard way. It definitely was worth $500.

When we first tested the button to make a new record, the app gave a weird database error. It turned out to be an accidental infinite loop. Within a few seconds it filled the file with the maximum number of records that it can hold: 65536 x 4096, or about 1/4 billion. Oops.

Until we ship, those numbers aren’t fixed, but we probably won’t change them by much. It’s a balance between maximum capacity, empty file size, and code complexity. We’ve used Goldenseal f0r 20+ years for our own accounting, and aren’t even in the millions of records yet. So 250 million is very conservative. The file size for that is about 500 gigabytes.

The app now gives a better warning when it starts to get close to the max, just in case someone really creates humongous data. It asks the user to contact Turtlesoft so we can program in a higher limit. It probably will only take a few days of programming and testing to add support for multiple billions of records, but there are more important things to work on right now.

Goldenseal Pro has a lot of interface, which means many small details to finish. So far, QT is handling them well. We’re just about ready to start working on breakdown tables: the most difficult task. It’s where both Cocoa and MFC stalled out. It seems very likely that we can make it work. Then it’s just matter of time to complete everything else.

Six years ago, we hired a different QT contractor to build the first attempt at Goldenseal Pro. He gave up after 6 months. Afterwards we checked his work to see if it was worth salvaging, and decided it wasn’t. That was a fateful decision. After ruling out QT, we subsequently threw away five years trying to build Goldenseal Pro with other frameworks (Cocoa and MFC). First with other contractors, then with our own staff.

I think the difference is that the original guy tried to change all of our existing interface code into QT classes. It made a big, complicated mess, and was extra work besides. No wonder the project failed.

Starting over, our current approach is to use new QT classes for what’s visible. Then link it into our existing code. I suppose it helps that we already did that with two other frameworks. Our staff has learned some stuff along the way. Maybe we only wasted two or three years instead of four.

Oh well. Creative work is hard. It’s not the first time we’ve wasted time, or thrown away big hunks of code. What counts is actually finishing an app. This time around, it’s looking pretty good.

Dennis Kolva
Programming Director
TurtleSoft.com

Rule of Law (Jan 20)

Over the past 33 years, about 2% of the orders for our estimating and accounting software have been fraudulent. In the early days it was bounced checks. Then it switched to stolen credit cards. After each rip-off, we gradually refined the fraud-prevention checklist.

TurtleSoft offered expensive Express Mail shipping for many years, because fraudsters almost always used it. They weren’t the ones paying, so why not? Our staff checked those orders much more closely.

Rule of Law lists were helpful when orders came from unknown countries. They’re calculated by Center for Financial Security and World Justice Project. Countries with poor ROL ratings are much more likely to have fraud.

Basically, Rule of Law is a measure of integrity, reliability, truth, fairness, justice, trust. All the good things that (most) religions try to teach. Boy Scout stuff. It means places where power comes from laws, not men. Where leaders are public servants. Not autocrats, demagogues, despots, dictators, kleptocrats, mobs, tyrants, or whatever.

ROL is important when we mail out rare Swiss Army knives (our side business). Orders to Germany (#6) or Netherlands (#7) will get there. Orders to Russia (#92) are 50% likely to be stolen along the way. Anything below that is a black hole. Our current cutoff is roughly #50.

ROL is why Hong Kong residents keep protesting. Their island is #17 on the list. They don’t want to be swallowed into #89 China, where people can just disappear suddenly, and/or have their organs harvested.

The US is only #21 on the latest Rule of Law list. We fell a couple spots during the Trump era. Ahead of us are most of Europe, plus Japan, South Korea, Singapore, New Zealand, Canada.

TurtleSoft actually sold a copy of our accounting software to a legit firm in Nigeria (#109). The order took many weeks to process. People can’t get regular credit cards there, so payment had to go by wire transfer. It took several tries. Everyone involved said “Um, it’s Nigeria. Are you sure you want to do this?” A low ROL rating has real, negative consequences for those who live there. Ditto for visitors.

In construction, Rule of Law means building inspectors who make sure structures are safe and sturdy. Zoning boards that are fair and impartial. Suppliers who don’t sell you defective goods. Employees and subs who care about their work and don’t cheat or steal. Clients who actually pay you. All stuff that makes it easier to run a business.

Rule of Law varies inside the US. I spent a year managing remodeling projects in Boston, at a time when much of the Building Department was under indictment for bribery. The neighborhoods where I worked probably rated somewhere between #52 Jamaica and #62 Brazil. Everything was so much more chaotic and difficult.

One example: a developer that my boss worked for added an illegal basement unit. It was below sea level. Municipal pumps failed during heavy rains at high tide, so the condo filled with neck-deep water and backed-up sewage. My crew had to put the main project on hold, and wade in for emergency repairs. Fun fact: refrigerators float in floods, then topple and do structural damage.

Less fun fact: that part of Boston is a former bay and mud flats, with 4-story brick row houses built atop wood pilings sunk into the muck and fill below. The developer installed sump pumps to keep the new unit dry. Those pilings had lasted 100+ years because they were always under water. Now the water table is lower, so they’re exposed to oxygen, and rotting. If you ever read about building collapses in the South End of Boston, they’re the result of greed and corruption in the 1980s.

I mention all this because on January 6, the US flirted with becoming a government of man and mob, not laws. Rule of Law is still under threat here. Arnold Schwarzenegger explains how easily things can go wrong.

Integrity is not hard-wired into the human genome. It takes effort to maintain it. Often it’s an uphill battle, because there’s all sorts of short-term profit to be made from lying and cheating.

What does seem to be hard-wired is blind loyalty to charismatic leaders. Not in everyone, but enough. It’s surprising how much impact one person can have on a whole country. Many people just seem born to follow, even when it leads to drinking the Kool-Aid. Or posting selfies while chanting slogans and committing felonies. I must have killed a couple days watching videos made by Capitol rioters.

Now that we have a new leader, hopefully we’ll see increasing Rule of Law, not less of it. Maybe we can find better ways to protect ROL. There’s a lot to be said for not becoming a shit-hole country.

Dennis Kolva
Programming Director
TurtleSoft.com

Covid-19 in New York #6 (Jan 12)

In July, the local Internet provider asked me to do some in-home wiring for a few of their clients. Most of the folks were good about masking and social distancing, but one couple wasn’t. They didn’t wear masks, and got physically close to me even after I asked them not to. I left early, and decided not to go back there. Someone else finished the work.

Soon after that, the couple tested positive for Covid-19. Not surprising, considering their behavior. The second installer had to quarantine. Luckily, I was outside the exposure time window. Phew.

Lately, it feels like there are more bullets to dodge. Cases have turned up in Home Depot, Walmart, most supermarkets, the Post Office, public transport. Since March I’ve kept a spreadsheet of public places where I’ve been, and when. There have been a few near misses, but nothing close enough to need a quarantine. Yet.

New York just entered phase 1B of their vaccination program. As an over-65 I’m qualified to get a vaccine as of today. Theoretically, I’d prefer to wait a bit. For one thing, the Moderna and Pfizer vaccines are well-tested and probably fine, but they are a new technology. I’d rather let other people be the guinea pigs, just in case there are long-term, subtle effects.

Also, they were the quickest to release. It’s possible there will be a future, more dangerous pandemic. If so, it would suck if my immune system had learned how to zap their mRNA carriers. Waiting a couple of months for Johnson & Johnson or AstraZeneca is kinda like saving the big guns for when they are really needed.

A traditional killed-virus vaccine would be best of all, since that approach is extremely well-tested. However those take years to develop. That’s a long time to be living in a bubble. Plus, any vaccines that haven’t started trials yet will have a hard time finding test subjects who weren’t vaccinated or infected. They may never get out the door.

Meanwhile, active cases have spiked locally, similar to the rest of the US. Covid-19 got into one of the local nursing homes right after Thanksgiving, and the number of county deaths jumped quickly from 1 to 17. That seems to be how the disease works in other places, also.

Since Christmas, the number hospitalized here has varied from 20 to 32. That’s much worse than the Spring ’20 surge, which maxed at 16 and was only over 5 for a few days. Here’s the chart to date:

Thick blue is active cases divided by 10. Red is the number in hospital, which lags by a few weeks. There was a spike of active cases in early March, but tests were scarce then so it’s not in this chart.

Most surrounding counties are having a worse time than here. Cattaraugus only updates their website once or twice a week now, ever since new cases jumped from a few a day to a few dozen. They used to be much more chatty. Chautauqua (next door to them) has 111 hospital beds, and 131 patients. Steuben has 774 active cases, 2,214 residents in quarantine (2% of their population), and only 15 contact tracers. They’ve had 153 Covid deaths so far in a population about the same as here.

The Rt tracker website is a good predictor for future disease impact. As of today 15 states are below 1.0 and reducing their active cases. 36 are above it, and still getting worse. Now that the holidays are over, there’s more hope it will improve.

One (tiny) good impact of Covid-19 is that many people put up extra Christmas lights this year. Walking around at night has become very entertaining. Winter is a bit less bleak.

Now we just need to survive Jan 20.

Dennis Kolva
Programming Director
TurtleSoft.com

State Payroll Withholding (Jan 6)

Yesterday, TurtleSoft released 2021 payroll tax tables for our accounting software. It’s our 31st year of doing so.

We kinda got into the payroll software business without meaning to. Its origins are similar to our estimating and accounting software. Turtle Creek Construction never had actual payroll: back then it was easier to pay under the table, especially for short-term workers. But as the software biz ramped up, suddenly there were actual white-collar employees who needed withholding, FICA and the whole nine yards.

Eventually, the early cobbed-together payroll spreadsheets were good enough to include in MacNail Accounting. It started with just New York and California, but expanded to the whole US a year later. The whole system improved vastly in Goldenseal, and we even added Canada.

Updating US payroll is quite the PITA. 50 states is a lot to wade through. Even worse, many states have found odd-ball ways to calculate withholding, and most years there’s at least one state that finds a new, even wackier way to do it. I think creating tax formulas is probably one of those low-status jobs that gets pawned off on some lowly official, or maybe the brother-in-law of the Governor.

A couple years ago, Utah changed their payroll withholding formulas to something complicated that Goldenseal couldn’t handle. Rather than write new code for just one state, we decided to graph their numbers, and figure how to match them. It turned out to be a straight line. So we now have a simple one-step table that gives the exact same results.

Connecticut is even worse. I think they must have disliked some part of their “tax curve”. Rather than tweak it, they added another table to correct it. Then that caused new problems, so they added another table. Then that still wasn’t right, so they added a couple more: including the Table C 3% Tax Rate Phase-Out Add-Back table. Dave Barry would consider it a bad name for a rock band. Someone with basic math skills could simplify the whole mess in a day or so, but I’m sure the political and bureaucratic process would drag out for months or years.

There’s a similar problem happening with the response to Covid-19. States and local health departments and governments are kind of on their own. Everyone is guessing and improvising.

The good news is that it will provide interesting data. Maybe we’ll learn from the mistakes.

Dennis Kolva
Programming Director
TurtleSoft.com