A few weeks back, we got hit with a heavy ice storm, and the damage to our grounds was pretty extensive. Our house, garage, gardens, and fences were spared, although there were a few close calls. We’re waiting for our “tree guys”, Saunders Tree Service, to take care of customers with more urgent damage before they come in and clean up “the big stuff”. Meanwhile I’m waiting on an electric chainsaw from Ego to arrive. I’ve got all the safety gear, I just need something a little more capable than the bow saw I usually use for branches and small trees. Sawing is a great workout, but if I were to stick with a manual approach I’d be at it until the fall, at least.
Meanwhile, we’ve got firewood-length logs hanging about, the result of taking out some dead Ash trees and so-called Manitoba Maples in previous years.
About 1/4 of the logs left to split
We’ve got an electric “5 ton” log splitter, but it’s just not up to this job. It’s time to dust off the traditional tools, namely a splitting axe and a sledgehammer. Splitting wood makes sawing branches seem like a jog in the park. It’s tough work. Bashing away at these logs brought back memories of being a child, going to Christmas dinner at my step-grandfather’s place. In hindsight, I realize that “Old Man Wood” as he was known (then in his 90’s so the moniker was well-earned) ran an estate that was the closest thing to a Lord’s manor that we’ve ever seen in Canada. The main house had something like 17 bedrooms in a wing that was never used and not in the best repair. A dance hall with four organs, one in each corner (also not in great repair, only two still worked), two greenhouses, two dining rooms, with a partition between them that would get opened for big holiday dinners, and two parlours, one with a grand piano. The kitchen featured an ancient wood stove, possibly two. The estate had three houses for “the families”, which I just now realized were probably much like the farmers in Downton Abbey, despite this being the 1960’s! Last time I dropped in, curious to see how it had fared, his descendants had fixed the place up and were running it as a B&B.
What reminded me of dinners there was the memory of the young farm hands in a woodshed attached to the kitchen, splitting logs to feed the stove that would in turn cook a feast for about 30 people. My recent efforts at splitting logs made it clear why it was a job given to those with younger, stronger bodies. My current capacity for a session of log splitting is merely one dolly load.
Just a little less wood than I can manage to split in one session.
This particular load is a little less than I could manage on a day dedicated to splitting. It’s a little less because we also need a place to store the wood. Thus the first part of the day was turning a box full of parts into this storage rack:
A newly assembled firewood storage rack.
The assembly instructions for this thing score about 3.5 on the accuracy and readability scale (for a reference IKEA instructions tend to score an 8). Notably, the absence of some detail for parts orientation led to a little disassembly and reassembly. In one case the wrong bolt was specified, but thankfully the kit supplied the correct amount. They could have also changed the order of assembly and both avoided the ambiguity that led to work done twice, as well as eased assembly (I often use my height and very long arms to successfully ignore “needs two people to assemble” instructions, a slight change in order would have made the process even easier).
The image above shows the results of two days splitting wood, although the first day also involved excavating the space for the rack and dropping in some old and very heavy patio tiles, and the second assembling the rack. I may be ambitious here, but I’ll be aiming for two dolly loads per day. If I can manage that, this rack should be nearly full in about four or five days.
The latest update on the chainsaw is either Thursday this week or the week after, and we have another smaller rack on the way that will be dedicated to kindling-sized wood. That’s step two, and I expect we’ll have enough kindling to last more than a year, maybe two if we ration it.
At some point, cleanup steps will become sufficiently mixed with ongoing maintenance and peripheral storm-related damage that the distinction will be lost, but that seems a long way off at the moment.
It is a “how the hell is it Friday already?” kind of week. It’s been a combination of ongoing clean-up from the ice storm, restocking, general maintenance, and a dollop of guilt. Hopefully the guilt will help me keep this short.
Over the years, like everyone else in the area, we’ve lost all but our youngest Ash trees to the Emerald Ash Borer Beetle. This has left us with a good number of logs lying about, cut to firewood lengths by the crew we hire to take them down. Cleanup from the storm is going to increase that substantially, as well as provide a big supply of smaller branches that will make good kindling. Last week we cleared some new space for a new wood storage rack, and I spent Monday afternoon splitting logs. We’ve got a little “5 Ton” electric splitter that does a great job on smaller logs but chokes on these. So I got the wedge axe and the sledgehammer out and took to splitting them old school. Man, that’s tough work, but I made a significant dent in the pile before running out of steam.
I had planned to pick The task up on Tuesday, despite some complaining muscles, but winter is still hanging on and had other ideas:
A week into April and winter is still hanging on.
There are still many other small jobs to take care of, so the rest of the day was spent getting something done, warming up, getting another thing done, warming up, and so on. Biggest achievement: getting the cable back on our laundry line, after I managed to knock it off while trying to clear it from ice. It took me a while to remember that the way to get this done is not to set a ladder in a precarious position on the tree the far end is attached to, fearing that one slip will send me crashing onto the large rocks below, but to disconnect it at the house side, stretch up (I can just barely reach it), pull the wheel assembly off, re-thread the line, hook it back up and then do the tough part, which is re-tensioning it, back at the house where it can be dropped to chest level. I’m hoping that when this inevitably happens again, I remember this instead of spending 30 minutes re-discovering a non-life-threatening solution all over again.
I also managed to release NovelWriterExtract, a tool that will be of use for a specific kind of writer who is highly analytical when it comes to reviewing their work, and who is using novelWriter as their writing tool. So, like maybe five people. But hey, I’m one of those five and I’m happy about it!
Wednesday started with a restocking run. We aim to stockpile 4-6 weeks of non-perishables with a single trip to Costco, but this time with an added layer of complexity: aggressively minimizing product coming from the country run by a tariff-obsessed madman. By the time I’d returned from that, the new resin printer I’d picked up at a decent discount for In3D arrived. I have a project that needs a big pint volume, and this thing is huge!
This box is big!
It’s so big that I had to do some significant re-arranging of the print shop. I have a mid-sized CNC machine that takes up a lot of room for nothing. It’s not in use because the amount of sawdust it creates would turn the rest of the shop into a disaster area. The printing operation prefers nice clean, dust-free, almost clean room conditions. The CNC will move to the garage, but at the moment the garage is a disaster area in need of a major renovation (not to mention a plan and a bucket of money) so the CNC sits here idle. I stole the clearance space the CNC would need to operate to move a shelf, thus giving me room to move a few other things around, which ultimately cleared space for this monster. By the time all that was done, I was both exhausted and “out of spoons”*. Setup, calibration and test prints have been deferred until I find more time.
Thursday was a trip to Toronto to go to the dentist. There are some good reasons why we endure a two hour drive each way to go for a routine dental appointment, but I won’t bother going into them here except to say that if you’re closer to the Sheppard and Warden area, look up Dr. Lindzon. I had gone in with fears that a broken tooth was going to require an expensive crown, but fortunately all that was required was a filling (okay, there’s one of the reasons; other dentists I’ve used would have had me into an expensive crown in no time, he’s more about the right level of care than bringing home the big bucks).
Then more re-stocking. First at Blue Sky Supermarket. Blue Sky is a massive supermarket full of foods you’d find in a Southeast Asian menu. If we can even find an ingredient out here in the country, the cost will be ridiculous. For example, we can buy a tiny bottle of sesame oil for $12 here or get a huge one at Blue Sky for $7. They also have a huge selection of spices and spice mixes at half the price of Costco’s limited selection. Even then, we couldn’t find a couple of items like Poha, a flattened rice common to Indian cuisine. Enter Namaste Indian Supermarket, where we picked up the last few items on the list including Poha and Fenugreek leaves.
This left us hungry, so we decided to look for fast food that can’t be found in our small town. This used to mean a quest for Burritos, but a year or so ago a branch of Fat Bastard Burrito opened in town, so this time we went on a quest for Shawarma. Our first stop was Towny Shawarama. A ramshackle pile of equipment in place of a cash register and a menu board with gaping holes where the prices should be put us off, despite a 4.8 rating on Google. Our next attempt was at Big Bites Shawarma, where staff were cleaning the front window as we approached. As my wife observed, if you’re wiping down the front window, everything else has already been cleaned. This was confirmed as we entered a spotless shop. I got a freakin’ huge Shawarma, she got a Falafel plate. Prices were more than reasonable, service was great and the food was excellent. Definitely earmarked for a return visit.
The drive back wasn’t bad, considering my low tolerance for urban traffic these days. I can still switch into “GTA Driving Mode”, which requires a strange mixture of patience, aggression, and courtesy, but isn’t much fun. As a friend once observed, the key is to be able to read the “automotive body language” of other drivers and respond appropriately. Still, driving in the city is far more demanding than the big source of complaint here, which is that sometimes it can take all of four minutes to get over the bridge. Four entire minutes! This makes the Toronto driver in me laugh, hard. Other than that, we had a mixture of snow and rain on the trip back, none of it heavy enough to be a concern.
Now here it is Friday evening. I’d started this post in the morning, hoping to fire it off quickly and get on with the day. Alas I had forgotten that we had a visitor scheduled to drop in this morning, so that plan was replaced by a relatively intense effort to clean the house. As it turned out, our guest couldn’t make it, but heck, the place looks better!
Oh yeah, the guilt. Tomorrow is the Annual General Meeting for Spirit of the Hills, our local arts association. I still have responsibility for managing our membership and over this week I have both failed to send our President a current membership report and to remind members who haven’t renewed that they have to do so before the AGM. Clearly some stuff needs to get done tonight! Then, last but not least there’s the feeling — I’m not sure which word describes it best, guilt, remorse, or frustration — the feeling that through all of this I’ve written maybe 100 more words of outline for the novel. A novel that I wanted to finish a year ago, and now each time I work on it, completion seems to get more distant. In part, I blame recently reading A Passion for Narrative, by Jack Hodgins and his emphasis on the benefits of reviewing, re-drafting, and repeatedly honing a manuscript until it’s the best it can be. This has left me in dread of being five years down the road, working on draft nine. It’s a somewhat irrational dread, but a writer’s mind can pay on them this way, and I am not immune.
* Spoons are a concept I first discovered in the autistic community. This references the limited pool of resources we have for doing things that neurotypical people seem to do effortlessly, such as interacting with other humans at a social level. At some point we run out of this resource, and are at risk of going into a meltdown. In this case, the spacial reasoning required for me to figure out how to move everything around and still make it all fit in some kind of workable configuration pretty much exhausted my abstract thinking resources, so doing any more actual work, or writing for that matter, wasn’t really possible.
A large part of running a web hosting business, which I did for nearly two decades, is protecting customers from scammers, spammers, and hackers. This was a constantly escalating battle, and now with the addition of a whole new class of aggressive AI scrapers, one of the main reasons why I got out of the business. Waging low-level warfare for two decades was enough. Time to rest.
For a flexible definition of “rest”.
The first thing I found myself doing, unencumbered by the risk of messing up customer sites, was to build a “web application firewall”. This application looks at incoming requests and applies a set of rules to determine if the query is coming from a “bad actor” or not. If it is, it takes an action ranging from delivering an error to blocking the source address in the network firewall. The rule set I have for this is just as aggressive as the AI scrapers, and this results in some behaviours that would be unacceptable to my former clients (for example, all of Meta/Facebook is blocked from accessing my sites).
One of the things I learned how to do was write rules for Spamassassin, the widely installed open source application that protects millions of users from the worst spammers. Like any defensive measure, attackers work to find ways to defeat these tools, which is why many spams contain big blocks of unrelated text at the bottom in a small font. That’s an attempt to game a Bayes filter by making the spam trigger words less prevalent.
SA rules are a little tricky to write, but with some practice, I learned to write custom rules that flagged common phishing attempts, big blocks of text in a small font, and more. None of these alone are enough to flag a message as spam, but they’re reliable indicators. cPanel allows each user to write their own mail filters, using a much more simplified set of criteria. So I set my SA rules to not score very high, then used the indicators to write cPanel filters. This gave users the power of SA without the complexity and was very effective.
But now I don’t have to worry about killing a customer’s email with a false positive. I can write rules that say if a message comes from a domain like example.ru.com and contains one of several keywords in Portuguese, it’s going straight to write-only memory. A rule like that is currently killing 20-30 spams per day.
This morning I got one of a relatively new class of spam, the AI-generated “I love your Instagram account” praising my content on IG in a way that sounds human but isn’t quite right at the same time. It’s kind of amusing to see an algorithm take a wild guess at what my accounts are about. (BTW the accounts are @alanlangford, @in3dca, and @silohouse.ca).
Time to kill that crap. Now the domain that “Maya” sent the email from, the domain linked in the email body, and an intermediate domain that the message was routed to each trigger new SA “Instagram shill” rules that let me trash the message. I took the opportunity to pull some similar rules from my cPanel filters and bring them into SA, which should make the whole process a little more efficient.
NovelWriterExtract is an application that pulls scene metadata from a novelWriter project and exports it to a spreadsheet (ODS or XSLX), a HTML page, or a CSV file. It pulls out NW’s references in scenes (@char, @location, @pov, and others) plus data in the upcoming story structure tags (see Issue 1784 for a full description).
NWE 1.0.0 is available as a PHP PHAR file; there are also executables for Linux, Mac, and windows (in the /bin folder)
Originally written as a Proof of Concept, this release introduces an extract format specification, which is written in JSON. The format file introduces some powerful formatting and filtering capabilities. A format can select specific columns and do things like bold the first occurrence of a character, location, plot line, etc. Check the project’s readme file for more information.
SQL was invented as a way to let “managers” (or more broadly, people who are not coders) extract information from databases.
Obviously, this was a good idea. Another good idea would have been to publish an interface that standardized programmatic access to the database. That layer has to exist somewhere, and if an API had been made available that incorporated the same abstractions as SQL does, odds are that it would have caught on just like SQL did. Over the years it would have become a standard, vendors would have competed to get their extensions accepted into the standard, and as object store databases and key-value databases emerged, the standard would be extended to embrace them.
Instead, we have hundreds, probably thousands of “database abstraction” layers that convert a programmer’s requirement into a SQL statement, thus making SQL itself the de-facto API. The query then gets parsed by the database server into something that must closely parallel the calls that went into the abstraction layer.
If SQL had come with a database access API that paralleled the query language, millions of developer hours would have been saved, let alone uncountable machine cycles. And maybe, just maybe, that API would have abstracted the nature of the back end database, so we’d have a single, unified API for interacting with “things that store data”, including filesystems.
Recent Comments