Kitten Spay Surgery Day: A Stressful Morning with a Happy Ending

Brian’s fitness journal after a brain stroke

Today, it was our kitten-spay-surgery-day, and it was a very important and slightly dramatic day for our kitty.

This morning started as usual. She woke up with me and immediately led us downstairs, full of energy and expectation, ready for breakfast. Unfortunately, she did not realize that today came with… restrictions. Because of the surgery, she had not been allowed to eat after 8 p.m. last night.

So while she confidently marched toward her food bowl, we had a different plan.

The moment she entered the room, I gently (but decisively) placed her into the carrier. She looked at me with the kind of betrayal usually reserved for tragic novels. I felt terrible—but we still had to take her to the vet.

Thankfully, my wife had the day off for Presidents’ Day, which made everything easier. She could stay home and pick our kitty up as soon as the clinic called.

After we dropped her off, the waiting began.

I felt worried, but my wife looked even more concerned. She mentioned the paperwork we had to sign before the procedure—the standard forms that politely remind you that even routine surgeries carry risks. Rationally, we knew this was normal. Emotionally, it still made the situation feel heavier.

A couple of hours later, we finally received the call:
the surgery went well.

Relief arrived instantly.

The vet told us she would be ready to go home in a few more hours. Those hours felt long, of course—but I still had things to do. Now I had a clear deadline, so I quickly prepared and went out for my run.

After finishing my run and showering, it was finally time to bring her home.

When we picked her up, she was wearing the classic “cone of shame” and still a bit groggy from the sedatives. She looked mildly offended by the entire situation and will probably hold that opinion for the next few days.

Fortunately, my wife ordered a surgical onesie, which should arrive tomorrow. Once that comes in, our kitty can retire from cone life—something she will deeply appreciate.

For now, we also have to give her medication over the next few days. Luckily, my wife has experience. She used to work at a cat shelter during university, so she has mastered the art of administering pills to cats—quickly and efficiently, ideally before the cat fully understands what just happened.

Her method is simple:
be fast, be calm, and leave the cat slightly confused rather than suspicious.

In the end, the difficult parts are temporary. The long-term benefit—no future discomfort from heat cycles—is permanent.

Our kitty may be annoyed today, slightly dramatic tomorrow, and mildly judgmental for a few days…

But soon enough, she will forget all of this and return to her usual energetic, pouncy self.

Muscles: Your Metabolic Powerhouse

Day 3 of 100 Days Muscle Resistance Workout Challenge

Topic: The role of muscle in burning calories, regulating blood sugar, and preventing metabolic disease.

Learning Material

Muscles aren’t just about movement—they’re one of the most important regulators of your metabolism. Think of them as both the engine that burns fuel and the sponge that soaks up sugar from your bloodstream. Without enough muscle, the body’s energy system runs less efficiently, increasing the risk of weight gain, diabetes, and metabolic disease.

Muscle and Calorie Burning

Muscle tissue burns calories even when you’re sitting still. The more muscle you have, the more energy your body uses to simply stay alive. While a single pound of muscle won’t dramatically boost your metabolism on its own, over time, building and maintaining lean mass helps keep your daily calorie burn steady—making it easier to manage weight.

Muscle and Blood Sugar Control


Muscles are the largest site in the body for glucose uptake. Every time you contract a muscle—whether lifting weights or going for a brisk walk—it helps shuttle sugar out of the bloodstream and into muscle cells for storage or use. A Japanese cohort study of young and middle-aged women found that lower relative skeletal muscle mass was strongly associated with reduced insulin sensitivity and impaired glucose tolerance, even among participants who were neither overweight nor diabetic1. This is why strength training and cardio are powerful tools for preventing type 2 diabetes.

Muscle and Metabolic Health

When muscle mass is low, the body becomes less sensitive to insulin, leading to higher blood sugar and increased fat storage. This can trigger a cascade of health problems, including obesity, diabetes, and heart disease. In contrast, keeping muscles active makes them act like a “shield” against these conditions.

Example / Story

Imagine two people who eat the same meal: one has strong, active muscles, while the other has very little muscle. The first person’s muscles quickly absorb the glucose, keeping blood sugar stable. The second person’s body struggles, leaving sugar in the blood, which eventually gets stored as fat. Same meal, completely different outcomes—all because of muscle.

