One of the downsides of horse ownership is the cost. The cost of the horse is just the starting point. Transporting the horse is a non-trivial cost. We needed to buy a trailer and many of the trailers we looked at are heavy enough that we needed to buy a truck as well. This raised the question of what the minimum required towing capacity would be. It’s strange that these trucks are classified using tons. What Does Half-Ton, Three-Quarter-Ton, One-Ton Mean When Talking About Pickup Trucks? | Cars.com gives me the impression that tonnage is a historical artifact of payload measurement. A ton seems to be a reference to a Short ton – Wikipedia. It is also interesting that Toyota and Nissan don’t really have offerings above the half-ton classification. The approximate weight of the trailer (and the horse) that I want to transport (or alternatively, our camper) requires at least a 3/4-ton truck.
One of the trucks we considered is the 2012 F 150 Towing Capacity Full Guide (with Charts) (truckauxiliary.com). The concern here was that even though it had a towing package, it was still a half-ton truck. It was also likely to be outside our budget, so we didn’t really wait for that seller to give us a price. We also looked at a 2006 RAM 2500. Our mechanic took a look at it and exclaimed that everything that could possibly leak on that vehicle was leaking (transmission, power steering, etc). That was an easy pass given that it was already at the top of our price range.
Fortunately, the next truck we looked at worked out. Cylinder 6 was misfiring on this truck (we could hear the tick) and this was confirmed by the digital codes from the vehicle. We decided to buy a new spark plug and coil for that cylinder to see if we could fix it before driving off with the truck but neither AutoZone nor Oreilly Autoparts had the right coil in stock. We walked out with just the spark plug and our mechanic replaced it. In the process of pulling out the old spark plug, the spark plug wire came apart, and we had to buy an entire Duralast Silicone Spark Plug Wire Set. Thankfully, that was all that was needed to address the cylinder misfiring. We were glad to have our mechanic available to fix that problem before we drove off with our “new” 2002 truck (through a private sale). We had also confirmed with our insurance company that the new vehicle was covered as we drove it away and that we had up to 5 days to add it to our insurance plan.
Ironically, the towing hitch was significantly damaged on this truck (one of our most important requirements). However, the mechanic pointed out that it can be readily replaced (just don’t do any welding on the existing setup since its integrity cannot be guaranteed). The only question I have remaining is how to compute the tongue weight (came up when we were looking up new hitches online). What is Tongue Weight and What Does it Mean for Safe Towing? explains various ways to determine the tongue weight. They also recommend their weigh-safe hitch, which has a built-in scale (I like how convenient this hitch makes it). This is the video they linked discussing this option.
I have been learning about the SFrame tracing effort and figured I should document the resources I have reviewed. Indu Bhagat has been actively involved in the development of SFrame. This is one of her talks giving an overview of the objectives of SFrame. The overall idea is that profiling tools (e.g. perf) usually need to generate stack traces. She lists some methods used to generate stack traces, e.g. using frame pointers, EH frame, last branch record (LBR), and other heuristics. Each of these have their own advantages and pitfalls. SFrame encodes the minimal info required for stack tracing.
I found additional videos by searching for sframe indu (there are lots of unrelated sframe results out there). This one by Steven and Indu covers potential issues that need to be addressed for JITted code.
There are various informative discussions about SFrame out there, e.g.
We decided to sell our horse a few months ago and buy another horse better suited to drill riding. The topic of which contract to use when buying a horse came up naturally. More specifically, the seller of the horse we were interested in wanted a right of first refusal (which I didn’t understand). My first go-to was the Horse purchase agreement – YouTube search. The video on Sales Fraud in the Horse Industry (youtube.com) was exactly what I needed. I’m summarizing the key points in this post so that I don’t have to watch the whole video again.
Some issues that horse buyers run into:
Training and disposition are misrepresented. The buyer didn’t seek enough info, or the seller wasn’t clear/transparent (e.g. about horse vices)
Horse is smaller/larger than represented, e.g. with minis where the seller doesn’t make a representation about the horse (or it is misrepresented).
Horse being drugged during buyer’s evaluation.
She gives advice on reducing disputes by sellers ensuring advertisements are true and accurate. One of the behaviors mentioned (that buyers complain about) is cribbing, which I don’t think I have heard of before.
Some recommendations from the video include:
put things in writing
avoid one-size-fits-all forms (e.g. are they valid in your state?)
don’t leave major terms to guesswork
specify the buyer, seller, price, terms, and the horse (registered date, foaling date)
avoid underage contract signers (such contracts will not be enforceable in most places).
whether the horse needs to receive joint injections (that’s a thing?).
Other recommendations include:
having the seller’s name and signature on the contract (thus ensuring promises are not just from a seller’s agent, who might not have really known the horse) and to specify who pays the seller’s agent’s commission.
hiring an independent vet to examine the horse before buying (e.g. to avoid paying a lot for a horse that has been denerved).
getting a drug screen.
She delves into the topic of releases, giving an example of a closed head injury that resulted in institutionalization of the rider, but the release didn’t use the language required to make it enforceable! Definitely caught my attention.
Other Recommendations
She recommends liability insurance for owners in trial period or lease to buy scenarios.
She mentions clipping a horse in one of her answers to a question from the audience. I wasn’t sure what this referred to until I found Horse Clipping Guide (smartpakequine.com)
The video ends with a question about releases, which was the reason I wanted to watch this video in the first place. One of the big questions we had was the right of first refusal. I end up browsing through Right of First Refusal Clauses: Equine Law Blog for additional information about this.
She brings up insurance, e.g. how having an equine insurance policy could allow you to euthanize a horse and still collect (unlike life insurance policies). She recommends purchasing it just before your new horse gets on the trailer (she gives an example where a horse got spider bites after getting into the trailer for transport as part of the purchase but the buyer got a payout after euthanizing the horse).
I have been using bash scripts to run jtreg tests when working on my Windows desktop. The Git Bash environment does not care about whether the script has the executable mode set. However, running the same script on other platforms requires a chmod +x command. Since it is annoying to have to do this every time I switch platforms, I have decided to be fixing this before pushing scripts. How do I see the permission of a file in Git? – Stack Overflow recommends git ls-files -s. It’s only now that I’m learning (from the top voted answer) that Git only tracks the executable bit on files (Are file permissions and owner:group properties included in git commits? – Stack Overflow).
chmod +x run-jtreg-test.sh does not change the file mode displayed by git ls-files -s. As per How to add chmod permissions to file in Git? – Stack Overflow, you can use this command starting in Git 2.9 (I’m running git version 2.45.2.windows.1)
every polynomial many-one degree either consists of a single polynomial isomorphism type or else contains a collection of isomorphism types which has, under one-one, size-increasing, polynomially invertible reductions, the order type of the rationals.
I was telling my advisor that reading of these old papers makes me suspect that we are a very long way away from resolving the P vs NP question – we don’t appear to have made significant progress in this journey over the past few decades. This is obviously an uninformed gut feeling, not a scientific observation. I asked how researchers that have been at this for decades feel about the problem and these are some of the videos he shared. The speakers in this discussion on P vs NP covers issues such as:
how to go from worst case to average case complexity of hard problems
how to generate hard instances (with distinctions between puzzles and problems coming up in applications like cryptography)
whether quantum mechanics can actually solve hard computational problems (with pessimism arising from potential inability to measure the results of parallel exploration). A naive approach will not work. Shor used the structure of the factoring problem. Does that structure exist in NP complete problems?
whether current accepted axioms are not sufficient to resolve the problem.
There is also advice from Ron Fagin to spend some time (e.g. a couple of days each year) thinking about the hardest problem in their field. One of the most interesting questions to me was the one asking “what’s the most remarkable false proof of P vs NP proofs that you have come across“. Ron Fagin mentions the proof attempt by Vinay Deolalikar from HP Labs. This was addressed by Scott Aaronson in his post on Eight Signs A Claimed P≠NP Proof Is Wrong (scottaaronson.blog). The other comment (by Christos Papadimitriou) was about how some failed attempts have led to barriers showing that certain approaches will not work. Ron Fagin also recommends looking at the P-versus-NP page (tue.nl).
One of the topics I have been learning about requires an understanding of prefix sets. Prefix-free Kolmogorov complexity is one of these areas. Some resources on this subject include:
I watched lecture 42 Kraft’s inequality (youtube.com) to get the basic idea behind Krafts inequality. The simpler proof was the one mapping prefix free codes subintervals of (0,1). Fortnow’s paper described these as intervals of real numbers whose dyadic expansion begins with 0.x for strings x in a prefix-free set A.
Error Correcting Codes
The XOR lemma used for worst case to average case hardness transformation has always seemed a bit mysterious to me. I had decided to dig into error correcting codes to better understand the list decoding approach to hardness amplification in the Pseudorandom Generators without the XOR Lemma paper. I started on this series last month and have found it extremely beneficial. It’s been much easier to read Venkatesan Guruswami’s List Decoding of Error-Correcting Codes thesis after going through this lecture series.
We have been searching for horse trailer and wanted to learn the types of things people consider before buying one. We started with this video by Equine Helper:
The length of your vehicle’s wheelbase (longer is better).
The difference between the weight of the vehicle and the loaded trailer.
The vehicle’s braking system, e.g. can it use the trailer’s brakes?
The limits on the vehicle’s payload (weight of passengers & cargo inside the vehicle itself) when towing.
Trailer style:
Straight load vs slant load vs stock trailers. Stock trailers don’t have support (e.g. for sudden braking), are open so projectiles can injure your horse
Trailer ventilation: (e.g. untreated ceilings can get really hot). Consider one with windows that can open, or ceilings that can be opened.
The hitch on the towing vehicle needs to support the tongue weight of the trailer.
The receiver needs to match the ball size of the trailer.
The next video was helpful since his perspective is informed by his profession.
Cost of Horse Ownership
After having our horse reshoed more often than is reasonable, I looked ran this search: how much does it cost to own a horse – YouTube? It’s interesting how many of the results for these horse queries are from Equine Helper.
Some of the factors affecting the price of a horse include the:
The discussion in the previous video mentioned a number of breeds, none of which I’m familiar with. The List of horse breeds – Wikipedia is much longer than I expected! I look up horse breeds on YouTube and find this video of her favorite breeds. She lists these:
Our horse is a Thoroughbred and is 16 hands tall. This is another thing that has puzzled me. Why is horse height measured in hands? Looks like it goes back to before standardized units as explained in the video below.
Working with your horse
Our thoroughbred had a leg/foot injury. After a few weeks without being able to ride him, he was quite a handful when my wife hopped on him once more. She worked with him, and things are much better. However, I decided to learn what advice is given on how to not get thrown off a horse and what to do if it happens. This next video is one of the results I found on this. It includes tips like keeping your nose behind your belly button, learning how to do a one rein stop (while not leaning forward), and getting off as soon as you feel uncomfortable.
A YouTube suggestion that came up afterwards was this video on gentle horse training. I find the approach interesting because she shows the frustration of the horse and the progression of the training.
One of the risks that came up when working with our horse was the fact that we didn’t have a round pen. I didn’t know why a round pen is used – and why is it round anyway? The Benefits of Using a Round Pen | Ride Magazine came to my rescue: you don’t have to teach the horse to stay out of the corners! The round pen size needs to match the speed/character of the horse as well.
…what is neat about a round pen, it is a small, quiet, safe environment and it makes it easier to get control of the feet.
One of the things I’ve found myself marveling at is how such an animal can be so big and muscular while just eating grass. Where does the protein come from? And this horse really likes alfalfa, which I had seen around the property without knowing what this plant was. I haven’t looked too keenly but there didn’t seem to be any videos addressing the breakdown of the nutritional value of grass.
A search for videos on the nutritional value of hay – YouTube is closer to what I want. I like this next video for its overview of things hay growers consider:
There are so many considerations in horse ownership. I’m happy to have my eyes opened into how this world is run, not to mention a new appreciation for some of the rodeo performances!
I was recently in a brainstorming session with a colleague about garbage collection scenarios. He suggested using mind mapping software, and I must confess that this was the first time I was hearing about this (as far as I can recall). We wanted a free program. Our search turned up freeplane (which can be downloaded on Sourceforge). As per my usual habits, I decided to build it from source myself (I especially get this urge when I run into Sourceforge download links). Fortunately, the sources are hosted on GitHub.
git clone https://github.com/freeplane/freeplane
Since this is a Java codebase, I searched for “eclipse java” to get an IDE. The Eclipse Packages page has the Eclipse IDE for Java Developers (I downloaded the Windows x64 version). The project uses gradle but I didn’t know how to open it in Eclipse so I asked Microsoft Copilot (Bing Chat) how to “open a gradle project in eclipse”. One of the results was from the Import existing Gradle Git project into Eclipse – Stack Overflow page, which points to the Buildship Gradle Integration plugin. I launched Eclipse, created a new workspace and tried to import the project but got an exception that ended with:
Caused by: java.lang.IllegalArgumentException: Unsupported class file major version 65
at groovyjarjarasm.asm.ClassReader.<init>(ClassReader.java:199)
at groovyjarjarasm.asm.ClassReader.<init>(ClassReader.java:180)
at groovyjarjarasm.asm.ClassReader.<init>(ClassReader.java:166)
at groovyjarjarasm.asm.ClassReader.<init>(ClassReader.java:287)
... 180 more
I was not sure how to run the application. I had unloaded it and reloaded it. I asked copilot “how to run an imported gradle project in eclipse” and the last step is to right-click on the project and choose Refresh to ensure Eclipse recognizes the changes. This time, the project explorer folders are rearranged, and version numbers are appended after each project!
I right clicked on the freeplane project, selected Run As… Java Application, then chose the Main (org.knopflerfish.framework) application and clicked OK.
This text appeared in the console but no application Window appeared.
Knopflerfish OSGi framework launcher, version <unknown>
Copyright 2003-2020 Knopflerfish. All Rights Reserved.
See http://www.knopflerfish.org for more information.
Created Framework: org.knopflerfish.framework, version=8.0.11.
Framework launched
I was not even sure how to terminate the application so I asked copilot “how to stop a running java program in eclipse”. Yes, it has been that long. Forgot about this button.
I then downloaded freeplane_bin-1.11.14.zip to explore the UI and see if I could track down the strings from the menus… I found some resource files that but that was not helpful, so I continued exploring other projects. I finally stumbled into the freeplane_framework project. Clicking on “Run As… > Java Application” revealed that it has a Launcher project! I had been looking for a project like this. It failed with this error in the console window:
Exception in thread "main" java.lang.UnsupportedOperationException: The Security Manager is deprecated and will be removed in a future release
at java.base/java.lang.System.setSecurityManager(System.java:430)
at org.freeplane.launcher.Launcher.launchWithoutUICheck(Launcher.java:291)
at org.freeplane.launcher.Launcher.main(Launcher.java:88)
I manually set the disableSecurityManager field to true to bypass this issue. The application finally launched!!
Launching Freeplane in Eclipse on macOS
I decided to try this process on my M1 laptop. I downloaded the macOS AArch64 Eclipse IDE for Java Developers, accepted the default workspace path, and clicked on the “Import projects…” command in the package explorer. I selected the “Existing Gradle Project” import wizard then clicked Next.
For the “Project root directory”, I browsed to the freeplane repo: /Users/saint/repos/freeplane then clicked on “Finish”. There is a helpful message in the Gradle Tasks pane (which shows up by default): Click on the Refresh Tasks button to get the structure and the tasks for project.
A message in the status bar flashed by fast but nothing else happened in the IDE. I confirmed that “Buildship: Eclipse Plug-ins for Gradle” was listed in the Installation Details (Eclipse > About Eclipse).
I didn’t have the console view of what could have happened though so I enabled it via Window > Show View > Console. Aha, looks like the same error that happened the first time in Windows (not even sure how that got resolved at this point).
FAILURE: Build failed with an exception.
* What went wrong:
Could not open cp_init generic class cache for initialization script '/Users/saint/eclipse-workspace/.metadata/.plugins/org.eclipse.buildship.core/init.d/eclipsePlugin.gradle' (/Users/saint/.gradle/caches/8.1.1/scripts/2to4is5l87jn9v7vrcgka57e).
> BUG! exception in phase 'semantic analysis' in source unit '_BuildScript_' Unsupported class file major version 65
* Try:
> Run with --stacktrace option to get the stack trace.
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.
* Get more help at https://help.gradle.org
CONFIGURE FAILED in 568ms
The Specific Gradle version dropdown has many options. I selected 8.8 then clicked on Apply and Close. Refreshing the Gradle Tasks still didn’t do anything. I closed the project and reopened it and now all the tasks showed up in the Gradle Tasks pane. However, the Run As option on the freeplane_framework project only had a Run Configurations… option. After some poking around, I discovered that just like on Windows, I need to expand the project, right click on the build.gradle file, then select the Gradle > Refresh Gradle Project to get the Package Explorer to refresh. This hides the top level files in the project. Now I could right click on the project and use the Run As > Java Application command. Selecting the “Launcher” Java application resulted in previously mentioned error message so I manually set the disableSecurityManager field to true. Freeplane finally launched successfully!
Summary: How to launch Freeplane in Eclipse
Clone the repo: git clone https://github.com/freeplane/freeplane
Set the gradle distribution to 8.8 (on Windows/Linux, use Window > Preferences, on macOS, use Eclipse > Preferences).
Click on Import projects… in the Package Explorer.
Select Existing Gradle Project then browse to the repo for the “Project root directory” (you can click Next to override the workspace settings to choose a specific Gradle version).
Click on Refresh Gradle Tasks.
Right click on the root build.gradle file and click on Refresh Tasks (if necessary, i.e. this file is shown at the root level of the package explorer)
Manually set the disableSecurityManager field to true to bypass the UnsupportedOperationException.
Run the “build” Gradle task in the Gradle Tasks window.
Right click on the freeplane_framework project, Run As > Java Application then select the Launcher application.
Select the freeplane dist option in the “Select Java Application” Window and click OK.
A colleague at work was telling me about the Smalltalk programming language this week. I have never used it so I asked for compiler recommendations for it. Dolphin smalltalk was one of the suggestions. I downloaded the ZIP of the latest release from https://github.com/dolphinsmalltalk/Dolphin/releases/tag/7.2.0 but unzipping it and launching it fails with a Fail to open image file 'C:\software\DolphinVM\DPRO.img7' error message. Downloading and running the Dolphin7Setup.exe installer got the Dolphin environment up and running.
Building Dolphin Smalltalk
I’m always interested in how different projects are built – this one stands out for being a Windows-only project. The repo I cloned was at commit 2cbc3e72cb.
Building Core/DolphinVM/DolphinVM.sln in Visual Studio takes less than a minute on my desktop. Pressing F5 shows an error dialog: Unable to start program 'C:\repos\Dolphin\Core\DolphinVM\Debug\DolphinVM8.dll'. Changing the startup project from VM to Launcher just shows the Fail to open image file 'C:\repos\Dolphin\Core\DolphinVM\Launcher\DPRO.img8' error. Looking at the repo home page, I think I have only built the virtual machine.
Building the Dolphin 8 Product Image
The instructions say to run git lfs pull but that doesn’t appear to do anything. Next step is to run BootDPRO.cmd. It calls Dolphin8 with the DBOOT.img8 argument. GitHub displays a note that this file is Stored with Git LFS. This note links to Managing large files – GitHub Docs and this is the first time I’m really looking at this. I don’t really understand why a file that’s less than 2MB needs this so I will skip this LFS detail for now. Running the command in BootDPRO.cmd in my MINGW shell does not do anything.
Switching to a Windows command prompt does the trick! I’m still in the dark about what this machine is and what exactly this image being compiled is.
C:\repos\Dolphin>BootDPRO.cmd
Dolphin Smalltalk Boot
Copyright (c) Object Arts Ltd, 1997-2021.
Boot started at 2024-06-27T21:33:14.671937943-06:00
Loading boot script...
Reloading BCL constants pools...
Updating ClassBuilder...
Reloading BCL class definitions...
Recompilation of OpcodePool required because class variables/constants are being added
...
Reloading 'Dolphin Message Box' ...
Loading source package 'Dolphin Message Box' from: C:\repos\Dolphin\Core\Object Arts\Dolphin\System\Win32\MessageBox\Dolphin Message Box.pax
Deleting obsolete boot image methods...
Removing obsolete boot image method Compiler class>>#notificationCallback:
...
Recompiling references to ICONDIR (size 22)...
Recompiling references to PROCESS_INFORMATION (size 16)...
Recompiling references to STARTUPINFOW (size 68)...
Boot completed at 2024-06-27T21:36:03.2736891-06:00, duration 2.81 minutes
Launching Dolphin8
We can now run Dolphin using this command:
Dolphin8.exe DPRO.img8
The program launches successfully. Note that Dolphin8.exe is the output of the Launcher project. To debug the application:
Set Launcher as the startup project in Visual Studio.
Open the Property Pages of the Launcher project.
Navigate to the Configuration Properties > Debugging pane.
Set the Command Arguments to “DPRO.img8”
Set the Working Directory to the root of the git repo, e.g. “C:\repos\Dolphin”
Press OK then launch the program.
Ideally, these steps should be built into the solution and the launcher project’s configuration but it was straightforward to figure out. This is what I get.
I evaluated this line, but nothing appeared to be happening. I reread the quote then search for the Transcript window. It is the System Transcript window shown below (whose icon is in the Dolphin Smalltalk Professional screenshot above). Sure enough, it contains the Hello World message.
As pointed out by my colleague and others like Dolphin Smalltalk 7 (randycoulman.com), picking up this language can make you a better programmer. I’ll need to find a decent program to implement in Smalltalk to learn about this programming language.
Engineering drawings are now commonly created using CAD software. Drawings commonly conform to standards such as ASME Y14.3-2012 or ISO 5456-2:1996. They are commonly transferred and viewed electronically in formats like PDF. This video summarizes the history of PDF format:
I’ll end this (super) brief history of engineering drawings with a video (from the search for blueprint history) from 1958. It attempts to motivate students about the importance of learning how to read prints (engineering drawings) and although it feels dated, the underlying points are still relevant.
I recently had a french drain installed. This Home Depot video provides an overview of what is involved.
I figured I might as well collect the associated manuals/documents. The pump was manufactured by the Zoeller Pump Company (zoellerpumps.com). The site allows you to search for the pump number. Entering 267 points me to the Model 267 Sewage Pump. There are plenty of associated resources:
When searching for products online, I often peruse the careers page of the manufacturers to get a feel for what types of roles people in various industries have. The Careers – Zoeller Pump Company page lists a CNC Operator/Machinist position that prefers 1 year of experience as a CNC machinist and these other requirements.
Specific Job Duties:
Operate CNC Lathes/Vertical Milling Machines.
Perform set-ups and offset adjustments as required.
Ensure specifications and tolerances are met.
Skills Required:
Minimum of 2 years’ experience required.
Ability to use calipers, indicators, micrometers, etc.
Ability to read & interpret prints.
Must be a self-starter with the ability to lift up to 50 pounds, bend, twist, reach without problems, and be able to stand for long periods of time.
Making a pump like this looks like an interesting project! I’m definitely short on the CNC machining side of things (for now). The Zoeller Company – YouTube channel is a good resource for learning about pumps. Here is their product comparison.
Learning about this stuff can be quite the rabbit hole, but I’m happy to be scratching the surface in these spaces.