Github: Brent Litner
brentlintner starred MoonshotAI/Kimi-K3
Open Frontier Intelligence
1.2k Updated Jul 27
Open Frontier Intelligence
1.2k Updated Jul 27
FREE event at GRR Kitchener, but we kindly as that you reserve your spot online
The post Craft Social appeared first on Grand River Rocks Climbing Gym.
Colonial Acres continues to be one of Waterloo’s most established and desirable neighbourhoods, but not every home is receiving the same response from buyers.
During the 90 days ending July 22, 2026, 21 detached homes had firm sales or completed transactions in Colonial Acres. Sale prices ranged from $705,000 to $2,650,000, reflecting the neighbourhood’s diverse mix of bungalows, side-splits and larger executive properties on mature lots.
Nine homes sold above their final asking price, one sold at asking and 11 sold below asking.
The takeaway for Colonial Acres homeowners is clear: buyers are active, but increasingly selective. The homes achieving the strongest results are generally the ones that offer the right combination of preparation, presentation, pricing and value.
Request a confidential, property-specific home valuation and selling strategy.
Colonial Acres Real Estate Market at a GlanceAs of July 22, 2026:
The median price is generally the more useful measure because the average was influenced by several luxury sales above $1.5 million.
Even the median should not be treated as an estimate of every Colonial Acres home. Lot size, street, renovations, layout, condition, square footage, pool, privacy and overall presentation can create substantial differences in value.
The five active detached homes were listed from $875,000 to $2,050,000.
Only one active property was priced below $1 million, while three of the five were listed above $1.5 million. This means the amount and type of competition facing a seller depends greatly on the home’s expected price range.
Several active listings had already accumulated extended market time, experienced a price adjustment or been exposed to the market through a previous listing.
Even in a highly desirable neighbourhood, buyers will resist an asking price that is not supported by the home’s condition, features and current competition.
Looking at all firm and closed sales together does not tell the entire story. Buyer behaviour changed considerably across the different price ranges.
Colonial Acres homes below $1 million
Eleven detached homes sold below $1 million during the 90-day period.
This was the most consistently competitive part of the Colonial Acres market. With only one active detached listing below $1 million as of July 22, a well-prepared and accurately priced home in this range may attract strong attention.
That does not mean every property should be intentionally underpriced or held for offers. The right approach depends on the home, current competition and the seller’s priorities.
Colonial Acres homes from $1 million to $1.5 million
Four homes sold within this range.
Buyers in this segment were more price-sensitive. They closely compared renovation quality, square footage, lot, layout, mechanical updates and overall condition before deciding what they were prepared to pay.
A Colonial Acres address remains valuable, but the neighbourhood alone will not support an asking price that exceeds the complete property’s current market value.
Colonial Acres homes above $1.5 million
Six homes sold for $1.5 million or more.
This was the most property-specific portion of the market.
Two standout homes attracted immediate competition and sold above asking within two days. Other higher-end properties required considerably more time or sold below their final asking prices.
Luxury buyers will still pay a premium for an exceptional Colonial Acres home, but they have high expectations. They are evaluating design, renovation quality, lot, privacy, outdoor living, architectural features and overall value as a complete package.
More detached homes sold during the most recent 90-day period than during the same period in 2025: 21 compared with 12.
However, the median selling time increased from approximately 10 days to 17 days. The market was busier, but buyers generally took longer to make decisions.
The types of homes sold also differed substantially between the two periods, particularly at the luxury end of the market. For that reason, a simple year-over-year change in the average price would not provide a reliable indication of how an individual Colonial Acres home’s value has changed.
A sold-over-asking headline can be impressive, but it does not always explain how a property actually performed.
A home may sell above its final asking price after being reduced or repositioned. Another may sell slightly below asking while still producing an excellent outcome based on the property’s market value, closing terms and the seller’s goals.
To properly assess a sale, we consider:
A home does not have to be completely renovated to sell well.
In many cases, the best return comes from targeted preparation: completing necessary repairs, refreshing paint, improving lighting, editing furnishings, addressing visible maintenance concerns and professionally staging the property.
The key is knowing which improvements will matter to buyers—and which projects are unlikely to produce a meaningful return.
Based on recent sales and the feedback we are receiving, buyers are responding most favourably to homes offering a strong combination of:
A home does not have to be completely renovated to sell well.
In many cases, the best return comes from targeted preparation: completing necessary repairs, refreshing paint, improving lighting, editing furnishings, addressing visible maintenance concerns and professionally staging the property.
The key is knowing which improvements will matter to buyers—and which projects are unlikely to produce a meaningful return.
Our team represented the sellers of four Colonial Acres homes during this 90-day period, with sale prices ranging from $850,000 to $1,830,000.
Those properties included a mature bungalow, a substantial family home and executive residences at the higher end of the market. This gave us direct, current insight into buyer behaviour across several Colonial Acres price ranges.
Two of the homes sold above asking within two days:
Both were strategically priced based on their condition, features and current competition—not artificially underpriced simply to create a sold-over-asking result. The sellers fully committed to the recommended preparation, staging, pricing, marketing and launch plans.
Our other recent Colonial Acres sales required different strategies because every property and seller’s circumstances were different. What remained consistent was the importance of understanding the competition, preparing carefully and positioning the home for the buyers most likely to appreciate it.
There is meaningful demand for the right Colonial Acres home, but a desirable address alone does not guarantee a quick or competitive sale.
Begin preparing before you are ready to list
Allow enough time to determine which repairs, improvements and presentation changes are worthwhile. Rushing to market before the property is ready can weaken the initial launch.
Compare your home with the right properties
A bungalow on a deep lot should not be valued in the same way as a newer executive home with a pool on an established crescent. The most relevant comparisons depend on lot, style, size, condition and features—not simply proximity.
Price for the current market
Overpricing to leave room for negotiation can reduce showing activity and cause buyers to question the property’s value. The first days of a listing often bring the greatest attention, and that opportunity can be difficult to recreate after a property sits or requires a price reduction.
Prepare for selective buyers
Buyers are noticing unfinished repairs, dated mechanical systems, poor presentation and renovation requirements. Not every concern needs to be corrected, but the price and marketing strategy must account for them.
Treat the launch as one coordinated plan
Preparation, staging, pricing, photography, video, marketing and timing should work together. The strongest results rarely come from treating these elements as separate or optional decisions.
Frequently Asked Questions About Selling in Colonial Acres What is the average home price in Colonial Acres?+The average sale price during the 90 days ending July 22, 2026 was approximately $1.24 million, while the median was $950,000.
The difference is significant because several luxury sales raised the average. Neither number should be used alone to estimate a specific home’s value.
Yes. Nine of the 21 firm or closed sales sold above their final asking prices.
However, 11 sold below asking, showing that multiple offers and above-list sales are not occurring equally across every price range or property type.
The median selling time was 17 days, but individual results ranged from immediate sales to more than four months.
Condition, pricing, competition and presentation all affect how quickly a property sells.
Not necessarily. Many sellers benefit more from selective repairs, paint, lighting improvements, editing and staging than from completing a major renovation.
A pre-listing consultation can help identify which improvements are likely to influence buyers and which ones may not be worth the cost or disruption.
Colonial Acres sale prices during this period ranged from the $700,000s to more than $2.6 million. A neighbourhood average cannot account for the differences between those properties—or accurately determine the value of your home.
Our confidential, property-specific market assessment will explain:
Considering selling in Colonial Acres? Contact The Deutschmann Team for a confidential home valuation and customized selling strategy.
Request My Colonial Acres Home ValuationThis report examines detached-home activity in Colonial Acres during the 90 days ending July 22, 2026. Active, conditional and pending listings reflect their MLS® status as of July 22. Pending transactions had firm agreements but had not yet closed. Listing statuses and sale details may change. Market statistics describe general activity and should not be used to determine the value of a specific property without a detailed assessment. Source: ITSO MLS® data.
The post Colonial Acres Waterloo Real Estate Market Update | July 2026 appeared first on Kitchener Waterloo Real Estate Agent - The Deutschmann Team.
♦
The plums we get in Ontario are, for the most part, either European or Japanese types, the latter actually Chinese in origin.
But whatever their origins, eat them now. I feel that summer is well and truly here — the heat and the sun — when yellow plums start to appear.
That appearance begins in July and August. Early freestone yellow plums called Early Golden are Ontario’s most prevalent plum, followed by semi-freestone cousin, the Shiro. In August moving into September, we will see the red and purple varieties at their best.
The Japanese and European plums, although millennia old in their native areas, were introduced to the New World as recently as the late 1800s. Plums are grown on every continent except Antarctica. We should also acknowledge that there is a long history of wild plums in Canada, eaten by our indigenous peoples.
As early as 1875, Luther Burbank took Chinese purple plums, which had been improved by Japanese breeders, and further developed them in the United States. The variety is known as the Burbank plum.
Plums are climacteric: that is, they can be harvested relatively green and allowed to ripen slowly. At home, ripen them at room temperature out of direct sunlight or in a loosely closed brown paper bag. They should then be refrigerated and eaten as soon as possible.
One medium-sized plum has about 36 calories and is a delicious source of Vitamin-C. Yellow plums are great for fresh eating, canning and cooking.
I find that my favourite yellow plums can be deceptive: their thick skin, when you press it, remains firm as if they are not yet ripe. But inside they can be just perfect.
So pay close attention to your yellow plums!
Plum compote recipe / Compote de prunes
Ingredients
3 cups yellow plums, stoned and quartered (sounds violent)
1/4 cup sugar
1 dash brandy
Juice of one medium-sized lemon
Spices like star anise, ground cloves as you like
Method
Peel plums and grate bit of lemon zest into them and mix. Combine ingredients in saucepan and bring to a gentle boil. Reduce heat and simmer for 10-15 minutes (depending on how firm your plums are). Serve warm or cold. Store well-sealed in the ice box for a few days.
Check out my latest post The yellow plums of summer from AndrewCoppolino.com.
♦
How guardrail asymmetry can disable your AI forensic tools during a real attack — and the five steps to build a fallback before you need…
Continue reading on Code Like A Girl »
♦
A counter can tell you how many, and when. It can’t tell you anything else.
Continue reading on Code Like A Girl »
♦
Learn production-ready orchestration, dynamic routing, context management, memory passing, execution strategies, and cost optimization for…
Continue reading on Code Like A Girl »
GHD have produced another report for public consumption . Like many of the rest it goes best with lots of sugar, artificial sweetener and or grease to help it slide down. Perhaps money and self-interest are the very best forms of grease as they tend to ensure that alleged troublemakers, radicals and activists are ignored while bought and paid for intellectual prostitutes are given undue respect and credibility. The report is titled "Lanxess Canada Municipal Aquifer Steady State Conditions Trial Report".
Basically the entire premise of the report is a croc. It is supposed to examine monitoring wells throughout the Elmira Aquifers to determine if there is significant "rebound" in contaminant concentrations AFTER pumping in the Elmira aquifers has stopped. Well it never fully stopped as the major pumping well at the south end of Elmira (E7) continued pumping it's little heart out. There was also the somewhat embarassing issue with pumping well W5A located just south and west of the Lanxess site. It kicked the bucket just BEFORE the so called pumping trial began. Oops! Also the number of monitoring wells and their location were not appropriate for what was supposed to be the rationale of the trial. No where near enough monitoring wells and all were located way too close to the pumping wells causing immediate drastic results either when the wells were shut down or when they were started up again.
As usual the maps/Figures supplied are too small for most eyes over 40 years old plus the text in attached Tables to them are even worse to read. Finally colour printers are required for those of us who no longer rate hard copies and must download tiny, coloured maps/Figures electronically. It's all a good way to thin out the field of critics. The analytical Tables provided could also have used two, vertical lines on each showing when pumping was stopped and then restarted. It would have made the Tables more understandable.
Discussion and Conclusions are basically pathetic. There's a fair bit of jabber regarding anaerobic conditions, ORP (oxidation reduction), RPD (relative percent difference), ammonia, phosphates and nitrates plus DO (dissolved oxygen) that may excite biologists but not so much hydrogeologists. At least these big words make GHD look smart and help muddy the waters as probably intended.
Most importantly Lanxess, GHD and the MECP (Min. of Environment) have scrupulously avoided the one word which must NOT be spoken, written or uttered upon excommunication from the Royal Order Of Flamboyant and Treasured Water Investigating Testifiers otherwise known as ROOFTWITS. The magic word that they must not utter is DNAPLS . Under no circumstances they insist could either free phase or residual DNAPLS ever be the reason for high chlorobenzene concentrations or persistent chlorobenzene detections nearly thirty years after groundwater remediation by pump & treat has been ongoing. Oddly every other site with gross chlorobenzene and lots more chlorinated solvents contamination is recognized as a DNAPL site but here in Woolwich Township by the waving of magic wands and the intonation of non satanic chants; DNAPLS have been kept at bay.
Thank God for their majesties Ken Seiling, Sandy Shantz and even Karen Redman.
I started LeetCode again after a small break. I don’t know how many times I’ve restarted LeetCode.
This time, I decided to follow the NeetCode roadmap. It made learning LeetCode easier. It actually has structure and order. That made it easy to pick the next problem without thinking much.
I completed the following sections:
After completing the sections, I looked at one of my accepted solutions and thought, “I know I solved this three days ago. Why can’t I explain why this line exists?”
Of course, I didn’t memorize the problems. I actually understood each one before moving on to the next problem.
So I decided to recollect everything from scratch. No hints.
I opened my notebook and started revising the sections I had completed.
Everything has an approach. I wanted one for revision too.
I wasn’t trying to invent new ideas. I just wanted to remember the old ones.
My approach was simple.
Just write.
Write everything.
Write everything in simple English.
So I started writing every decision and every thought I had while solving that particular problem.
While solving, I only focused on getting the solution.
I just wrote the input and output, listed every approach I knew, and started solving.
I only cared about getting the problem accepted. My focus narrowed.
Once the problem was solved, my brain relaxed.
But during revision, I finally got to relax. I no longer had to search for an answer. Now I could ask why my reasoning worked.
That’s when I found something interesting. I wasn’t focused on getting to the solution quickly anymore. Instead, I became a reviewer and examined my own solution.
In this process, I repeatedly asked questions like:
While solving, every question was judged by one standard: “Will this get accepted?”
During revision, that pressure disappeared, and I finally started asking ‘why’ instead of ‘how’.
That created space for new ideas.
Voila.
I found ideas I hadn’t considered before.
I discovered new ways to solve the problem.
I understood the reasoning better and connected the dots.
That experience was incredible. I was in awe.
While revising, I remembered an essay I had read during my digital detox (which I eventually failed).
It was an essay by Paul Graham called Good Writing.
In Good Writing, he wrote:
This is only true of writing that’s used to develop ideas, though. It doesn’t apply when you have ideas in some other way and then write about them afterward.
It’s only when you’re writing to develop ideas that there’s such a close connection between the two senses of doing it well.
I remember thinking, “Is that really true?”
I thought, “Okay, let’s see.”
Then I moved on, like any other procrastinator.
I thought this kind of writing only helped people developing completely new ideas — essayists, philosophers, and researchers. Algorithms already felt finished to me. I thought writing was useful only when people were trying to discover something completely new.
I never imagined it would help while revising algorithms.
But during revision, I realized he was right.
This is what happened to me.
Yes, maybe you’ll find useless ideas.
A useless idea is still an idea.
Wrong ideas still teach you why the right idea is right.
You may not find the correct solution every time, but you’ll understand why one approach fails and another works. You’ll develop a much deeper understanding of the reasoning.
Sometimes, you even discover a better idea.
Either way, writing helps you walk away with something.
It made me wonder where else this way of writing could be useful.
Here are two questions I never asked while solving the problems but naturally asked while writing about them.
Product of Array Except SelfWhile solving it, I used prefix and suffix arrays. I calculated the suffix array on the go.
While writing about it, one question came to mind:
Why can’t I calculate the prefix on the go?
It turned out I could.
Longest Repeating Character ReplacementWhile solving it, I needed to calculate the number of replacements required. I calculated it using windowLength - maxFreq.
Here, maxFreq is the highest frequency of any character in the current window.
Then I wondered:
Why can’t I calculate minFreq instead?
minFreq would simply be the sum of all frequencies except the maximum one.
The answer was yes — but with a trade-off.
The idea worked, but it required another traversal, making it slower than the standard windowLength — maxFreq calculation, which is O(1).
let maxFreq = 0;
for (let freq of map.values()) {
maxFreq = Math.max(maxFreq, freq);
}
let minFreq = 0;
let skippedMax = false;
for (let freq of map.values()) {
if (!skippedMax && freq === maxFreq) {
skippedMax = true;
continue;
}
minFreq += freq;
}
if (minFreq <= k) {
// valid window
}
Now compare that with the standard solution.
My approach
Find max -> O(26)
Find minFreq -> O(26)
Standard approach
Find max -> O(26)
windowLength - maxFreq -> O(1)
The new idea wasn’t more optimal, but it made me understand why the standard solution was.
My notebook pages:These pages hold more than solutions. They hold questions, failed ideas, better ideas, and conversations with my past self. Somewhere along the way, my notebook stopped being a revision notebook and became a place where I learned how to think.
♦♦I always thought revision was about remembering what I had already learned.
Instead, it became a conversation with my past self.
Sometimes I discovered better ideas.
Sometimes I simply understood why my original idea was already the right one.
Either way, I always walked away with a deeper understanding than when I started writing.
Thanks for reading.
♦Writing My LeetCode Solutions Changed How I Think was originally published in Code Like A Girl on Medium, where people are continuing the conversation by highlighting and responding to this story.
Visa Vulnerability Agentic Harness
Python 1.8k Updated Jul 3
Project N.O.M.A.D, is a self-contained, offline survival computer packed with critical tools, knowledge, and AI to keep you informed and empowered—…
TypeScript 35k Updated Jul 27
KITCHENER - It was a memorable Sunday for all the wrong reasons for the Kitchener Panthers.
The Panthers gave up 11 home runs to the league-leading Welland Jackfish in a 30-8 loss at Jack Couch Park.
The game got out of hand early, as Welland had 23 of its 30 runs on the board after the fourth inning, lighting up Panthers pitching and batting around the order in three straight innings.
Starter Owen MacNeil was yanked after recording just five outs, giving up 11 runs (eight earned) on six hits. He walked four in the loss.
Teodoro Ortega gave up two runs on six hits, but struck out eight in five innings of work for the win.
The bright spots for Kitchener came late, scoring six runs in the eighth inning, including home runs from Raffi Gross, Jackson Cooke, Trent Lawson and Petey Kiefer.
Kiefer was a single shy of hitting for the cycle.
The 38 runs scored in the game was a CBL season high, breaking the record of 37 scored in Kitchener's 23-14 win over Brantford on June 18.
Logan Grant had three home runs for the visitors. Ethan Mann, James Smibert and Justin Gideon all had two home run games.
Kitchener drops to 10-20 on the season. Welland improves to 22-10.
With the transaction deadline looming Monday, Kitchener sits seven games out of a playoff spot.
The Panthers are back at it Tuesday at home against Hamilton. First pitch is scheduled for 7:05 p.m.
GET YOUR TICKETS NOW and #PackTheJack!
BOXSCORETypeScript-to-Native Compiler
TypeScript 1.7k Updated Jul 27
A fork of Bun based on modern Zig
Zig 162 Updated Jul 27
One of the greatest resources for me when starting out was attending events or conferences hosted by senior engineers.
I used to and still watch many such conferences available on YouTube or attend them in person, as they helped me gain deeper insights into how things actually work. Be it Cloud, DevOps, Golang, or even Linux internals, these tech talks have always fascinated me.
While watching such videos, I would always think that someday I would also be giving a talk in front of many people and sharing my knowledge with them.
And honestly, that day wasn’t very far away. At the start of 2026 itself, in March, I got the opportunity to give a technical talk at Opstree Solutions.
The session was titled “Building CI/CD Pipelines for Infrastructure: From Automation to Testing.”
It focused on my ideas and perspectives based on the book Infrastructure as Code Dynamic Systems for the Cloud Age written by Kief Morris.
That book introduced some really interesting ways of looking at Infrastructure as Code. The point that intrigued me the most was how to test and implement a CI/CD pipeline for IaC, especially for provisioning code.
Although there were times while preparing for this talk when I couldn’t fully understand a few concepts, I now think I should have consulted a senior. But anyway, I searched online, and Reddit turned out to be a huge help. I also couldn’t complete the demo, which, in hindsight, should have been my highest priority.
Anyway, here are some lessons I learned from my experience and from watching the other speakers at several events:
Always introduce yourselfSome people really struggle with this, and honestly, so do I. I get confused about what to say about myself. Well, that mainly depends on how well you know yourself. But when you’re starting out, you can simply say something like:
“Hey everyone, I’m Rajeshwari. I’m a freelance Cloud Engineer, and I love brewing coffee.” (Or not, if you actually don’t. 😄).
And that’s it. You don’t have to make it fancy.
Keep the audience engagedThis is probably the most important aspect of giving a talk. If you just keep talking and describing your slides, it starts feeling like a boring office meeting.
Instead, at regular intervals, ask the audience if they have any questions. Or even better, while introducing a topic, ask if someone already knows the answer before explaining it yourself. It naturally makes people more involved.
I wasn’t able to keep my audience as engaged as I wanted, but honestly, Sandeep sir made the session much more interactive by asking me thoughtful questions throughout the talk. It also helped me deepen my own understanding of the topic.
Always prepare the demo!!One drawback of my talk was that I couldn’t prepare the demo completely. As I mentioned earlier, there were a few concepts that I couldn’t fully grasp while preparing, which resulted in an incomplete demo, and I couldn’t present the code.
Thankfully, I had created a pipeline flow diagram as a backup and presented that instead.
Do not overprepareActually, I’d say prepare at all! I didn’t prepare the night before the talk or even 15 minutes before it. You already know the topic, and you’ve created the presentation, so why memorize everything? You can prepare a few key points that you want to cover, but don’t lock yourself into a script.
Just keep the conversation flowing while you’re on stage. I stayed calm and didn’t think much about the session beforehand. I was simply excited to attend the event itself. Trust me, it relieves a lot of pressure.
Write small pointers, not big sentencesThe point of a talk isn’t to show off your PowerPoint; it’s to show your understanding of the topic. For me, the best feeling is talking naturally, with ideas coming to my mind at that very moment instead of reading what’s written on the slides and explaining it again.
Even I couldn’t do this perfectly. Some of my slides were filled with too much text, and that definitely shouldn’t have happened.
So these were some of the lessons and experiences from that day.
The opportunity to give tech talks is one of the best things this field has given me. ❤️
Looking forward to many more such experiences!
And all the best for your first session!! 🙌🌟
Originally published at www.linkedin.com.
♦All about my very first technical talk was originally published in Code Like A Girl on Medium, where people are continuing the conversation by highlighting and responding to this story.
(Not a Medium paid member…no worries, read for free here)
♦Image owned by Author (Created using Google Gemini)You know the AI feature is done “right” when someone asks the obvious question and the room goes quiet.
What happens if we turn it off? (Not many have really planned for that)
Concepts like “backward compatibility” or “two-way door decision” have kinda lost their charm in the so-called “AI-first race”.
And even if teams treat “add AI” as a two-way door (reversible at any time) and build it that way, it's usually only in name.
In practice:
Once old system’s gone, it’s a one-way door wearing a two-way door’s reputation.The Assumption Baked Into Most AI Features
Behind every AI feature you can see, there used to be a boring system that just worked. Rules. If-this-then-that. Not exciting, but solid.
But as AI entered the picture, instead of standing alongside the old system, it stood atop it and pushed it out of the way.
And the boring (non-AI) version didn’t get kept. It got deleted.
So now the model is the system. And the day it hallucinates, or the API times out, or someone’s config drifts, there’s nothing behind it to catch the fall. Just the user, staring at whatever the model handed them.
What Building It the Other Way Looks LikeThe fix isn’t complicated. It’s just unfashionable because it means shipping the boring version first on purpose and treating it as permanent infrastructure, not a rough draft you throw away once the AI works.
Here’s the shape of it, using a plain example: a system that reviews a piece of text and flags issues before it ships (could be a support macro, a config file, a product description, doesn’t matter).
Step 1: Build the deterministic core (this is the system, not a placeholder for the system).
# core.py
def deterministic_review(text: str) -> dict:
"""
Rule-based review. No AI. No external calls.
This is the source of truth. Everything else is optional on top of it.
"""
issues = []
if len(text) < 20:
issues.append("Content too short to be useful.")
if text.strip().endswith((".", "!", "?")) is False:
issues.append("Missing terminal punctuation.")
banned_terms = ["TBD", "TODO", "placeholder"]
for term in banned_terms:
if term.lower() in text.lower():
issues.append(f"Contains unresolved placeholder: '{term}'")
return {
"source": "deterministic",
"issues": issues,
"passed": len(issues) == 0,
}
Nothing clever here. That’s the point. This function will give you the same answer every time, forever, regardless of what any model provider does to their API next quarter. It’s not exciting. It’s load-bearing.
Step 2: The AI layer sits beside it (and not inside it).
# enhancer.py
import os
from openai import OpenAI
client = OpenAI()
def ai_review(text: str) -> dict:
"""
AI-assisted review. Adds judgment the deterministic layer can't.
Never the only line of defense. Never load-bearing on its own.
"""
prompt = f"""
Review the following content for clarity, tone, and ambiguity.
Do not invent facts. Do not rewrite the content.
Return a short list of specific concerns, or "No concerns" if none.
Content:{text}
"""
response = client.chat.completions.create
(
model="gpt-4o-mini",
messages=[{"role": "user", "content": prompt}],
temperature=0,
)
return
{
"source": "ai",
"notes": response.choices[0].message.content.strip(),
}
Notice what this function does not do. It doesn’t decide pass/fail. It doesn’t touch the original text. It doesn’t get called unless something upstream explicitly asks for it. It adds a second opinion. It never replaces the first one.
Step 3: The toggle (the focus point of this article).
# pipeline.py
from core import deterministic_review
from enhancer import ai_review
def review(text: str, use_ai: bool = None) -> dict:
"""
The public entry point. Deterministic result is always computed
and always returned. AI is additive, and fails safe.
"""
use_ai = use_ai if use_ai is not None else os.getenv("USE_AI", "false").lower() == "true"
result = deterministic_review(text)
if not use_ai:
return result
try:
ai_notes = ai_review(text)
result["ai_notes"] = ai_notes["notes"]
except Exception as e:
# AI failed. The deterministic result is already computed and valid.
# We log it, we don't crash, and we don't silently pretend AI ran.
result["ai_notes"] = None
result["ai_error"] = f"AI layer unavailable: {str(e)}"
return result
Three things are true about this function that weren’t true about the “AI-as-the-feature” version most teams ship:
Now here’s the thing about off switches important to remember.
You can’t add one retroactively, not really, not once a system has been live long enough that people have started trusting the AI-touched version as the version.
By the time something goes wrong, an “off switch” you build under pressure is really a panic button wired to a system that was never designed to run without the thing you’re now trying to remove. It’ll work, technically. It’ll also break three things you didn’t know depended on the AI layer being there.
The toggle in the code above costs almost nothing to build, if you build it on day one. It costs a full re-architecture to build after the fact, once “the AI version” has quietly become “the only version.”
So build the boring layer first. Keep it running underneath, permanently, not as a bootstrapping step you delete once the AI works. Let AI sit on top, opt-in, fail-safe, and honest about its own failures.
To conclude, I would say:
The real measure of whether a team understands AI governance isn’t whether they added guardrails.
It’s whether they could turn the AI off tomorrow, mid-incident, and still have a working system underneath.
Most teams, if they’re honest, would find out the hard way that they can’t.
Better to find that out in a design review than in production.
Thanks for reading this article; don’t forget to clap and follow ❤️
You can send me an invite @ LinkedIn or Substack 😎
Looking forward to connecting with you 🤝
You may also like to read:
Trust Is a Toggle, Not a Feature: Why AI Should be Shipped With an Off Switch was originally published in Code Like A Girl on Medium, where people are continuing the conversation by highlighting and responding to this story.
♦
Masa harina: this ingredient is a foundational one for the many terrific Latin American restaurants — Salvadoran, Colombian and Mexican, for example — that are out there for us to enjoy.
You will find it in the food you eat their restaurant dining rooms and, in bags, on the shelves of the grocery store sections often found in these restaurants and small eateries. As such, these businesses are warm and casual community hubs that add much to the rich fabric of our food culture.
The word masa is “dough” in Spanish (masa harina is, literally, “dough flour”). It’s a traditional and key ingredient for Latin American cooking.
Taking sun- or fire-dried corn that’s been cooked and treated in lime water (calcium oxide), the soaked kernels are ground into a flour.
That flour is used to make the tortillas that make your wonderful tacos.
Check out my latest post Masa: dough at Latin American restaurants from AndrewCoppolino.com.
Lawrence Sanders’ 1976 The Tangent Objective is the first volume in the Tangent thriller duology.
Wedged between Ghana and Togo, tiny Asante is a seemingly unremarkable African nation. Independent since 1958, the former French colony is home to eight hundred thousand people. The nation is being bled white by its ruler, King Prempeh the Fourth — the Avenging Leopard of Bosum-twi! — and his family.
US-based Starrett Petroleum knows something about Asante that the king does not know. Asante sits on top of a vast lake of oil. It’s Peter Tangent’s job to make sure Starrett gets the extraction rights.
As long as he is in power, Prempeh has the Americans over a barrel and he knows it. What he does not know is that by making this clear to Tangent, he has signed his own death warrant.
A batteries-included framework for building web apps
Rust 3.4k Updated Jul 27
Python 706 Updated Jul 27
First of all contrary to every credentialed sod and suit who have lost their credibility and integrity and agree with Lanxess Canada and the Ontario Min. of Environment that there is not any chlorobenzene in the Bedrock aquifer; I say this. Intellectual prostitution is no more glamorous than the real thing. In some aspects it is worse.
The reason that this lie suggesting that sure there is NDMA in the Bedrock Aquifer but not chlorobenzene is because NDMA is more easily dissolved and more easily pumped. It can be removed much easier from both aquifers and aquitards than chlorobenzene, a DNAPL chemical. Hence just as the leadership of APTE (Susan B. & Sylvia) were coopted in the early 1990s into becoming DNAPL deniers so both Uniroyal Chemical and the Ont. Min. of Environment (MOE/MECP) colluded in their October 1991 Agreement and November 4, 1991 Control Order to pretend that there were no free phase DNAPLS (Dense Non Aqueous Phase Liquids) either on the Uniroyal site or off their site having migrated into all the aquifers below the town of Elmira.
It is obvious to honest people with even a little bit of hydrogeological knowledge. Looking at the "Schematic Of Hydrogeologic Units Lanxess Canada Co." which are produced by Uniroyal/Crompton/Chemtura and now Lanxess over the last thirty-six years makes it very clear. These one page subsurface "maps" are also known as Conceptual Site Models. From the top right corner showing the Creek ("Gig") and the UA (Upper Aquifer) one can follow the blue coloured aquifers downwards into the MU (Municipal Upper) then follow the blue MU leftwards (west & south) until it reaches more blue (marked LGR -low gamma resistivity) and descends further downwards into the ML (Municipal Lower) . From there moving to the right (i.e. north and a little east) one comes to the following FOUR wells all pumping NDMA, chlorobenzene and so much more namely W6A, W5A, W9 and W8. By the way there is also likely a window just to the right of W8 which corresponds to OW58 as stated in yesterday's Blog posting. It goes through the MAT (Municipal Aquitard) and connects the MU with the ML.
Meanwhile and here's the kicker. THE BEDROCK AQUIFER IS DIRECTLY CONNECTED TO THE MUNICIPAL LOWER AQUIFER exactly where three of the four pumping wells (W5A, W6A, W9) well screens sit directly on top of the Bedrock. They are pumping both ML water and BR water albeit the free phase chlorobenzene (& more) DNAPL that gravity flowed into this location are from either or both the north-east window (near OW58) or from the south-west window (near W4, OW57-32R, Howard St. water tower); is likely long gone into the fissures and cracks of the fractured Bedrock Aquifer. There could be some free phase DNAPL still left in the ML or not but certainly that which is into the Bedrock Aquifer is there forever.
This is but part of the coverup, collusion and corruption between Uniroyal Chemical and the Ontario Ministry of Environment (MECP). Surviving APTE members may some day be able to figure out how early on their leadership betrayed them. Or not. Time will tell.
HAMILTON - The Kitchener Panthers offence hit a brick wall Friday night in Hamilton.
The Panthers garnered just four hits all night in what was a 13-1 loss to the Cardinals.
Two of the four came in the first inning, but they weren't able to get anyone across. Meantime, Hamilton scored four runs in the first to establish a lead they wouldn't relinquish.
Yosvani Penalver, Malik Williams, Raffi Gross and Josh Williams got the four hits.
The lone Panther run came in the fifth when newcomer Jackson Cooke grounded out, allowing Gross to score.
Dionys Rodriguez gave up eight runs on nine hits in 4.1 innings in the loss. He struck out six and walked one.
Kitchener has lost three straight and is 10-18 on the year. Hamilton improves to 17-9.
The Panthers continue its busy weekend Saturday at 4:08 p.m. in Barrie.
Then, they host Welland Sunday at 5 p.m.
GET YOUR TICKETS NOW and #PackTheJack!
BOXSCORETypeScript-first schema validation with static type inference
TypeScript 43.3k 1 issue needs help Updated Jul 26
remark plugin to support GFM (autolink literals, footnotes, strikethrough, tables, tasklists)
JavaScript 1.2k Updated Feb 10, 2025
Several months ago one of the Computer Recycling Project at The Working Centre’s donors donated some 2U HP server hardware. One of those machines was a nice HP ProLiant DL380p Gen8 server. The server came complete with 128GB of RAM, and it had 6 x 146GB SAS (Serial Attached SCSI) drives.
While it’s always nice to get any storage and RAM with donations, I needed a bit more storage for what I had in mind. Luckily we had an HP storage array at the back with a bunch of 300GB SAS drives I could just pull out of the array, and plug into the ProLiant DL380p Gen 8, or so I thought…
You know most children by the age of six or seven have learned that lying usually only makes things worse. Statements like the dog did it or the baby did it rarely fly with parents. Unfortunately as a society we have learned to condone dishonesty in many forms.
Yesterday's July 23, 2026 report by GHD sent to the Min. of Environment (MECP) and titled "Municipal Aquifer Steady State Conditions Trial" is an example of what my Blog title is all about. I understand that exceptions to the fibbing rule exist which include two dishonest parties sending knowingly false information back and forth in order to reinforce their agreed upon self-serving "truths". No one is offended because both parties have long ago agreed to the deception. Examples abound such as President Bush lying about Iraq's Weapons of Mass Destruction (WMD). England and the U.S. needed some justification for attacking Iraq so they jointly made sh*# up. Countries do it, individuals do it and polluting corporations do it.
There are a host of made up falsehoods regarding the Elmira Water Crisis. Only a very few to date have been debunked or admitted to such as Allan Deal (GHD) admitting to TRAC that Varnicolor Chemical contributed chlorinated solvents to the Elmira drinking water aquifers (MA) as per the Minutes of their September 12, 2024 meeting in Council Chambers. This was on page 7 and on page 6 of these Minutes is also finally the admission of DNAPL existing near pumping well W4 by the Howard St. Water Tower and beside monitoring well OW57-32R.
The page 6 admission regarding off-site DNAPL presence is important in the context of yesterday's report as it clarifies why Figures 5 & 7 clearly show both the remaining Municipal Upper and Municipal Lower Aquifer locations of chlorobenzene in Elmira's subsurface. They are located to the immediate east of former pumping well W4 as well as of monitoring wells OW57-32R and OW57-38 . The remaining plumes in both aquifers (MU, ML) are directly beneath the former Varnicolor Chemical site with Howard Ave. on their south side and First Ave on their north side. Both plumes cross under Union St. as they are slowly pulled towards pumping wells W5A/B in each aquifer. Also of interest in yesterday's report is the statement on page 15 in the Conclusions that "GHD notes that extraction wells were drilled in the core of the existing plumes at the time of installation.". This explains the location of pumping well W4 beside the free phase DNAPL clearly discovered prior to the startup of the off-site pumping in August 1998 but denied originally at a CPAC meeting around 2004-5 when I presented a writeup about it found in a monthly Progress Report. It was then denied repeatedly for years until the admission of its' presence at the September 12, 2024 TRAC meeting.
DNAPLS (chlorobenzene & more) left the Uniroyal Chemical site decades ago in at least two locations ending up by the Howard St. Water Tower and by monitoring well OW58-24 on the property line with Nutrite/Yara via a "window" through the Municipal Aquitard. Both Uniroyal and the Ontario M.O.E. colluded to hide and deny this fact from the public in order to preserve their sweetheart deal which covered up the Ministry's negligence and incompetence and which reduced Uniroyal's cleanup costs by millions of dollars.
Sorry for the upset and disruption to thin skinned individuals at Woolwich Township who insist on playing nice with those who don't play nice, much less legally.
July 21, 2026, was Black Women’s Equal Pay Day here in the U.S. It’s a symbolic date that marks how far a Black woman must work into the current year to make the same amount that a white, non-Hispanic man earned last year.
Another way to look at it? Imagine finding out you’ve been earning just 65 cents for every dollar paid to a coworker. That’s the current wage gap for Black women working full-time, year-round in the U.S.
And there are more equal pay day milestones coming up, each revealing deep disparities:
While I hope your organization conducts regular pay equity reviews and addresses any inequities, there’s also something we can do on a personal level: Discuss our compensation.
It’s uncomfortable territory for many of us, but when we tell others what we make, we provide them with valuable data points. And data is a helpful tool in any negotiation process.
Share this action on Instagram, LinkedIn, or YouTube.
2. Don’t expect someone to use a personal credit cardShould employees and job candidates have to use their own credit card for business travel and other expenses?
Paolo Gaudiano and Cynthia Overton argue in their new book Meritocracy that this common workplace practice is one of many that quietly undermine merit.
They explain that structural enablers and organizational biases prevent meritocracy all around us. For example:
If someone needs to travel or make purchases for work, don’t assume they can “just put it on their credit card.” Instead, provide another option.
For example, use virtual credit cards (VCCs) or temporary prepaid corporate cards, available from many financial institutions. They allow your business to instantly issue temporary 16-digit card numbers for specific trips, set firm spending limits, and restrict charges to travel categories such as flights and hotels.
3. Help people notice harmful stereotypes“It’s taking longer because the decision maker is older and more cautious.”
I heard a leader make this comment during a recent virtual meeting.
My first instinct was to let it go. I had another meeting starting soon. This leader was someone I respected. He was thoughtful and empathetic. Maybe it wasn’t worth bringing up.
But I try to practice what I preach.
So, as the call was wrapping up, I asked the leader if he could stay on the line for a few more minutes because I had something I wanted to share with him.
After everyone else left, I said, “I hope you’re open to some feedback” and then summarized what I had heard him say. I pointed out that he had reinforced a negative stereotype about older people, and that while I didn’t think he meant any harm, he sent a subtle message to others on that call that it’s okay to assume older folks are going to be slower and more cautious with decision-making or other aspects of their job.
I added, “You could simply have said the decision was taking longer than expected, without attributing it to their age.”
He nodded in agreement and sincerely thanked me for the feedback.
It reminded me that these conversations don’t have to be confrontational. A respectful conversation after the meeting can be enough to help someone notice a stereotype they hadn’t realized they were reinforcing.
I hope you’ll do the same the next time you witness one.
4. Call out disgusting jokesLast week, the US Defense Secretary Pete Hegseth mandated testing testosterone levels for service members over 30 and recommended hormone therapy if needed. Afterward, Fox News host Jesse Watters made an awful joke on air about it. He chuckled, saying,
“Women on base: you better be careful. Port calls, women in Asia: you better be careful. Because these guys are going to be wild animals, and you better watch out.”
Sexual violence is not something to joke about.
And as I shared in a previous newsletter, research shows that when someone tells a denigrating joke, it signals that behavior is acceptable. People who might normally conceal their feelings feel freer to express them.
As better allies, let’s speak up. For example, “We don’t joke about rape here.”
5. Community spotlight: Pay attention to the people around youA subscriber from Berlin wrote to tell me about something she’s been noticing on public transportation: there’s a general lack of awareness of people with disabilities and access needs.
Here are some examples she regularly sees:
She urges all of us to, “Look up and be aware of your surroundings so you’re able to offer help in situations where it’s needed.”
Most people are perfectly capable of managing on their own. But knowing someone noticed and cared enough to make space or ask how they might help can make all the difference.
🙏
If you’ve taken a step towards being a better ally, please reply to this email and tell me about it. And mention if I can quote you by name or credit you anonymously in an upcoming newsletter.
That’s all for this week. I’m glad you’re on this journey with me,
Karen Catlin (she/her), Author of the Better Allies® book series
Copyright © 2026 Karen Catlin. All rights reserved.
Together, we can make a difference with the Better Allies® approach.
Break the Silence Around Compensation, and Other Actions for Allies was originally published in Code Like A Girl on Medium, where people are continuing the conversation by highlighting and responding to this story.
Silvia Moreno-Garcia’s 2026 The Intrigue is a stand-alone period-piece thriller.
As long as he had his career conman father to guide him, the man known to some as Ulises Linares prospered. The old man is dead, leaving twenty-nine-year-old Ulises to fend for himself. Thus far, Ulises has not done well in his illicit career, although he has at least managed to elude the Widow Aguirre’s angry sons.
Too old to learn a new trade, Ulises continues to pursue his vocation: bilking lonely women out of their money. His latest target is Perla Inclán, not least because she lives far from Mexico City and from the men Ulises fears are looking for him.
…
KITCHENER - On K-W Oktoberfest night, the Berlin Kegtappers and Toronto Maple Leafs played through more twists and turns than a pretzel.
But in the end, the Leafs emerged victorious 9-3 at Jack Couch Park Thursday night.
It didn't start pretty for Berlin starter Jorge Minyety, who gave up a solo shot to Brando Leroux on the fourth pitch of the game.
It was the first of two home runs on the night for Leroux.
He broke open what was a 5-3 Leaf lead in the eighth with a two-run shot in what was an otherwise nail biter of a game.
Minyety struck out seven and gave up four runs (two earned) on seven hits in six innings of work.
The story of the game became the errors that led to runs being scored.
A wild pick-off attempt off the glove of Yosuke Fujie at third allowed Toronto's second run to score in the first inning.
Fujie redeemed himself later with a pair of spectacular defensive plays at third, and hit a solo home run to make it 4-3 in the sixth inning.
In the eighth, Crix Taveras was caught in no man's land between first and second, but a throwing error and attention away from Yordan Manduley allowed the former Panther to come in to score.
Marcus Knecht hit a two-run homer in the ninth inning to round out the scoring.
Kitchener drops to 10-17 on the season, while Toronto improves to 9-18.
Kitchener is on the road in Hamilton Friday, Barrie Saturday and back home Sunday to take on Welland at 5:05 p.m.
It begins a tough stretch for the Panthers, who play their next seven games against opponents currently in playoff positions.
GET YOUR TICKETS NOW and #PackTheJack!
BOXSCORE
This is but one of the retreaded wellfields that Waterloo Region are reopening in their desperation to keep builders and developers happy. Don't worry they do the risk calculations and theoretically at least while your risk of getting cancer will certainly rise with all these contaminated aquifers being put back in service; the numbers may be tiny such as an increase from 2 or 3 "excess" cancers in a million to a marginally greater 4 "excess" cancers in a million. No worries there especially as hardly any of us have friends, colleagues or relatives suffering cancers, past cancers or fatal cancers. Right?
The Greenbrook Wellfield wells, K1, K2, K4B, K5A and K8 located near Homer Watson Blvd. and Stirling Ave. in Kitchener were all on standby status from at least 2003 until 2007. Newspaper accounts also advise us that that situation has continued during the 2020s whether from a chlorine/ammonia screwup and explosion or from the 1,4 dioxane contamination that came from the Ottawa St. Landfill. Now there have also been well redrills and replacements in this wellfield as the current wells are now known as K1A, K2A, K4C, K5A and K8. These machinations if you will are common practice for the Region when they have "problematic" wells and examples in Cambridge for example include drilling past and through a contaminated zone of a well in order to pump water from a deeper less contaminated or uncontaminated zone.
It is my opinion that this Grand River Source Protection Area Assessment Report Chapter 8, July 29, 2025 is unnecessarily thick and inflated with data that is at best filler or meant to make reading difficult and tedious. That said with enough patience and tenacity and overall knowledge a serious person can find much to be concerned with regarding this wellfield. Firstly the chances of 1,4 dioxane being the only toxic contaminant to reach the Greenbrook Wellfield from the Ottawa St. Landfill is somewhere between zero and nil. Look for benzene, chlorinated solvents and all the usual array of industrial solvents that were dumped there including by Elmira industries such as Varnicolor Chemical and if I might hazard a guess probably Uniroyal Chemical as well back in the day. Paper restrictions were strong whereas physical restrictions were not.
Other issues include high chlorides and high sodiums maybe from road salt but also common from industrially contaminated aquifers. Also I should applaud at least a couple of the Figures in this report as they do identify the Total Number of Significant Threat Activities as well as the Total Number of Properties with Significant Threats. Those numbers are huge (630, 379). They also indicate both High Unadjusted Intrinsic Vulnerability levels for this wellfield as well as High Adjusted Intrinsic Vulnerability threats to water quality.
Waterloo Region are desperate to keep the water flowing and in my opinion they are risking your and my health for their own benefit. What else is new when it comes to water protection.
The lazier way to manage everything docker
Go 52.2k Updated Apr 19
Mars needs allies, intelligence and time.
Only blood and fire can earn them all three.
Read Alien Olympus in ebook, audiobook or paperback now!
♦
Despite sacrifices and even victories, the Protectorate of the Mage-Queen of Mars is losing the war against the Reezh Kazh, the fascist theocracy that rules the only aliens they’ve ever met.
Ambassador Connor O’Hannagain has been sent to find allies among the reezh home worlds, the old and mighty systems that defied the Kazh once—but a centuries-long cold war has left the enemies of his enemy paranoid and violent.
Mike Kelzin, husband, pilot and spy, is the Protectorate’s eyes and ears, seeking every scrap of intelligence that can be found on the Kazh. But access to the enemy worlds is nigh impossible, leaving his best chances in the occupied Chimera System—where even the Resistance is entirely cut off from Mars.
Mage-Admiral Jane Alexander, Crown Princess and fleet commander, knows that they need time more than anything else. Time their enemy is unlikely to give them.
To turn the tide, Mars must buy allies, intelligence, and time—and only the oldest currency can pay for all three.
Blood.
The post Alien Olympus is out now! appeared first on Glynn Stewart.
Level 1 Prize Winners (Due date to claim prize: Friday, August 14)
The post 2026 Youth Impact Survey Prize Winners appeared first on Children and Youth Planning Table.
Ann Leckie’s 2026 Radiant Star is a stand-alone science fiction novel. Radiant Star takes place in Leckie’s Imperial Radch setting.
Although he was not aware of this fact when he was growing up, Jonr of the planet Aaa is the chosen one. Although not in the messianic sense. Jonr was chosen as the payment for a debt that Jonr’s parent Zaved ran up during Zaved’s unsanctioned wanderjahr.
Despite Jonr’s best efforts to elude being sent far from home to serve a stranger of uncertain temperament, Jonr is popped into cold sleep in preparation for shipping.
Suddenly, the Imperial Radch invade! Aaa and its only city Ooioiaa are occupied territory.
Fast-forward thirty years.
…
Python library for generating ambient music from text descriptions. No GPU required. Turn text into sound with a single line of code.
Python 41 Updated May 29
Source
What does your life look like when you are living at your courageous best?
That question came from a leadership coach during a women’s leadership program I was part of at work. The room went quiet, then people started naming their fears. Talking to a large audience. Doing something new outside their comfort zone. Networking with unknown people.
I sat there realizing I did not share any of those fears. Mine was self-advocacy.
For years my mantra was to let the work speak for itself. It felt like the safer, more dignified choice. But in a world of shrinking attention spans, is it fair to expect someone else to notice what I built? That question sent me into a why-why analysis on what I was missing.
Two problems surfaced immediately. Firstly, I do not always know what I should be advocating for. I do the work, but I rarely stop to name what it proves about me. Moreover, even when I know what to say, I do not know how to say it without sounding like I am bragging.
And I am living this right now. I led a product build that went from zero to one with a successful beta run in three months. We are now moving towards general availability. Scaling it from here on needs more people on my team. But when I raise this with my leaders, I can see they do not instinctively get why.
Because I never told them what it actually took to get here. I never walked them through the build, the partner negotiations, the scaling decisions, the ongoing support, all of it stacked on top of each other for months. I assumed the beta success would speak for the effort behind it. It did not. Success is visible. The work underneath it is not, unless you name it.
This article is my attempt to work through both, using what I learned in the session and what I have tested since.
Problem one: knowing what to advocate forSelf-advocacy begins with self-trust, and self-trust is shakier than it looks.
Every evening a voice shows up and tells me the day did not amount to much. It does not pause to check; it just delivers the verdict. I used to treat that voice as the final word.
But there is a second voice, if I actually let it speak. It does not argue with the critic directly. It just asks one question first. What did I actually get done today? Most evenings, when I stop and answer that honestly, the list is longer than the critic gave me credit for. The day was not wasted. I simply never stopped to notice it before moving on to the next thing.
Call it the critic and the mentor. The critic is fast and loud. It shows up uninvited every single day. The mentor only speaks if you deliberately ask it a question, which is exactly why it loses so often.
Here is the fix I am using. Every time the critic makes a claim, I call in the mentor to check it against evidence, not feeling.
And evidence comes in two forms. Functional evidence talks about what I actually produced. That is a fact, not a feeling, and it directly counters the critic's claim. Emotional evidence involves what I got through. Moments I stayed steady, or recovered from something hard.
The reason self-trust feels shaky is not that the evidence does not exist. It is that we never log it. The critic keeps a precise record of every shortfall. The mentor gets no record at all, unless you build one.
So the practical answer to problem one is simple. Keep a running log, even three lines a week, split into two columns. What did I produce. What did I get through. That log becomes the material your mentor uses to talk back to the critic. It is also, directly, the raw material for what you advocate for later.
Problem two: saying it without braggingKnowing your evidence is only half the problem. The other half is saying it out loud without it sounding like self-promotion.
Here is the distinction that unlocked this for me. Self-advocacy is stating a fact. Self-promotion is trying to win approval. The two get confused because they can use the same words. The difference is in what you attach to the sentence.
If I say, I turned around this initiative despite the constraints, and stop there, that is advocacy. It is a fact, stated plainly, with no ask attached.
If I add, so I hope people notice, or, so I deserve more credit, that same sentence turns into a request for approval, and it starts to feel uncomfortable to say, and to hear.
The technique is to separate the update from the ask. State what happened. Do not hedge it with a joke, do not shrink it with a qualifier, do not attach a request unless you actually have one. If you do have an ask, make it separately, and make it direct.
In practice, this sounds like: This shipped, and it took solving three specific constraints. Not: I don’t know if this matters, but I guess I managed to get this out despite everything. The first is advocacy. The second is an apology wearing the clothes of an update.
The two-part practice♦Self-advocacy is not one skill. It is knowing what to say, built from evidence you deliberately collect, and knowing how to say it, built from separating fact from request.
I turned this log into a skill called daily self-advocacy log, open source on GitHub: github.com/kaantibshetty/skills-library/tree/main/career/daily-self-advocacy-log. You can schedule a task using this skill on Claude Cowork or Perplexity, and it will auto-trigger a conversation at the end of your day. Each evening it asks two questions: what did you produce and what did you get through, then saves the entry to a running log so the mentor always has evidence on hand.
The courageous version of me is not the one who talks the loudest about her work. It is the one who keeps the receipts and hands them over without apologizing for it.
♦The Courage Nobody Talks About was originally published in Code Like A Girl on Medium, where people are continuing the conversation by highlighting and responding to this story.
You traced 4 million LLM requests last month. You can pull up any prompt, any completion, any latency percentile. And you still got…
Continue reading on Code Like A Girl »
This wellfield is located on Kitchener's west side near Trussler Rd. and the boundary with Wilmot Township. It consists of multiple Supply Wells (i.e. pumping wells K21A, K25, K29) along with Recovery Wells (RCW1-2) originally and now RCW 2-4. Aquifer Storage & Recovery Wells (ASR1-5) are to accept treated Grand River water for storage to be pumped later into the distribution system by the Recovery Wells RCW 2-4 . There are also a set of wells known as Peaking wells and they are designated K91-94).
I would very much like to see audited up to date pumping rates for all these wells because the data I do have does not jive with the reality of a system constantly needing to expand along with our population. I have long suspected that the entire Mannheim Aquifer Storage and Recovery System has not lived up to expectations whether through misadventure, bad luck or poor planning. Regardless again the data for all these wells that I have shows pumping rates well below the permitted volumes. This alone without ever greater population growth would cause pressure on other nearby well systems to take up the slack. This would include the Mannheim West Wellfield in Wilmot Township as well as the just down the road further west Wilmot Centre Wellfield which has been causing well interference complaints from local residents.
Under all the circumstances well interference is hardly surprising but what is, is the Region's hardas# attitude towards these residents and their water shortages possibly caused by again misadventure, bad luck or poor planning.