My Reflection

At first, I thought I hadn’t pushed myself hard enough on Day 1 since I didn’t feel sore right away. But this morning, I woke up with aches in my legs and glutes—clear proof that the exercises were working after all.

When I checked my body composition, I noticed something surprising: my muscle mass is in the “dark green” range, which is high for my age. The real issue isn’t muscle but fat—most of my body fat comes from subcutaneous fat, while my visceral fat is less of a concern.

This shows me I need a balanced strategy: keep strengthening my muscles, while also adding more cardio and adjusting my diet to manage fat more effectively.

Today, I made a small but intentional change by starting breakfast with two eggs and a salad. I know this will support fat loss and help me feel satisfied. Still, I realize I’m not eating enough protein overall, so I’ll need to pay closer attention to my intake. After breakfast, I added some light leg stretches—another small step to keep my body moving and recovering.

Biometric data

Change in Weight from Day 1: 0lb

Skeletal Muscle: 38.8%

Muscle Mass: 95 lb.

Adjustment Ideas

  • Add a short cardio session (e.g., 15–20 minutes of cycling, brisk walking, or jogging) 3–4 times a week to pair with muscle training.
  • Reduce added sugars or refined carbs in one daily meal to help keep blood sugar stable.
  • Incorporate more protein + fiber into snacks to feel full longer and support muscle repair.

Notes

  1. Hyeon-Ju Kwon et al., “Skeletal Muscle Mass Is Associated with Insulin Sensitivity and Glucose Tolerance in Japanese Women,” Diabetes Research and Clinical Practice 88, no. 2 (2010): 161–168, https://doi.org/10.1016/j.diabres.2010.02.010 ↩︎

Bibliography

Kwon, Hyeon-Ju, Kiyoshi Sanada, Motoyuki Midorikawa, Takashi Iemitsu, Kazushige Murakami, and Mitsuru Higuchi. “Skeletal Muscle Mass Is Associated with Insulin Sensitivity and Glucose Tolerance in Japanese Women.” Diabetes Research and Clinical Practice 88, no. 2 (2010): 161–168. https://doi.org/10.1016/j.diabres.2010.02.010.

Muscles: Your Anti-Aging Armor

Day 2 of 100 Days Muscle Resistance Workout Challenge

Topic: How maintaining muscle mass protects against aging, frailty, and loss of independence.

Learning Material

Aging is inevitable, but frailty is not. One of the biggest myths about getting older is that weakness, balance issues, and dependence are simply part of the deal. In reality, much of this decline comes from losing muscle mass—a process called sarcopenia.

A comprehensive review of age-related changes in skeletal muscle reports that muscle mass declines by approximately 3–8 percent per decade after age 30, with a more rapid rate of loss after age 60. This decline is frequently accompanied by increased fat mass, resulting in significant shifts in body composition1.

That’s like your body slowly withdrawing money from your “strength bank account” without permission.

Muscle as Independence Insurance


Simple tasks like standing up from a chair, climbing stairs, or carrying groceries require leg and core strength. When these fade, daily life becomes harder, and the risk of falls skyrockets. Maintaining muscle is less about vanity and more about staying free to live life on your own terms.

The Frailty Domino Effect

Frailty often starts with one small event—a slip, a minor injury, or a short illness. Without muscle reserves, recovery becomes slower, which leads to less movement, which causes even more muscle loss. This cycle can spiral quickly. Training acts like a brake, slowing or even stopping this domino effect.

The “Use It or Lose It” Principle

Muscle is living tissue. If you challenge it, it adapts and grows stronger. If you neglect it, it shrinks. This is why a few weeks of inactivity can cause noticeable weakness, but even people in their 70s and 80s can build muscle with consistent training. Your body never loses its ability to respond—it’s never “too late.”

Example / Story

A controlled study of older adults aged 65–70 compared resistance training, structured walking, and a control condition over a 16-week period. While both exercise interventions improved functional autonomy and walking ability, resistance training produced the greatest gains in isometric and dynamic strength, leading to superior improvements in daily functional independence2.

My Reflection

I didn’t feel much soreness in my legs yesterday, probably because brisk walking and light jogging are already part of my routine. That tells me I may need to adjust my training to really challenge my muscles. Should I add more weight or increase the number of sets? For now, I’ll keep observing, but if I don’t feel any muscle ache at all, I’ll definitely tweak the reps.

With yesterday’s lesson in mind, I focused on my abdominal muscles today. The routine I created was tough, and I could feel it working my core. I actually enjoy the sensation of muscle soreness—it reassures me that I’ve put in the effort—so I’m hoping I’ll feel some tomorrow.

I also thought about my grandmother. In her 80s, she could still walk 10 kilometers without trouble. It wasn’t because she trained for fitness—she simply stayed active throughout her life. I remember traveling with her, visiting many places, and being amazed at how easily she kept up.

While I was doing cardio, I pictured myself at 80. I want to be able to travel, walk, and see many places just like she did. With my current condition, maybe I could—but only if I keep investing in my health. To make that possible, I need to keep building strength now so that I can preserve my mobility for the future.

Biometric data

Change in Weight from Day 1: 0 lb

Skeletal Muscle: 38.8%

Muscle Mass: 95 lb

Adjustment Ideas

  • Add one new leg-focused exercise to your routine (lunges, wall sits, or step-ups) to push beyond walking/jogging.
  • Try “progressive overload” by slightly increasing reps, sets, or intensity over time to keep muscles adapting.
  • Track which exercises actually make you sore or feel challenged—use this as feedback to refine your routine.

Note

  1. William K. Mitchell et al., “Sarcopenia, Dynapenia, and the Impact of Advancing Age on Human Skeletal Muscle Size and Strength; A Quantitative Review,” Frontiers in Physiology 3 (2012): 260, https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3401542/ ↩︎
  2. Eduardo L. Cadore and Martim Bottaro, “Strength and Endurance Training Prescription in Healthy and Frail Elderly,” Sports Medicine 44, no. 9 (2014): 1257–1276, https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4132023/ ↩︎

Bibliography

Cadore, Eduardo L., and Martim Bottaro. “Strength and Endurance Training Prescription in Healthy and Frail Elderly.” Sports Medicine 44, no. 9 (2014): 1257–1276. https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4132023/.

Mitchell, William K., John Williams, Philip Atherton, Melanie Larvin, Jean Lund, and Marco Narici. “Sarcopenia, Dynapenia, and the Impact of Advancing Age on Human Skeletal Muscle Size and Strength; A Quantitative Review.” Frontiers in Physiology 3 (2012): 260. https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3401542/

A Cozy Valentine’s Day at Home

Brian’s fitness journal after a brain stroke

We had a cozy Valentine’s Day at home this year.

We began the day with a small adjustment to our usual Saturday routine. After breakfast, we drove to the UPS store to drop off a package. Once that mission was accomplished, we continued with our weekly grocery shopping before heading home.

After putting the groceries away, I prepared for my 10K run while my wife focused on her weekend projects. Lately, she has been deep into 5S organizing mode—cleaning, reorganizing, and building systems that keep the house neat without constant effort. Our home is slowly becoming a model of efficient order.

Meanwhile, I set out for my run.

This was actually my first 10K in a couple of weeks, since the last two Saturdays were defeated by snow and ice. It also gave me the opportunity to test a new running accessory: nipple protectors. Not the most glamorous topic, perhaps, but long-distance runners know the importance of preventing friction disasters. The new ones worked well—comfortable during the run and much easier to remove afterward than my previous version. A small but meaningful improvement.

The run itself felt a bit slow, but after the long weather interruption, simply finishing the distance felt like progress. By the time I returned home, I was thoroughly tired.

After vacuuming and showering, I moved on to the next task: grating cheese for dinner.

My wife had planned something special—lasagna. It is one of my favorite foods, though my diet restrictions mean we do not enjoy it very often. Still, every once in a while, she makes it as a treat, and tonight was one of those rare and wonderful occasions.

I was extremely excited about the lasagna.

With most of my tasks complete, I could finally relax for about an hour before bed while finishing the last of the wine I started with dinner.

Earlier in the evening, I had also prepared a small Valentine’s surprise. I brought home a Valentine balloon and secretly slipped into the house to hide it in the closet so my wife would not notice.

She loved it.

Our cat loved it too—though perhaps for different reasons. The balloon floated high near the ceiling, and the dangling thread instantly became her greatest enemy. She tried repeatedly to capture it, but our 12-foot ceiling made victory impossible. The resulting frustration was quite entertaining to watch.

In the end, the evening included lasagna, wine, laughter, and a slightly defeated cat.

All things considered, it was a very lovely Valentine’s Day.

Muscles: Your Built-in Fountain of Youth

Day 1 of 100 Days Muscle Resistance Workout Challenge

Topic: Why muscles matter: longevity, metabolism, resilience, and brain health.

Learning Material


When most people think about muscles, they imagine strength, big biceps, or toned legs. But muscles are much more than aesthetics—they’re one of the most powerful predictors of long-term health and quality of life.

Longevity

Research shows that people with higher muscle mass live longer, even when accounting for weight and other health factors. A large observational study using NHANES III data found that greater skeletal muscle mass, measured by bioelectrical impedance, was independently associated with reduced all-cause mortality in adults aged 55 and older, even after adjusting for BMI and other health factors1.

Muscles act as a “reserve tank” during illness, giving your body resources to recover faster. Think of it as an emergency savings account: when life throws you a health crisis, muscles give your body the buffer it needs.

Metabolism


Muscles are your body’s metabolic engine. A pound of muscle burns roughly three times more calories at rest than a pound of fat. That may sound small, but it adds up over time. More muscle means a higher resting metabolism, which helps with weight management and stable energy.

Resilience & Brain Health


Stronger muscles don’t just help you lift things—they help you stay independent as you age. Falls are a leading cause of disability in older adults, but strength training reduces that risk dramatically. Even more surprising: muscle contractions release chemicals called myokines, which travel to the brain and support memory, learning, and emotional balance. It’s like giving your brain a workout every time you move.

Example / Story


Imagine two 70-year-olds: one who maintained regular strength training and one who didn’t. The first can climb stairs, carry groceries, and play with grandchildren. The second struggles with simple movements, becomes dependent on others, and faces a higher risk of dementia. Both people aged the same number of years, but their “muscle choices” shaped entirely different futures.

My Reflection

I used to work in long-term care, where I saw firsthand how often people’s health declined after a fall. Many patients seemed fine one day, then their independence slipped away after an injury. Those experiences stay with me, especially because I know I don’t have enough muscle myself. I want to live healthily well into old age and avoid that same path.

My daily routine has always included cardio and some stretching, but I’ve avoided strength training. It’s not that I dislike exercise; I actually enjoy running, but lifting or resistance work never appealed to me. Recently, though, I’ve noticed a gradual loss of muscle mass. The wake-up call came after I fell during one of my cardio sessions. There were many factors, but the truth is clear: I need to stop this decline before it affects my future independence.

I’ve decided to treat strength training as “future insurance”—an investment so that I can stay active when I’m 80 and beyond. Last night, I created a small routine for my first week. Since I don’t know much about muscle training, I’ll keep it simple at first, then adjust and learn over time. My goal is to build a sustainable system, just like I did with my philosophy and coding projects.

For now, I’ll start with 10 minutes of strength work each day for the next 100 days. It may not be a full program yet, but it’s far better than doing nothing. I should have started long ago—but now is the time.

Biometric data

Change in Weight from Day 1: 0 lb.

Skeletal Muscle: 38.8%

Muscle Mass: 95 lb.

Adjustment Ideas (Strategic adjustment)

  • Add a 5-minute morning stretch with one or two bodyweight exercises (push-ups, squats, or planks).
  • Aim for 10–15 grams of protein at each meal (e.g., Greek yogurt, eggs, edamame, chicken).

Note

  1. Arun Srikanthan and Arun S. Karlamangla, “Muscle Mass Index as a Predictor of Longevity in Older Adults,” American Journal of Medicine 127, no. 6 (2014): 547–553, https://doi.org/10.1016/j.amjmed.2014.02.007 ↩︎

Bibliography

Srikanthan, Arun, and Arun S. Karlamangla. “Muscle Mass Index as a Predictor of Longevity in Older Adults.” American Journal of Medicine 127, no. 6 (2014): 547–553. https://doi.org/10.1016/j.amjmed.2014.02.007

Python Company Email Finder for Hobbyists (Hunter.io Free Tier)

Day 100 of 100 Days Coding Challenge: Python

Guess what? Today marks my 100th consecutive day of coding. A round of applause, a pat on the back, maybe even a slice of cake—yes, I’ll take all of it. But here’s the twist: I’m not stopping. I’ve started a project (Business Rader 3000) that still has at least 11 days to go, and honestly, I’m too hooked to quit now.

For this milestone day, I tackled something spicy: scraping email contacts for companies. My plan was to use Hunter.io and LinkedIn. Before diving in, I checked Hunter.io and—surprise—they actually hand you 50 free credits a month. For my purposes (coding fun, not spamming every marketing lead in the world), that’s more than enough. I even signed up, grabbed my shiny new API key, and tucked it away like treasure. Little prep steps like that may sound boring, but trust me: they’re the difference between cruising through the code and banging your head against the keyboard later.

Today’s Motivation / Challenge

Why does this matter? Because a business radar that doesn’t give you contact info is like a phone book without phone numbers: decorative, but not terribly useful. Adding email search makes the project feel alive—it bridges the gap between “Hey, I know this company exists” and “Here’s a real human you could reach out to.” For a hobbyist project, it’s part detective work, part magic trick.

Purpose of the Code (Object)

The code connects to the Hunter.io API and asks for email addresses related to the company’s domain. If successful, it returns a tidy list of emails, along with names and job titles when available. Think of it as a very polite assistant who goes knocking on digital doors and brings back a calling card.

AI Prompt

Please add:

Day 4 of Business Rader 3000
Add this function:

  • LinkedIn or Hunter.io Email Search.
  • Use web scraping or Hunter.io API to extract emails.
  • Optionally parse LinkedIn names (only if it’s legally allowed).

Functions & Features

  • Take a company name and resolve it to a domain.
  • Query Hunter.io API for emails connected to that domain.
  • Display results with name, title, and email.
  • Track credit usage so you don’t burn through your free quota.

Requirements / Setup

You’ll need:

  • Python 3.11+
  • Install libraries:

pip install requests

(Plus a Hunter.io API key saved in your .env file.)

Minimal Code Sample

import requests, os

api_key = os.getenv(“HUNTER_API_KEY”)

domain = “ford.com”

url = f”https://api.hunter.io/v2/domain-search?domain={domain}&api_key={api_key}”

resp = requests.get(url).json()

print(resp.get(“data”, {}).get(“emails”, [])[:3])  # show first 3 emails

This snippet grabs a few emails from Hunter.io for Ford—costs you one credit, but gives you real contact info.

business-rader-3000

Notes / Lessons Learned

The process was smoother than I expected, but I did trip over a silly variable mismatch. My function call used industry_hint=…, while the helper file similar.py didn’t know what that was. Cue cryptic errors. Once I tied the function signatures together, everything clicked.

Testing with Ford Motor Company gave me several emails right away, and I checked—just one credit gone. Not bad! For hobby use, the free tier is plenty. But if you’re planning to do serious lead generation, you’ll probably want to pony up for a paid plan. For me, though, the thrill was enough: after 100 days of code, I can officially say my project can find people on the internet. That feels oddly powerful.

Optional Ideas for Expansion

  • Add a filter to only return emails with certain job titles (CEO, Marketing Manager, etc.).
  • Save results into a CSV for later use.
  • Combine Hunter.io with another source (like Wikidata titles) for richer context.

Conclusion

This wasn’t exactly Day 100—it was Day 108. That’s when the Business Radar 3000 project was finally completed.

We live in a surprisingly good era. Not long ago, the barrier to entry for programming felt much higher to me. I was always interested, but it was never a priority. At the time, I told myself it was because I was busy earning degrees and professional designations, or because work had me constantly traveling. Eventually, I had to admit the truth: those were excuses.

I’ve never been fond of “book-only” learning. I’m far more output-oriented. What matters to me isn’t the process itself, but what I can actually build from it. There was no guarantee I would enjoy programming—or that I would produce anything useful at all. But curiosity was enough to start.

To create something truly sophisticated, you still need solid programming skills. That hasn’t changed. But even with modest skills—like mine—you can already build meaningful tools. And that alone changes the equation.

That said, programming comes with responsibilities. A few lessons worth remembering:

  • Protect your information. Never hard-code sensitive data when accessing services through Python.
  • Use a .gitignore file. If you’re pushing code to GitHub, protecting your credentials is non-negotiable.
  • Back up everything. I once broke a project I’d been working on for over two weeks and spent hours repairing the damage. Once is enough to learn that lesson.

AI has the potential to close certain knowledge gaps. Someone with limited programming experience can now create simple but useful tools—like a stock tracker, a book tracker, a civilization timeline app, or a business analysis app.

I was curious about how far AI could push me, especially amid constant headlines about programmers losing their jobs and predictions that AI will replace most forms of work. Some displacement may be inevitable. But it’s worth remembering that there are still things AI cannot do.

There are warnings that AI will leave us intellectually hollow, disengaged from real thinking. I don’t believe that. Engagement is still a choice. What we build—and what we choose to care about—remains entirely human.

Managing Anemia and Kidney Health After Stroke

Brian’s fitness journal after a brain stroke

Today’s adventure involved meeting a new doctor, a hematologist for managing anemia and kidney health after a stroke. After breakfast, I prepared myself for the short but slightly ceremonial journey to the medical complex via Uber.

This appointment began with my nephrologist. During my last visit, he informed me that my red blood cell count had dropped. That immediately reminded me of the year I had my brain stroke, when my blood levels also fell dramatically.

For years, I assumed the low blood count came from the blood loss during the stroke. Apparently, that explanation was only part of the story. This time, the culprit seems to be my kidney condition.

When I mentioned this to my wife, she looked noticeably worried—though she tried not to show it too much.

Since my stroke, she has quietly retired me from driving duties. My reaction speed is slower now, and she prefers not to gamble with traffic physics. It was not possible for my wife to take me to the clinic.  She is deep in the middle of a financial audit, which in accounting terms means time no longer belongs to the accountant.

So Uber became my transportation department for the day.

I arrived about fifteen minutes early and began the famous new patient questionnaire, which turned out to be less of a form and more of a short autobiography. Nearly an hour later, I finished writing what felt like my complete medical history.

Naturally, once I completed it, the medical assistant brought me into the exam room and asked all the same questions again.

Apparently, redundancy is a cornerstone of modern medicine.

Eventually, the doctor arrived. After reviewing everything, he told me it sounded like I had been managing my overall condition quite well. The next step would likely involve treatment to stimulate red blood cell production, depending on what the latest blood tests show.

After the consultation, I went downstairs for the inevitable blood draw. Medical visits often feel like a carefully choreographed sequence: talk about blood, then provide blood.

Now the plan is straightforward. In about two weeks, I will return, and they will likely give me an injection to help boost red blood cell production. After that, they will monitor how well the treatment works.

This is not entirely new territory for me. About ten years ago, I received similar injections for several months when my blood count dropped. This time, the treatment will probably last longer. I will likely visit the hematologist twice a month until May.

Not exactly my favorite social activity—but necessary.

At this point in my health journey, I try to approach these things calmly. One appointment, one test, one treatment at a time. Medicine, much like life, often works best when handled step by step.

Birds of a Feather Code Together: Python Find Similar Companies

Day 99 of 100 Days Coding Challenge: Python

Today’s quest: teach Business Rader 3000 how to find “similar companies.” Easy to say, trickier to do. Originally, the plan involved OpenCorporates, Clearbit, and Crunchbase. Yesterday, however, reality crashed the party. OpenCorporates? Pricey. Clearbit? No more free accounts. Crunchbase? Definitely not in the “hobbyist budget.”

At first, I felt like someone standing outside a candy store with empty pockets. But then I realized—who needs the fancy candy shop when you can make your own fudge at home? That’s the fun of coding: it may take more effort (and a little mess), but you can build something that works without spending a fortune. My new strategy? A patchwork of cheaper (or free) sources and a bit of scraping magic. After all, constraints often make the project more interesting.

Today’s Motivation / Challenge

Why does this matter? Because companies don’t exist in isolation. If you know who the competitors are, you suddenly see patterns—like spotting rival coffee shops at every street corner. Finding “lookalike” businesses is the first step toward building a tool that doesn’t just tell you about one company but about the whole ecosystem it lives in.

Purpose of the Code (Object)

The code takes a company name and then searches different sources (Owler, Yahoo, Wikidata) to find competitors or similar businesses. If one source doesn’t answer, another fills the gap. The result is a short list of peers, each with a name and website—kind of like giving you a curated guest list for the company’s business reunion.

AI Prompt

Day 3 of Business Rader 3000
Find similar companies.

  • Do not use OpenCorporates (too expensive), Clearbit (no more free accounts), or Crunchbase (too expensive).
  • Use Owler for occasional free searches.
  • Use Yahoo Finance for ticker and industry peers.
  • Use Wikidata SPARQL for international coverage.
    Return a list of similar companies + websites.

Functions & Features

  • Prompt user for a company name.
  • Query Owler to get competitors (via scraping or API).
  • Use Yahoo Finance for peer info based on industry/sector.
  • Run a Wikidata SPARQL query to fetch related companies with official websites.
  • Provide a clean list of names + URLs.
  • Normalize company names to avoid simple typos breaking everything.

Requirements / Setup

You’ll need:

  • Python 3.11+
  • Install libraries:

pip install requests yfinance

(Optional: SPARQLWrapper for Wikidata queries.)

Minimal Code Sample

import yfinance as yf

company = “F”  # Ford ticker

info = yf.Ticker(company).info

print(f”Industry: {info.get(‘industry’)}”)

print(“Similar companies: (placeholder for Owler/Wikidata results)”)

This pulls Ford’s industry, then you’d add competitor lookups from Owler or Wikidata.

business-rader-3000

Notes / Lessons Learned

I discovered Owler, which kindly offers free searches if you don’t bombard it. Perfect for this project. Yahoo didn’t have a dedicated “competitors” endpoint, but industry info is enough to infer peers. Wikidata, meanwhile, is like that overachieving student—quirky, international, and full of surprising coverage.

Of course, things went sideways when I mistyped “Ford” as “Forrd.” The script gave me nothing but errors. That’s when I remembered the Japanese concept of poka-yoke: mistake-proofing. I built in a normalization step so my typos wouldn’t torpedo the whole run. I also added a fallback list by industry, so even if the APIs go on strike, I still get something useful back. Debugging felt less like a chore and more like teaching the code to politely say, “Did you mean Ford, not Forrd?”

Optional Ideas for Expansion

  • Add a fuzzy search so the program auto-corrects near-miss spellings.
  • Save competitor lists to a CSV for easy reuse.
  • Visualize the competitor network with a simple graph.

When APIs Ghost You: Building a Python Company Industry API Fallback

Day 98 of 100 Days Coding Challenge

Today’s mission: teach Business Rader 3000 how to fetch industry information for a company. Sounds simple, right? Type “Ford Motor Corporation,” press enter, and voilà—get back “automotive industry.” Except, of course, nothing in programming is ever that straightforward.

My first plan was to use Clearbit. Plot twist: Clearbit slammed the door on free accounts. Then I looked at OpenCorporates—yep, that one comes with a price tag too. Fair enough; servers don’t run on fairy dust. But since I’m a hobbyist coder, dropping money on every shiny API is not my jam.

So I went with the Big Three:

  • Yahoo Finance (yfinance) for public companies.
  • Wikidata API for international and quirky cases.
  • Google Knowledge Graph is the “last resort uncle” who knows a little about everything.

Google KG is tricky—you get some queries free, but if you forget to actually activate your account (like I did), you’ll spend hours wondering why nothing works. I had déjà vu from a year ago when I took a Coursera class on Google Cloud and burned through my free credits, then was charged $6.5. It’s possible I may have just expired a trial. To be fair, Google Cloud gave you a way to maintain your costs if you are serious about using their service. That is how I know I spent money. The bright side? Google still gives a generous allowance of daily free queries. It’s like IT giants saying, “Sure, kid, go play in our sandbox—just don’t dig a swimming pool.”

Today’s Motivation / Challenge

Why does this matter? Because knowing what industry a company belongs to is like knowing the genre of a book before you read it. You don’t want to bring a box of tissues to a slapstick comedy, and you don’t want to pitch software to a tire manufacturer. Business Rader 3000 needs this context to do anything useful, and today was the day it learned how to ask smart questions.

Purpose of the Code (Object)

The code takes the company name you provide and then checks three different sources (Yahoo Finance, Wikidata, Google KG) to guess its industry and sector. If one fails, the next one steps up. Think of it as having three friends with wildly different interests—if one doesn’t know the answer, another probably does.

AI Prompt

For your Business Rader 3000 project, I’d suggest:

  • Use Yahoo Finance / yfinance for public companies.
  • Use Wikidata API for broader coverage (private + international).
  • Fall back to the Google Knowledge Graph API for missing entries.

Please add exactly the same functions, but change the source of information.

Functions & Features

  • Prompt the user for a company name.
  • Query Yahoo Finance for industry and sector info.
  • Query the Wikidata API as a second source.
  • Use Google Knowledge Graph as a fallback.
  • Display results in a simple dictionary format.

Requirements / Setup

You’ll need:

  • Python 3.11+
  • Install libraries:

pip install yfinance requests

(Plus a Google API key if you’re using Google KG.)

Minimal Code Sample

import yfinance as yf

company = “F”

info = yf.Ticker(company).info

print({“industry”: info.get(“industry”), “sector”: info.get(“sector”)})

Here we ask Yahoo Finance about Ford, and it politely answers with industry and sector details.

business-rader-3000

Notes / Lessons Learned

When I first ran the program, the response was… silence. No data, no errors, just tumbleweeds. Debugging to the rescue. I added two levels:

  • BR_DEBUG=1 to show which provider answered (or didn’t).
  • BR_DEBUG=2 to print detailed HTTP errors.

That’s when I remembered my weather app fiasco: API keys sometimes need 45–50 minutes to wake up after being created. Turns out, I hadn’t properly activated Google KG at all. Once I fixed that, it worked like a charm. The funny part? By the time I figured this out, I couldn’t tell whether it was my script improving or the API finally letting me in. Either way, I learned something priceless—how to debug like a grown-up.

Optional Ideas for Expansion

  • Save industry results into a local file so you don’t keep hitting the APIs for the same company.
  • Add a fallback “guess” list based on keywords in the company name.
  • Display results in a friendly table instead of a plain dictionary.

        info = yf.Ticker(sym).get_info()

        industry = _normalize(info.get(“industry”))

        sector = _normalize(info.get(“sector”))

        if industry or sector:

            return {“industry”: industry, “sector”: sector or _guess_sector_from_industry(industry)}

Oversleeping and Still Winning the Morning: A Runner’s Small Victory

Brian’s fitness journal after a brain stroke

So this is how I got away with oversleeping and still winning the morning.

This morning began with what looked like a promising start—and then quietly derailed.

I actually woke up before my alarm. After a quick trip to the bathroom, I returned to bed for what I assumed would be a brief rest. Unfortunately, my brain interpreted that as permission for a second sleep session.

The next thing I remember was hearing my wife get up and leave for her morning exercise. Shortly after the front door closed, my alarm went off. I turned it off and thought, very logically, that I would get up after she returned so we would not both compete for the bathroom.

In theory, this sounded like a perfectly organized plan.

In reality, it made absolutely no sense.

My wife usually leaves before 6:30 a.m., while my alarm rings at 7:00. Looking back, the most likely explanation is that I simply fell asleep again and missed everything—including her return from exercise, her getting ready, and her leaving for work.

My wife operates on a far stricter schedule than I do. She arrives at work earlier than most people because she likes to clear her emails before colleagues and bosses begin their day. Meanwhile, my morning apparently turned into a quiet demonstration of the dangers of comfortable pillows.

I had intended to start my day at 7:00 a.m.

Instead, I woke up when my calendar reminder sounded at 8:00.

One hour behind schedule.

Normally, that might derail the entire morning, because my routine includes a long chain of small tasks. If one falls behind, the rest tend to domino into chaos. Today, however, I decided to move quickly and avoid lingering over anything.

Efficiency replaced elegance.

Surprisingly, it worked.

I caught up with my morning tasks and still managed to leave for my run at roughly the time I had planned the night before when I checked the weather forecast.

Even better, the run itself went well. My legs felt a little sore at the start, but I still managed to beat my target pace for the first time this week.

So while the day technically began with oversleeping, it ended with something close to success.

Not perfect—but proof that sometimes a late start does not ruin the day if you simply keep moving forward.