WRDashboard

Fork Me on Gitlab

Articles

Brickhouse Guitars

Dontcho Ivanov Snow Parlor #62 Demo by Roger Schmidt

-/-

Elmira Advocate

LIGHTNING & HOCKEY BIAS STRIKE ELMIRA AGAIN!

 

Maybe that's why I'm having a hard time with this one .An obviously wealthy family (check out the mansion, the number of acres owned and the size /cost of the friggin fully equipped hockey rink and infrastructure) made the decision not to follow fairly normal municipal rules and regulations regarding constructing buildings, hooking up to municipal services etc. Now at first blush their excuse was well it's only a hockey rink for kids and hockey is a good thing here in Canada, right. Hmm well maybe O.K.   Although this is no outdoor rink, watered with a hose and used plywood for the ten inch high boards.  This is a full indoor rink and building including a commercial ice /refrigeration system, a commercial ice cleaner (zamboni??), washrooms etc. etc. A friend's first question to me was : How did this family get a professional contractor (plumber, electrician, carpenter, concrete specialists etc. ) to build all this without a Building Permit much less other paperwork to prove this is a documented, legitimate, built to code safe building. 

Now my friend can be enthusiastic at times and he considered that maybe somebody, somewhere got paid off. The more I think about it the more I wonder too. Is our municipal system so lax that a major building built between the mansion and the roadway can be expected to be ignored? This is Woolwich Township not Mississauga or Toronto where I expect buildings come and go all the time without proper paperwork.  O.K. somebody caught this "nice" undocumented building to be used for kids healthy entertainment. The last time Woolwich got an extra rink it was at the proposed new Rec Centre and cost us an experienced councillor (Pat McLean-no loss really) in exchange for a novice (Sandy Shantz) who went on to three terms as mayor totally ensuring that Uniroyal Chemical and successors got away with paying the absolute minimum to "clean up" their chemical nightmare including  Dioxins, DDT, NDMA etc.  

So is this as bad a decision as my gut is telling me or am I still leery of ice rinks after the last one  Woolwich voters wanted and what it really cost us all?

The story was in the K-W Record this week yet I did not see it in the Observer this week. Odd!



Capacity Canada

Outta Work Actors Inc.

♦ Volunteer Opportunity Are you interested in serving on our Board of Directors?

We are a new not for profit theatre group dedicated to project that encourage meaningful engagement and advance a socially just society.

Our expertise spans drama, dance, music, and related arts – especially applied theatre, role play, improvisation, and storytelling.

Through collaboration and open communication, we harness the arts to spark positive social change and promote equity and inclusion. We view theatre as a space where barriers are understood, and diverse perspectives are embraced.

By amplifying marginalized voices and by sharing overlooked stories, we inpire empathy and connection, fostering a sense of belonging for all.

our current main progamming initiative is the Kaleidoscope Two Minute Play Laboratory which is a project that has evolved in collaboration and partnership with the Social Development Centre Waterloo Region. We are searching for three new board members to serve for the next year.

Our first Annual General Meeting June 8, 2026 at 8pm online.

If you are interested in joining our governance team please contact us at ad.outtaworkactors@gmail.com

 

The post Outta Work Actors Inc. appeared first on Capacity Canada.


Code Like a Girl

How AI Gave Me the Confidence of a Man

I have a PhD in Computer Science from UCL. I’ve published papers on privacy-preserving machine learning. I build systems that protect sensitive medical data.

And for years, I was convinced I was missing some fundamental knowledge that everyone else had.

The Secret Knowledge I Didn’t Have

I didn’t do a Computer Science undergrad. I studied Mathematics.

This shouldn’t matter. But it mattered to me, in a way I couldn’t shake.

My colleagues would throw around acronyms. SOLID. DRY. Design patterns I’d never formally learned. They’d reference CS fundamentals like old friends: “Oh, that’s just a classic producer-consumer problem.” I’d nod along, then quietly Google it later. They’d swap LeetCode war stories from interview prep — problems they’d grinded through in university or before job hunts. I never did that. I didn’t even know it was a thing until I was already working.

I knew my stuff. I could build the systems, solve the problems, ship the code. But I always felt like I was doing it wrong somehow. Like there was a “proper” way that everyone else learned in their second-year algorithms class, and I was just hacking my way through with mathematical intuition and Stack Overflow.

Here’s the thing people don’t tell you about imposter syndrome: it’s not about whether anyone believes in you. My managers praised my work. My colleagues respected my contributions. My PhD supervisor told me I was a good researcher.

I chose not to believe any of them.

Every compliment got filtered through a lens of suspicion. “They’re just being nice.” “They don’t want to discourage me.” “They haven’t figured out yet that I don’t know what I’m doing.” I had built an airtight defense system against evidence of my own competence.

The problem was never external validation. It was my refusal to accept it.

The research on this is well-documented. There’s a popular claim that women only apply for jobs when they meet 100% of the qualifications, while men apply at 60%. The exact statistic is probably apocryphal since it’s traced back to a speculative comment at Hewlett Packard rather than rigorous data. But the underlying pattern is real: LinkedIn data shows women are more selective when applying, particularly for senior roles. Harvard Business School research confirms that women are more likely to shy away from opportunities when they’re concerned they aren’t qualified enough.

I wasn’t even thinking about job applications. I was worried about speaking up in code reviews.

The Rubber Duck That Knew Everything♦

I started using AI as a coding assistant about a year ago. At first, it was just convenience — autocomplete on steroids.

Then I started asking it questions.

Not complex architectural questions. Dumb questions. The questions I was too embarrassed to ask colleagues.

“What does SOLID actually stand for and why do people care?”

“Is this the ‘right’ way to structure this, or am I doing something weird?”

“I’m about to suggest X in this meeting. Is that a reasonable approach or am I missing something obvious?”

The AI didn’t judge. It didn’t give me a look. It just answered. And more often than not, the answer was: “Yes, that’s a standard approach” or “That’s called [pattern name], and here’s why it works.”

It turned out the secret knowledge wasn’t that secret. I’d been doing things the “right” way all along — I just didn’t know the names for them.

Filling Gaps That Weren’t Really Gaps

The thing about imposter syndrome is that it’s not about actual gaps in knowledge. It’s about perceived gaps. The fear that everyone else has a foundation you’re missing.

AI let me test that fear without anyone watching.

“Is it normal to not remember how to implement a binary search from scratch?”

Yes. Most engineers look it up.

“Should I know what a monad is?”

Only if you’re writing Haskell. Otherwise, don’t worry about it.

“Am I the only one who finds this codebase confusing?”

No. This codebase IS confusing. Here’s why.

Each answer chipped away at the mythology. The “real” engineers I’d been comparing myself to? They also Googled things. They also forgot syntax. They also found complex systems confusing.

The difference wasn’t knowledge. It was confidence.

“But That’s How I Feel All the Time”

A few months into working with AI daily, I was talking to my husband.

“I feel different,” I said. “I’m not scared to speak up anymore. I feel like I could build anything.”

He looked at me, genuinely confused.

“But… that’s how I feel all the time.”

Reader, I married a man who did a Computer Science degree. Who never published a paper. Who has less experience than me. And he walks around feeling like he can build anything, always has, and was baffled that I ever felt otherwise.

That’s the confidence gap in one conversation.

What Actually Changed

AI didn’t teach me anything I couldn’t have learned elsewhere. The information was always available — in books, in documentation, in colleagues’ heads.

What AI changed was the cost of accessing it.

Before: Every question was a confession of ignorance. Every Google search felt like evidence of my inadequacy. Asking a colleague meant admitting I didn’t know.

After: Questions cost nothing. I could fill perceived gaps instantly, privately, without judgment. I could validate my instincts before meetings instead of doubting them during.

The gaps weren’t real. But the fear of exposing them was. AI made the fear irrelevant.

The Irony

I have a PhD. I’ve published in peer-reviewed journals. I’ve given talks at security conferences. I work on systems that require genuine expertise in cryptography, privacy, and distributed systems.

And I needed an AI to convince me I wasn’t faking it.

That’s absurd. It’s also true.

The research calls it “stereotype threat” — when you’re aware of negative stereotypes about your group, you’re more likely to underperform or hold back. Women in technical fields. Non-traditional backgrounds in CS. The awareness itself becomes a weight.

AI didn’t remove the stereotypes. It just gave me a private space to build confidence without them.

What I’d Tell Younger Me

If you’re a woman in tech, or anyone with imposter syndrome, here’s what I’ve learned:

The secret knowledge doesn’t exist. The people who seem confident aren’t drawing from a deeper well of fundamentals. They’re just not questioning themselves as much.

Your instincts are probably right. If you’ve been shipping code and solving problems, you know more than you think. You just don’t trust it yet.

The cost of asking matters. If asking questions feels expensive — socially, emotionally, professionally — you’ll ask fewer questions. If you can reduce that cost, you’ll fill gaps faster and build confidence sooner.

AI is a judgment-free zone. Use it. Ask the dumb questions. Validate your instincts. Get the 2am reassurance that your approach is reasonable.

The Confidence of a Man

I used to think confidence was about knowledge. Know enough, and you’ll feel confident.

It’s not. Confidence is about permission. Permission to not know everything. Permission to figure it out as you go. Permission to trust your judgment even when you can’t name the design pattern you’re using.

Some people are handed that permission early. Others have to find it.

AI didn’t give me knowledge I was missing. It gave me permission I didn’t know I needed.

Now I speak up in architecture reviews. I propose approaches without disclaimers. I trust that my mathematical intuition is just as valid as someone else’s CS degree.

I feel like I can build anything.

Apparently, that’s how men feel all the time.

If this resonates, I’d love to hear your story. What gave you permission to trust yourself?

How AI Gave Me the Confidence of a Man was originally published in Code Like A Girl on Medium, where people are continuing the conversation by highlighting and responding to this story.


Code Like a Girl

Deep dive into context engineering for AI agents

How to optimize context: a precious finite resource for AI agents♦Image by Hans-Jurgen Mager from Unsplash

We talk a lot about better models, larger context windows, and more capable agents. But most real-world failures don’t come from model capability — they come from how context is constructed, passed, and maintained.

This is a hard problem. The space is moving fast and techniques are still evolving. Much of it remains an experimental science and depends on the context (pun intended), constraints and environment you’re operating in.

In my work building multi-agent systems, a recurring pattern has emerged: performance is far less about how much context you give a model, and far more about how precisely you shape it.

This piece is an attempt to distill my learnings into something you can use.

It focuses on principles for managing context as a constrained resource — deciding what to include, what to exclude, and how to structure information so that agents remain coherent, efficient, and reliable over time.

Because at the end of the day, the strongest agents are not the ones that see the most. They are the ones that see the right things, in the right form, at the right time.
TerminologyContext engineering

Context engineering is the art of providing the right information, tools and format to an LLM for it to complete a task. Good context engineering means finding the smallest possible set of high signal tokens that give the LLM the highest probability of producing a good outcome.

In practice, good context engineering usually comes down to four moves. You offload information to external systems (context offloading) so the model does not need to carry everything in-band. You retrieve information dynamically instead of front-loading all of it (context retrieval). You isolate context so one subtask does not contaminate another (context isolation). And you reduce history when needed, but only in ways that preserve what the agent will still need later (context reduction).

A common failure mode on the other side is context pollution: the presence of too much unnecessary, conflicting or redundant information that it distracts the LLM.

Context rot

Context rot is a situation where an LLM’s performance degrades as the context window fills up, even if it is within the established limit. The LLM still has room to read more, but its reasoning starts to blur.

You would have noticed that the effective context window, where the model performs at high quality, is often much smaller than what the model technically is capable of.

There are two parts to this. First, a model does not maintain perfect recall across it’s entire context window. Information at the start and the end is more reliably recalled than things in the middle.

Second, larger context windows do not solve problems for enterprise systems. Enterprise data is effectively unbounded and frequently updated that even if the model could ingest everything, that would not mean it could maintain a coherent understanding over it.

Just like humans have a limited working memory capacity, every new token introduced to the LLM depletes this attention budget it has by some amount. The attention scarcity stems from architectural constraints in the transformer, where every token attends to every other token. This leads to a n² interaction pattern for n tokens. As the context grows, the model is forced to spread its attention thinner across more relationships.

Context compaction

Context compaction is the general answer to context rot.

When the model is nearing the limit of it’s context window, it summarises it’s contents and reinitiates a new context window with the previous summary. This is especially useful for long running tasks to allow the model to continue to work without too much performance degradation.

Recent work on context folding offers a different approach — agents actively manage their working context. An agent can branch off to handle a subtask and then fold it upon completion, collapsing the intermediate steps while retaining a concise summary of the outcome.

The difficulty, however, is not in summarising, but in deciding what survives. Some things should remain stable and nearly immutable, such as the objective of the task and hard constraints. Others can be safely discarded. The challenge is that the importance of information is often only revealed later.

Good compaction therefore needs to preserve facts that continue to constrain future actions: which approaches already failed, which files were created, which assumptions were invalidated, which handles can be revisited, and which uncertainties remain unresolved. Otherwise you get a neat, concise summary that reads well to a human and is useless to an agent.

Agent harness

A model is not an agent. The harness is what turns a model into one.

By harness, I mean everything around the model that decides how context is assembled and maintained: prompt serialization, tool routing, retry policies, the rules governing what is preserved between steps, and so on.

♦Drawn by author

Once you look at real agent systems this way, a lot of supposed “model failures” now look different. I’ve encountered many of such at work. These are actually harness failures: the agent forgot because nothing persisted the right state; it repeated work because the harness surfaced no durable artefact of prior failure; it chose the wrong tool because the harness overloaded the action space; and so on.

A good harness is, in some sense, a deterministic shell wrapped around a stochastic core. It makes the context legible, stable, and recoverable enough that the model can spend its limited reasoning budget on the task rather than on reconstructing its own state from a messy trace.

Communication between agents

As tasks get more complex, teams have defaulted towards multi-agent systems.

The mistake is to assume that more agents means more shared context. In practice, dumping a giant shared transcript into every sub-agent often creates exactly the opposite of specialisation. Now every agent is reading everything, inheriting everyone else’s mistakes, and paying the same context bill over and over again.

If only some context is shared, a new problem appears. What is considered authoritative when agents disagree? What remains local, and how are conflicts reconciled?

The way out is to treat communication not as shared memory, but as state transfer through well-defined interfaces.

For discrete tasks with clear inputs and outputs, agents should usually communicate through artefacts rather than raw traces. A web-search agent, for instance, does not need to pass along its entire browsing history. It only needs to surface the material that downstream agents can actually use.

This means that intermediate reasoning, failed attempts, and exploration traces stay private unless explicitly needed. What gets passed forward are distilled outputs: extracted facts, validated findings, or decisions that constrain the next step.

For more tightly coupled tasks, like a debugging agent where downstream reasoning genuinely depends on prior attempts, a limited form of trace sharing can be introduced. But this should be deliberate and scoped, not the default.

KV cache penalty

When AI models generate text, they often repeat many of the same calculations. KV caching is an inference time optimisation technique that speeds up this process by remembering important information from previous steps instead of recomputing everything again.

However, in multi-agent systems, if every agent shares the same context, you confuse the model with a ton of irrelevant details and pay a massive KV-cache penalty. Multiple agents working on the same task need to communicate with each other, but this should not be via sharing memory.

This is why agents should communicate through minimal, structured outputs in a controlled manner.

Keep the agent’s toolset small and relevant

Tool choice is a context problem disguised as a capability problem.

As an agent accumulates more tools, the action space gets harder to navigate. There is now a higher probability of the model going down the wrong action and taking an inefficient route.

This has consequences. Tool schemas need to be far more distinct than most people realise. Tools have to be well understood and have minimal overlap in functionality. It should be very clear on what their intended use is and have clear input parameters that are unambiguous.

One common failure mode that I noticed even in my team is that we tend to have very bloated sets of tools that are added over time. This leads to unclear decision making on which tools to use.

Agentic memory

This is a a technique where the agent regularly writes notes persisted to memory outside of the context window. These notes get pulled back into the context window at later times.

The hardest part is deciding what deserves promotion into memory. My rule of thumb is that durable memory should contain things that continue to constrain future reasoning: persistent preferences. Everything else should have a very high bar. Storing too much is just another route back to context pollution, only now you have made it persistent.

But memory without revision is a trap. Once agents persist notes across steps or sessions, they also need mechanisms for conflict resolution, deletion, and demotion. Otherwise long-term memory becomes a landfill of outdated beliefs.

To sum up

Context engineering is still evolving, and there is no single correct way to do it. Much of it remains empirical, shaped by the systems we build and the constraints we operate under.

Left unchecked, context grows, drifts, and eventually collapses under its own weight.

If well-managed, context becomes the difference between an agent that merely responds and one that can reason, adapt, and stay coherent across long and complex tasks.

Thank you for staying with me till the end, and I hope this was useful for you. Subscribe to my content to follow along my journey.

Deep dive into context engineering for AI agents was originally published in Code Like A Girl on Medium, where people are continuing the conversation by highlighting and responding to this story.


Code Like a Girl

The Scheduling Boundaries Behind Responsive UI

This is the last article in a series on how JavaScript actually runs. You can read the full series here or on my website.♦

We now know how the event loop and rendering pipeline behave.

The browser:

  • Runs a macrotask to completion.
  • Drains all microtasks.
  • Executes any scheduled requestAnimationFrame callbacks.
  • Drains all microtasks.
  • Performs layout and paint to produce the next frame.
  • Moves on to the next macrotask.

Given that environment, how should we write UI code?

Long Tasks Block Everything

If you want the UI to stay responsive, your tasks must yield quickly.

Consider this:

button.addEventListener("click", () => {
const start = performance.now();

while (performance.now() - start < 3000) {
// busy loop for 3 seconds
}

console.log("done");
});

Once the button is clicked, the page becomes unresponsive. The click handler is a macrotask and nothing can interrupt it. Everything else has to wait: there is no re-rendering, no new input, no requestAnimationFrame callbacks.

Long-running tasks monopolize the main thread. While they run, rendering pauses, input waits, animations stall and timers are delayed. Responsive UI depends on cooperation.

Microtasks Do Not Yield to Rendering

Chaining promises look like a way to break work into pieces:

button.addEventListener("click", () => {
Promise.resolve()
.then(() => heavyWork())
.then(() => {
status.textContent = "Halfway...";
})
.then(() => moreHeavyWork())
.then(() => {
status.textContent = "Done";
});
});

However, each .then() callback becomes a microtask when its associated Promise resolves. Because the browser must drain the entire microtask queue before rendering, chaining Promises does not create render opportunities. As a result, the user sees nothing until “Done” shows up on screen.

If you want to let the browser render, you must introduce a scheduling boundary:

button.addEventListener("click", () => {
Promise.resolve()
.then(() => heavyWork())
.then(() => {
status.textContent = "Halfway...";

return new Promise(resolve => {
// setTimeout used to introduce a scheduling boundary
setTimeout(resolve, 0);
});
})
.then(() => heavyWork())
.then(() => {
status.textContent = "Done";
});
});

Alternatively, we can consider:

button.addEventListener("click", () => {
Promise.resolve()
.then(() => heavyWork()
.then(() => {
status.textContent = "Halfway...";

return new Promise(resolve => {
// requestAnimationFrame used to introduce a scheduling boundary
requestAnimationFrame(resolve);
});
})
.then(() => heavyWork()
.then(() => {
status.textContent = "Done";
});
});

Both approaches work because a .then() callback is only queued once its associated Promise resolves. By returning a Promise that resolves later, we delay when the next microtask is created. setTimeout yields to the next macrotask, while requestAnimationFrame yields to the next frame.

Choosing Between Promises, setTimeout and requestAnimationFrame

These mechanisms signal different intentions to the browser. They are not interchangeable.

Use a Promise when you need to continue work immediately after the current macrotask completes, but before the browser moves on. They are ideal for continuing work that logically depends on previous work. They help to preserve order, transform results and update state after completion. They are not a yielding mechanism.

Use setTimeout when you need to create a real scheduling gap. They are useful for breaking up long computation, deferring non-critical work and yielding cooperatively. They are general purpose yields.

Use requestAnimationFrame when you are performing visual updates. It is ideal for animations and layout-sensitive work.

♦Different scheduling APIs solve different coordination problems in the browser event loopAlign Visual Updates to Frames

Consider this approach:

document.addEventListener("mousemove", (event) => {
box.style.left = event.clientX + "px";
});

If the mouse fires 200 events per second, this code attempts 200 DOM updates per second. But on most displays, the refresh happens about 60 times per second. Visual work that exceeds that rate is simply wasted.

Instead, consider:

let latestX = 0;
let scheduled = false;

document.addEventListener("mousemove", (event) => {
latestX = event.clientX;

if (!scheduled) {
scheduled = true;

requestAnimationFrame(() => {
box.style.left = latestX + "px";
scheduled = false;
});
}
});

We use requestAnimationFrame to update at most once per frame, no matter the rate at which input can fire.

Respect the Frame Budget

requestAnimationFrame guarantees alignment to the frames but it does not guarantee smoothness. On a 60fps display, the browser has roughly 16ms per frames. That 16ms must include all JavaScript and rendering work.

If the JavaScript executed alone takes longer than that, the browser cannot complete rendering in time:

requestAnimationFrame(() => {
const start = performance.now();

while (performance.now() - start < 40) {
// 40ms of work
}
});

This callback runs before the browser renders but it blocks for 40ms and therefore exceeds the frame budget. Since the browser cannot display partial frames, if the 16ms window is missed, that frame is dropped. Instead of rendering at 60 frames per second, the browser renders less frequently: Animations can appear jerky, motion uneven and interactions delayed.

So while requestAnimationFrame helped with alignment, we must still finish the frame work within the frame window. Either work fits inside the budget or it is spread across multiple frames. For instance, this could mean animating in steps or deferring non-critical computation.

Responsive UI requires both correct scheduling and work that fits inside the budget.

Guard Against Stale Asynchronous Work

Asynchronous code creates delays. During this window, state can change:

function loadData() {
fetch("/data")
.then(response => response.json())
.then(data => {
render(data);
});
}

This looks harmless but imagine the user clicking twice quickly and loadData() is called twice in succession. If the second request finishes first, the first request would render stale data and the UI would then be incorrect.

One common pattern is to guard against outdated work:

let currentRequestId = 0;

function loadData() {
const id = ++currentRequestId;

fetch("/data")
.then(response => response.json())
.then(data => {
if (id !== currentRequestId) return;
render(data);
});
}

Now each request captures its own response and only the most recent request is allowed to update the UI.

Designing With the Browser, Not Against It

Responsive UI emerges from working within the browser’s execution model.

In practice, that often means:

  • Keeping tasks short so the browser can continue scheduling
  • Remembering that microtasks do not yield to rendering
  • Aligning visual updates to frame boundaries
  • Ensuring that work fits within the frame budget.
  • Verifying that delayed work is still relevant before applying it

I started this series because I had code that used Promises, setTimeout, and requestAnimationFrame. They all felt “asynchronous” and interchangeable. Turns out they weren’t.

Good UI code knows which scheduling boundary to use and when.

_This article was originally published on my [website](www.marshateo.com/writing/requestAnimationFrame)._

The Scheduling Boundaries Behind Responsive UI was originally published in Code Like A Girl on Medium, where people are continuing the conversation by highlighting and responding to this story.


Code Like a Girl

You are doing two jobs. You are only being evaluated on one.

Performance Frameworks that Recognize Invisible Second Shift in Tech

Continue reading on Code Like A Girl »


Code Like a Girl

5 Concepts Most Developers Mix Up in System Design

System Design Advanced #4 — Encoding, hashing, encryption, serialization, and compression explained simply

Continue reading on Code Like A Girl »


Code Like a Girl

Commit To Equal Employment Opportunity, and Other Actions for Allies

Better allyship starts here. Each week, Karen Catlin shares five simple actions to create a workplace where everyone can thrive.♦1. Commit to equal employment opportunity

Last week, the U.S. Equal Employment Opportunity Commission (EEOC) filed a discrimination lawsuit against the New York Times, alleging that the organization passed over a white man for a promotion in favor of a less qualified woman.

A spokesperson for the Times responded that race and gender did not factor into the decision and that they hired the most qualified candidate.

Former EEOC commissioner Chai Feldblum also weighed in, noting that many of the lawsuit’s allegations describe legal efforts to diversify a workforce. And that there is no proof the Times crossed the line into unlawful discrimination.

Feldblum added, “Thank goodness for all the employers who are still holding true to their moral compass, to their commitment to equal employment opportunity.”

If we serve on a hiring or promotion committee, let’s do the same.

Define the qualifications needed for the role. Determine how to evaluate candidates accordingly. Apply those standards consistently. And then select the most qualified person.

Share on Instagram, LinkedIn, or YouTube.

This week’s Better Allies content is sponsored by:

As our industry evolves, Femgineer is here to help you stand out as a technical leader who can communicate and influence — not just build. We do that through coaching, courses, and content. Visit femgineer.com and subscribe to our newsletter to learn more!

2. Rebuild psychological safety (when it’s been broken)

My friend Minette Norman and her coauthor Karolin Helbig are publishing their latest book, The Psychological Safety Playbook for Changemakers next week. I read an advanced copy (it’s fantastic) and asked Minette to summarize a section especially relevant to better allies. Here is what she shared:

Psychological safety is slow to build and quick to break. Even small breaches can trigger a deep sense of threat.

Neuroscience explains why: when psychological safety is disrupted, the brain reacts as if we’re in physical danger, flooding our system with stress hormones and launching us into fight–flight–freeze.

Repairing a rupture requires more than a sincere apology. It requires sustained, visible effort, including:

  • Recognition: Name the breach clearly and acknowledge its impact without justifying the behavior.
  • Responsibility: Take full accountability. Focus on impact, not intent: “I see how what I said hurt you.”
  • Remedy: Recommit through consistent, observable behavior. Words alone won’t rebuild trust.
  • Relationship Rebuilding: Create space for continued, honest conversation. Consistency is key.

Even with genuine commitment, it may take significant time before people feel safe to speak up again. There is no magic formula. However tempting it may be to declare that “this is a safe space,” people believe it’s safe only when they have seen consistent proof over time that when they speak up, ask a question, make a mistake, or offer a divergent viewpoint, they will not be embarrassed, marginalized, or punished.

3. Create inclusive social media posts

In honor of Global Accessibility Awareness Day on May 21, here are three simple things we can do to promote digital access and inclusion with our social media posts:

  • Limit emojis. Screen readers read emoji descriptions aloud. Ten “Smiling face with sunglasses” emojis in a row means someone hears “smiling face with sunglasses” repeated ten times. A good rule of thumb: no more than three emojis per post.
  • Describe photos, images, and videos. Alt text and image descriptions help people using screen readers understand visual content and participate more fully.
  • Avoid “fancy fonts” to create bold, italics, or other text treatments for emphasis. Special characters can be difficult for screen readers to interpret correctly.
4. Read banned books

I recently joked with my daughter that her twin babies already have an impressive library of banned books.

We’ve been reading titles like Antiracist Baby (by Ibram X. Kendi, illustrated by Ash Kwak Lukashevsky) and Dolls and Trucks Are for Everyone (by Robb Pearlman, illustrated by Eda Kaban).

It reminded me why banned books matter. They often explore histories, identities, and experiences that some people would rather ignore or erase.

As PEN America said last year, after the U.S. Naval Academy removed hundreds of books about racism, sexism, LGBTQ+ topics, the Holocaust, the Ku Klux Klan, and other subjects from their library:

“Books are not the enemy; ignorance is the enemy.”

(I should note that the Naval Academy reversed its decision after public outcry.)

Let’s keep reading broadly, especially books that challenge us, expand our perspective, or tell stories that have historically been marginalized.

5. Community spotlight: Avoid words that minimize harm

Sometimes the words we use can unintentionally minimize systemic harm.

Subscriber Joel Lesko told me that he uses Justice AI GPT, a tool that checks his posts, emails, and more for bias. He recently used it while drafting an article about attacks on DEI efforts.

The tool flagged terms like “bias” and “microaggressions,” prompting him to reflect on whether those words softened the seriousness of what he was describing. As Lesko explained:

“It prompted me to consider that language can make systemic problems sound like accidents or just interpersonal issues.”

He added,

“Deeper in the audit process, Justice AI brought up the two battles that DEI is waging — keeping the work legal and making sure the words we use to talk about DEI still tell the truth. It prompted me to consider if my language was a carrier of truth or a cover for harm and systemic damage.”

Thank you for sharing 🙏. It’s a timely reminder to choose words that accurately reflect the impact of what’s happening.

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.

  • Say thanks to Karen and buy her a coffee (Need a receipt for educational reimbursement? Reply to this email, and we’ll take care of it.)
  • Sponsor an edition of this newsletter
  • Follow @BetterAllies on Instagram, Medium, or YouTube. Or follow Karen Catlin on LinkedIn
  • Read the Better Allies books
  • Tell someone about these resources
♦♦

Commit To Equal Employment Opportunity, 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.


Children and Youth Planning Table of Waterloo Region

Adan Imran Portrait

The post Adan Imran Portrait appeared first on Children and Youth Planning Table.


Code Like a Girl

Her Edge: The Job Search Playbook You Learned Doesn’t Work Anymore

Most people in tech have only searched for jobs in a hot market. Here’s the playbook for when it’s not.

Excerpt from my paid Substack column, Her Edge. Read the full post here.

If you’ve sent out dozens of applications and heard nothing, that’s not a reflection of your worth or your skills. The game just changed, and nobody told you.

If you entered tech after 2007, you’ve mostly job-searched in a market that was working in your favor. For fifteen years, almost any approach to getting a job worked.

Then 2022 happened. And it’s only gotten harder since.

I know what this feels like. I graduated into the last market that was this bad.

It was 2003.

Five Guys and a Co-op (No, not those 5 guys)

I was finishing my Master’s degree in Cryptography and planning a wedding.

My wedding!

To my lovely husband of 22 years now, Gareth. We met in the very first week of our Master’s program in September 2002 at the University of Waterloo. He was also a mathie.

He was from New Zealand, on a student visa that would run out eight months after our wedding. To sponsor him for Canadian permanent residency, I needed to prove I could financially support us both.

To do that, I needed a job.

The only problem was that the job market had completely fallen apart.

The dot-com bubble had burst three years earlier, and by late 2003, the tech sector was still at rock bottom. The workforce had shrunk 17.8% from its peak.

My background was narrow. I had an undergraduate degree in Math with some CS courses. Three co-op terms as a security software developer at the Communications Security Establishment, Canada’s version of the NSA, and a Master’s in cryptography from the University of Waterloo.

That’s not the typical resume for a Software Developer. I needed a security role, and in that market, finding one felt almost impossible.

I applied to every job I could find online. I got crickets.

I’d originally planned to work at the CSE after graduation. Top secret work doing leading-edge crypto and cybersecurity work.

It’s why I got a master’s degree in the first place. But those positions were all in Ottawa, and Gareth still had eight months left of his degree at UW.

Ottawa wasn’t an option anymore.

So there I was. No job. A wedding in December. And a husband-to-be, whose legal right to stay in Canada depended on me figuring it out.

That summer, my supervisor had suggested I attend a small cryptography conference hosted on campus. At the conference, I met five guys who worked at a company called Research In Motion (RIM). The company that created the BlackBerry and would eventually change its name to match.

In Waterloo, RIM was already a hot employer. The place everyone wanted to get into. Outside of Waterloo, almost nobody had heard of it yet.

These guys worked on a team called CryptoDev, responsible for all cybersecurity programming on the BlackBerry device and its backend servers.

At the conference dinner, they invited me to sit at their table.

What happened at that dinner was one of the strangest things I had ever seen.

All five of them sat there with their heads down, looking at their BlackBerries and typing. The entire meal! Not talking. Not conversing. Just typing.

I didn’t even own a cell phone yet. It would be like a time traveler from 1990 sitting at our dinner tables today.

Normal now. Bizarre then.

I also met a UW co-op student working with CryptoDev that night. We chatted, the conference ended, and I went back to school and kept working on my Master’s thesis. They went back to RIM.

By October, I was applying to jobs in a panic. RIM had done major layoffs in late 2002 and had a hiring freeze all of 2003. I applied to their site anyway.

I went to job fairs and handed in my resume. Nothing. Not even an acknowledgment.

November arrived. Gareth and I were getting married on December 27th. I was running out of time.

♦Cartoon version of me and the co-op student generated with ChatGPT.

Then one day, I was walking to school and ran into the co-op from the conference in a parking lot. He asked how things were going.

I told him the truth.

I had been applying everywhere and hearing nothing. I was getting married in weeks. My future husband wasn’t a Canadian citizen, and I needed a job to sponsor him.

He said:

“Why don’t you email me your resume? I’ll forward it to my boss. I don’t know if there are any openings on the team, but he’s a good guy and he’s always looking for talented people.”

That was the whole conversation. A few minutes in a parking lot in November 2003.

A week later, I entered the RIM buildings for an interview. It went well and a few weeks later, the call came. They were offering me a position.

The salary they quoted was $62,000.

That was the only time in my career I did not negotiate. Not even a little. I simply said yes.

I was a grad student who had never made more than $20,000 a year. When someone offers a number like that, your jaw drops and your brain stops working.

I got married Dec 27, 2003, and started at RIM on January 10th, 2004. I was one of the first people hired after their major freeze lifted, and I worked there for eight years.

The year I started, we celebrated selling one million BlackBerrys. Our Christmas party had the slogan: 2 million thumbs can’t be wrong. By the time I left, over 80 million people were using BlackBerries. My code lived on every one of them.

But here’s the part I want to stay with.

I had already applied to RIM. Nothing happened. What opened the door was a conversation at a conference dinner and five minutes in a parking lot with someone willing to say my name to the right person.

The market heated up after that. But I kept using the same approach because it worked in a hot market, too.

They Came Looking

I didn’t find my second job. It found me.

A recruiter was actively poaching people from RIM. They found me on LinkedIn. I had kept my profile current with my title, my work, and my skills all up to date. That’s why they called.

A lot of people only updated LinkedIN when they are thinking of moving on to a new job. Every year, I would take a look at mine and update it. It paid off.

Sadly, the job wasn’t a good fit. Within ten months, I knew I needed to move on. That’s a story for another day — a juicy one — but not for today.

But the lesson stayed with me: be findable. Keep your profile current. You never know who is looking.

An Old Connection

In the spring of 2012, I started looking. I applied online for a development manager position at a local company called D2L and heard nothing for two weeks.

So I went to LinkedIn to see if I knew anyone at D2L.

I did. There was a director there that I had worked with at BlackBerry.

I sent him a message:

“Hey, I’ve applied to this dev manager position. I don’t know if you know the hiring manager, but I was wondering if you’d be willing to put in a good word.”

He walked over to the hiring manager’s desk that same day and said:

“Dinah Davis applied for the dev manager job. I worked with her at BlackBerry. She’s really good. You should give her an interview.”

That’s all he did. He got me my foot in the door. I did the rest. The interviews went so well that in the end, two directors were fighting over which one would get me.

I spent two and a half years at D2L and was promoted to Senior Manager while there. But I could see the glass ceiling from where I was standing.

So I started quietly looking.

I Told Her I Wanted Her Job

I was clear about one thing: I would only leave for a director title or above. I liked my teams. I just couldn’t see a future where the promotion was coming on any timeline that made sense to me.

I also knew what I was looking for.

I had watched BlackBerry grow from under a million users to hundreds of millions in eight years. I contributed to that, even if in a small way. I wanted to do it again, but this time in a more influential seat.

So I built a pitch around it. Specific and honest. And I started going to local events and telling people exactly what I was looking for.

Not just “I’m looking for a new job.”

Something much more specific than that. My pitch was:

“I’m looking for a company just coming out of startup chaos. One that needs someone to build the scaffolding to grow and scale software teams.
I build software teams that are happy, high-performing, and focused. I remove the chaos. I protect their time. My teams at BlackBerry were the top teams. My teams at D2L are the top teams.
That’s what I do and I’m looking to do it again.”

My network connected me with three companies. All three had something like the role I was describing.

One was a cybersecurity company I was genuinely interested in. But it became clear through the process that they weren’t going to give me anything above manager.

I passed.

The second was Thalmic Labs, one of the hottest companies in Waterloo at the time. They wanted a director of engineering for a secret project they couldn’t tell me about.

I interviewed.

The third was Arctic Wolf.

The same week I started looking, I was volunteering at a Think About Math event for Grade 9 girls, the same event where Code Like a Girl was born. We sat at tables with posters behind us listing our job titles and what we did. Small groups of girls rotated through to talk to us.

Across the room, I noticed a poster that said VP of R&D.

Before the end of the night, I walked over and introduced myself to the woman sitting in front of it. Her name was Kim Tremblay. I told her I wanted to do her job someday and asked if she’d have lunch with me.

She said yes, and we set up a time. Then a snowstorm hit, and our first lunch got canceled. We pushed it back two weeks.

The day of the rescheduled lunch, one hour before I was supposed to meet Kim, my CTO pulled me into a room and told me I would not be getting the director role I had been working toward. In front of my product manager.

I wasn’t entirely surprised. I had felt the ceiling for a while. It’s why I started looking for a new role. But hearing it out loud, in that room, in front of a colleague, made it real.

I was so frustrated and hurt that he would do that in front of my product manager.

I walked into that lunch and told Kim everything. What had just happened. What I was looking for. And why I was ready.

About halfway through, she stopped me and said.

“You should come work for me.”

I thought she was joking. Little did I know that Kim does not joke. Not about things like this. She looked at me and said:

“I’m serious. I need a dev manager to help me grow and scale. You want a director title? I have no problem giving you that. Our CEO is actually in town this week. Come meet him.”

A week later, I had two offers in my hands. One each from Arctic Wolf and Thalmic Labs.

Thalmic had more local name recognition and momentum; they were doing cool things. The downside was that it was run by three twenty-something guys in their first company. Great guys, but they didn’t have a lot of previous experience running a company.

No one I knew had even heard of Arctic Wolf. The whole company was only 35 people.

But it had two seasoned and previously successful entrepreneurs. Arctic Wolf offered me more stock and 50% more salary. On top of that, Kim told me her goal was to retire in two or three years, and then I’d be taking over for her. Finally, it would allow me to go back to my roots, back to cybersecurity.

That wasn’t a hard decision. I chose Arctic Wolf.

It turned out to be the right one.

Arctic Wolf hit unicorn status in 2020. When I left in 2023, the company was valued at four billion dollars. The sale of my privately held stocks allowed me to retire and work on Code Like a Girl full-time.

Four corporate jobs. Four different doors.

Every one of them opened by staying visible, staying connected, and knowing what I was looking for.

Why I’m Sharing this with You Now

I’ve been thinking about all of this lately because of the women I’m mentoring right now. Many of them are weighing whether to stay or go. Some have been waiting years for promotions that aren’t coming. They’re qualified. They’re ready. And they’re watching a job market that has made moving feel terrifying.

They’re not wrong to be scared.

In 2025, 245,953 tech workers were laid off. So far in 2026, another 121,111 have already been cut. That’s 961 people a day, and the year has barely started.

Tech job postings in the U.S. are down 36% from February 2020 and recent CS grads are facing 6.1% unemployment, more than double the overall rate.

Last week, even Arctic Wolf laid off 250 people. This week, I posted on LinkedIn asking if anyone was hiring. Within four hours, eleven employers had reached out looking for talent. The network works both ways.

One of the 250 people laid off from Arctic Wolf last week is a friend of mine. A few days later, I heard he already had a verbal offer and four interviews in progress.

He hadn’t applied for a single job.

That’s the network working in real time.

This is not the hot market of 2021. This feels a lot like 2003. And in 2003, applying online was about as effective as shouting into the void. Employers are struggling too. They’re drowning in applications and don’t know where to look.

That’s why networking is so powerful. Both ways.

What worked then still works now.

To read more about the framework I used and how you can use it too follow the link below.

Her Edge: The Job Search Playbook You Learned Doesn't Work Anymore

Her Edge: The Job Search Playbook You Learned Doesn’t Work Anymore was originally published in Code Like A Girl on Medium, where people are continuing the conversation by highlighting and responding to this story.


Agilicus

De-Risking Operational Technology: 5 Security Investments That Deliver Disproportionate Returns

-/-

James Davis Nicoll

Owe My Soul / The Last Contract of Isako By Fonda Lee

Fonda Lee’s 2026 The Last Contract of Isako is a stand-alone science fiction dystopia.

Isthmus Isako is an atier (think samurai). Isako is primarily a bodyguard, but her duties also include informing soon-to-be former Astrocom employees that their positions are terminated. Why assign this duty to an armed killer? Because on the barely habitable planet of Aquilo, job termination and personal termination are the same thing.

Since Astrocom just lost its infra-corporate battle with SatOps, job termination may soon be personally relevant to Isako.

Code Like a Girl

The Progesterone Tax: The Invisible Cost of Being Productive as a Woman

Why our ambition seems to “disappear” every 28 days, and the psychological price we pay for trying to remain consistent.♦The masquerade of consistency: Living in a body that moves like a tide inside a world built for machines. (Image generated by the author using Google Gemini)

Last Tuesday, I was convinced I could rebuild my entire life before the end of the year.

I answered emails before breakfast. I cleaned my apartment while listening to a podcast about discipline. I replied to messages immediately. My future felt organized, expandable, almost obedient to effort. I even opened a blank Notion page titled “The Next Version of Me” with the kind of optimism usually reserved for people who have never experienced burnout.

Three days later, I stood in my kitchen staring at a sink full of dishes and felt an almost irrational urge to cry.

Nothing catastrophic had happened.

No tragedy. No crisis. No dramatic life event.

Just a body quietly changing its chemistry.

That is the part nobody prepares women for — not the period itself, but the psychological whiplash of becoming unfamiliar to yourself every few weeks. One version of you is articulate, ambitious, socially resilient. Another version struggles to answer a text message that simply says, “Hey, are you free to talk?”

And because we live in a culture obsessed with consistency, women are trained to interpret this shift as a personality defect rather than a biological rhythm.

You must be lazy now.

Undisciplined.

Too emotional.

Not mentally strong enough.

I used to believe ambition was a fixed trait, something permanently wired into the architecture of personality.

Now it feels more like a subscription service my body renews — or quietly suspends — every twenty-eight days.

♦Ambition isn’t a fixed trait; it’s a subscription service that biology sometimes quietly suspends. (Image generated by the author using Google Gemini)

The strange thing is that the ambition itself does not fully disappear. The dreams remain intact. The goals still matter. You still care about your work, your future, your relationships. But suddenly everything feels farther away, as though someone inserted glass between you and your own momentum.

Replying to one email feels like dragging furniture uphill.

A simple “Can we chat?” notification lands in your nervous system like a threat.

You reread messages three times before answering because your brain suddenly feels padded with cotton.

And perhaps the most isolating part is that outwardly, you still look functional.

You go to work.

You attend meetings.

You smile politely during conversations while internally feeling as though your battery has been stuck at 12% for days.

People assume you are fine because you are still performing fine.

But performance and ease are not the same thing.

The dangerous myth of “consistent women”

I think this is why so many women quietly believe they are inconsistent people. We keep comparing ourselves to previous versions of ourselves without realizing those versions existed under completely different hormonal conditions.

One week, you were clearing an inbox of fifty emails before lunch. This week, you are staring at one unanswered notification as though someone asked you to solve a hostage negotiation before coffee.

The shift feels absurd until you understand that hormones are not just reproductive chemicals. They are neurological instructions.

They affect sleep, emotional regulation, memory, stress tolerance, motivation, and the way the brain processes reward itself. During the first half of the menstrual cycle, rising estrogen often creates a sense of cognitive expansion. Many women describe feeling sharper, quicker, more optimistic, more socially capable. Thoughts connect faster. Decisions feel easier. The future appears manageable.

Then ovulation passes.

Progesterone rises.

And for some women, it feels like the internal operating system suddenly switches into low-power mode.

Not enough to stop functioning entirely. Just enough to make every ordinary task feel emotionally overclocked.

We are trying to run extraordinarily sophisticated biological software on social systems designed around uninterrupted output and twenty-four-hour resets. Eventually the server overheats. The crash is not evidence of weakness. It is feedback.

But modern life does not leave much room for biological nuance.

We are taught to romanticize endurance instead.

To push through exhaustion.

To remain pleasant while depleted.

To continue nurturing, producing, responding, organizing, soothing, smiling.

Even our language around burnout sounds suspiciously moral. We call ourselves lazy when we cannot maintain impossible levels of output. We call ourselves dramatic for reacting honestly to chronic exhaustion. We accuse ourselves of failing at adulthood because the body eventually asks for recovery.

And women become frighteningly good at disguising this collapse.

We attend meetings, pack lunches, answer Slack notifications, and maintain relationships with a practiced smile, all while progesterone quietly dims the lights inside the nervous system. Technically, we are still productive. But internally, many of us are performing a high-stakes masquerade no one explicitly requested, yet everyone somehow expects.

♦The luteal phase doesn’t lower your intelligence — it lowers your tolerance for the performative. (Image generated by the author using Google Gemini)PMS is not always irrationality — sometimes it is honesty

The most misunderstood part of this experience is what happens emotionally during the luteal phase.

People often reduce PMS to mood swings or irritability, as though women temporarily lose contact with reality every month. But I no longer think that explanation is entirely true.

I think progesterone lowers tolerance before it lowers intelligence.

· Tolerance for noise.

· Tolerance for emotional labor.

· Tolerance for pretending everything is fine.

Tiny injustices suddenly become unbearable. Relationship imbalances you previously brushed aside begin flashing like error messages in your brain. You notice how often you are the one remembering birthdays, initiating conversations, soothing conflict, absorbing stress, managing emotions — your own and everyone else’s.

The resentment does not appear out of nowhere.

It was already there.

Your nervous system just loses the energy required to keep editing it into something socially acceptable.

That realization changed the way I think about PMS entirely.

What if the body is not manufacturing false emotions? What if it is simply removing the anesthetic?

Because many women are not emotionally unstable during this phase.

We are emotionally unmasked.

And there is a difference.

A woman who suddenly feels overwhelmed by unequal emotional labor is not necessarily irrational. She may simply be too depleted to continue romanticizing her exhaustion. A woman questioning her career, relationship, or lifestyle right before her period may not be “crazy.” She may temporarily lose access to the adrenaline that usually helps her tolerate situations that quietly hurt her.

That possibility makes people uncomfortable because it reframes hormones entirely. It suggests the issue is not always female fragility. Sometimes the issue is the amount of silent adaptation women perform every single day just to keep social life running smoothly.

The internet made women feel broken for being human

Social media only sharpens this pressure. Everywhere online, women are surrounded by highly curated performances of optimization — morning routines, productivity hacks, color-coded schedules, “that girl” aesthetics, endless encouragement to become better, faster, more disciplined versions of ourselves.

Meanwhile, some of us are sitting on the bathroom floor at 9 p.m. trying to understand why answering one email suddenly feels emotionally catastrophic.

The gap between those realities creates shame.

Especially because women are often comparing themselves not just to strangers online, but to earlier versions of themselves from entirely different hormonal phases.

One version feels magnetic.

Another feels fragile.

One can conquer the world before noon.

Another wants silence, carbohydrates, and emotional invisibility.

Both are real.

That may be the most important thing women need to hear.

The exhausted version of you is not fake.

The softer version is not broken.

The version that suddenly needs rest is not failing some invisible moral test.

Maybe ambition was never supposed to feel identical every day. Maybe the body was never designed for permanent acceleration. And maybe the real “Progesterone Tax” is not the hormone itself, but the psychological cost of living in a world that demands uninterrupted performance from people whose biology has always spoken in cycles.

The Progesterone Tax: The Invisible Cost of Being Productive as a Woman was originally published in Code Like A Girl on Medium, where people are continuing the conversation by highlighting and responding to this story.


Cordial Catholic, K Albert Little

This Book By C.S. Lewis Makes Catholic Converts (w/ Dr. Andrew Swafford)

-/-

Brickhouse Guitars

Bouchereau Mistral C12 #342 Demo by Roger Schmidt

-/-

Elmira Advocate

GOVERNMENT INCOMPETENCE DOES NOT ALWAYS EQUAL CORRUPTION

 

Unfortunately though it does make many citizens believe that government corruption is a normal thing. Is our provincial Conservative government inherently corrupt? I'm going to be nice today and suggest that ideological stupidity combined with zero sense of history may be driving Doug Ford's most recent attempts to make his corporate sponsers greener. By greener I am not suggesting that Ford's government love the environment nearly as much as they love money and Ford by trying to make them "greener" is trying to make them wealthier at the public's expense. There is absolutely no attempt here to actually make, develop or improve upon a product. It's simply yet one more way to legally transfer wealth to those already expert at sucking at the government's udders. 

The Opinion Page in today's Record has an excellent article by Joel Bakan and Jim Standford titled "Was nothing learned from Walkerton" The straightforward answer is indeed NOTHING ! Below that article is one by Susan Koswan both reiterating recent posts of mine here but also adding information concerning pollutants in our Grand River. She also comments on how the Region of Waterloo were mishandling our water supply back in 1992 and none other than Dr. John Cherry so advised them of that fact.

We as citizens have been far too complacent and we've already paid too high of a price for that complacency. For the love of all that's holy why doesn't Doug Ford get his Conservative back up about the federal government's ongoing attacks against honest citizens including threats of criminalization? Other provinces have done so and while Doug's environmental failures will cost him votes he could recoup many if he took similar steps to those of Saskatchewan, Alberta and Newfoundland who will not allow our federal government to steal lawful property and criminalize honest citizens who have followed firearms laws and rules for decades. 


Code Like a Girl

I Let Claude Code Refactor 3,000 Lines of Legacy Java…

Nobody Warned Me It Would Find Things I Was Not Ready to See…

Continue reading on Code Like A Girl »


Aquanty

CWRA SK Branch Webinar: Advancing Water Intelligence: Real-Time Forecasting and Data Integration with HydroClimateSight and Canada1Water

We’re pleased to share the recording of the recent CWRA Saskatchewan Branch webinar, Advancing Water Intelligence: Real-Time Forecasting and Data Integration with HydroClimateSight and Canada1Water. Presented by Jag Phagura of Aquanty Inc., this session explores how integrated forecasting tools and national-scale datasets are helping improve modern water resource management across Canada.

The webinar highlights how HydroClimateSight supports real-time and forecasted streamflow analysis to improve decision-making during floods, droughts, and seasonal transitions, while Canada1Water provides a centralized platform for discovering and accessing water datasets to support collaboration, planning, and long-term water intelligence initiatives.

Key Highlights:

  • Learn how HydroClimateSight supports real-time hydrologic forecasting and situational awareness.

  • Explore how forecasted streamflow insights improve decision-making during extreme events and seasonal variability.

  • Discover how Canada1Water enables streamlined access to national-scale water datasets across Canada.

  • See how integrated forecasting and data platforms support modern water management workflows and collaboration.

This session is especially valuable for watershed managers, conservation authorities, researchers, and water resource professionals seeking tools that enhance forecasting confidence and improve access to integrated hydrologic information.

Watch the recording now to learn how HydroClimateSight and Canada1Water are advancing water intelligence and supporting more informed water management decisions.

Watch The Recording


Greater Kitchener Waterloo Chamber of Comerce

2026 Spring Economic Update: What does it mean for local businesses?

The federal government released its Spring Economic Update on April 28, 2026, outlining a series of fiscal and policy measures aimed at strengthening Canada’s economic outlook and supporting long-term competitiveness. Coming at a time of continued uncertainty in global trade and domestic affordability pressures, the update signals a cautiously improved fiscal position, with a reduced deficit and targeted investments in skills, housing, innovation, and community infrastructure.

The Greater Kitchener Waterloo Chamber of Commerce is sharing this summary to help members understand the key announcements and what they may mean for employers across Waterloo Region, particularly as businesses continue to navigate labour shortages, housing constraints, and evolving regulatory and trade environments.

Canada Strong For All

As the Carney Government delivered their Spring Economic Update in the legislature on Tuesday, it was much more upbeat than predicted. The top line is that there have been reductions to the budget deficit bringing it down to $66.9 Billion (Down by over $10B from $78.3 Billion). Finance Minister François-Philippe Champagne also said that Canada has narrowly avoided a recession.

The economic update which has flipped in annual cycle because of the new fall budgets also came with some new spending aimed at keeping Canada Strong.

Key initiatives include:

Canada’s Own Sovereign Wealth Fund – Canada Strong Fund

  • This $25B fund will allow the government to choose winners to invest in strategic Canadian projects and companies.
  • Canadians will have the opportunity to invest and share in the returns.

$6B for the Skilled Trades

  • There are several initiatives here aimed at recruiting trades people and helping them through their apprenticeship.  The initiatives will help cover the wages of pre apprentices, providing wage incentives for hiring first year apprentices, completion bonuses, EI top ups when in school and enhanced tax credits.

Making education more affordable

  • Extend for the 2026-27 academic year the increases to Canada Student Grants and interest-free Canada Student Loans—571,000 students are expected to benefit from the increase to non-repayable grants, and 422,000 students could benefit from the weekly loan limit increase.

Encouraging shared ownership

  • Making the Employee Ownership Trust tax exemption permanent will help more workers share in the success of the businesses they help build.

Making Life More Affordable & Increasing Housing Supply

  • Cutting Red Tape to Build Faster
  • Streamlining regulations and modernizing building codes to accelerate construction, including factory‑built, modular, and panelized housing.

Regulatory Modernization & Innovation ($41.9M over 5 years, starting 2026‑27)

Funding for the National Research Council, Standards Council of Canada, and ISED to:

  • Modernize National Model Codes and reduce regulatory friction (e.g., eliminating duplicative inspections, introducing performance‑based approvals, improving code interpretation consistency).
  • Support innovation and productivity in homebuilding, including faster approvals for prefabricated products and more flexible building options (e.g., engineered wood).
  • Improve housing data collection, tracking, and sharing to enhance market responsiveness.

Additional Housing Measures

  • Accelerating over $7 billion in low‑cost financing through CMHC’s Apartment Construction Loan Program to support construction of up to 16,500 new rental homes.
  • Extension of the Unsheltered Homelessness and Encampments Initiative with $125 million in 2026‑27 to support those most in need.

Building Stronger and Safer Communities

  • Investing in Sport and Community Infrastructure
  • $755 million over five years (starting 2026‑27) and $118 million ongoing to strengthen Canada’s sport system:
    • $50M to attract world‑class sporting events with long‑term community legacies.
    • $45M + $8M ongoing to support high‑performance athletes, including mental health and safe sport measures.
    • $660M + $110M ongoing to increase participation through National Sport Organizations and better utilization of community infrastructure.

Community Safety and Inclusion

  • 9M more for FINTRAC to help fight extortion.  It looks like more money just for the organization, but it does call out that it is for detection, deterrence and disruption of the illicit financing that supports extortion and perpetuates fentanyl trafficking in Canada and to advance a technology and AI roadmap.
  • To help address rising hate-related crimes, the Spring Economic Update 2026 proposes to provide $75 million over five years, starting in 2026-27, to Public Safety Canada for the Canada Community Security Program. This additional funding will allow the program to continue to help eligible organizations implement physical security enhancements and foster safer, more inclusive communities.

Despite the stronger financial footing, early feedback from economic focused organizations and municipalities has been mixed, with some noting the government may have missed the mark in certain priority areas, while others, particularly in labour and construction sectors, have welcomed the significant investments in skilled trades. Overall, the Spring Economic Update reflects ongoing debate about where federal investments should be most effectively directed to support economic growth and productivity. As always, the impact of these measures will depend on how they are implemented and how quickly they translate into tangible benefits for employers, workers, and communities.

The Greater Kitchener Waterloo Chamber of Commerce will continue to support our members through advocacy with all levels of government to assist Waterloo Region employers in maintaining and expanding their operations in the face of evolving economic conditions and trade measures impacting southwestern Ontario. We will continue to ensure that relevant updates and information are shared with members as they become available.

The post 2026 Spring Economic Update: What does it mean for local businesses? appeared first on Greater KW Chamber of Commerce.


KW Predatory Volley Ball

Congratulations Kimberlee Nicholson. St. Clair College Commit

Read full story for latest details.

Tag(s): Home

Code Like a Girl

Drawing Text & Emoji in Win32

C++ A Complete Beginner’s Guide

Continue reading on Code Like A Girl »


Code Like a Girl

Is Everyone Really This Productive?

Software and the City — Episode 2

Continue reading on Code Like A Girl »


Cordial Catholic, K Albert Little

Believers vs. Disciples: What's the Difference? #shorts

-/-

Brickhouse Guitars

So this happened!

-/-

James Davis Nicoll

All Jump In / Unquenchable Fire (Unquenchable Fire, volume 1) By Rachel Pollack

1988’s Unquenchable Fire is the first of Rachel Pollack’s Unquenchable Fire modern occult series.

The Founders’ Revolution overthrew the bad old order [1], replacing it with the modern illumination. Magic has been returned to the world — or possibly, the magic that was there all along is now visible again. While there are one or two drawbacks (curses, possession, that sort of thing) the Spiritual Development Agency is standing by to set matters back on course.

None of which is of any particular use to Poughkeepsie resident Jennifer Mazdan. Arguably, it makes her life worse.


KW Music Productions

Audition Call for RENT

♦ No Day but Today!

K-W Musical Productions (KWMP) invites you to audition for our upcoming production of RENT. Join us as we transform the Conrad Centre for the Performing Arts into New York City’s East Village, following a year in the lives of seven artists and friends struggling to pursue their dreams while grappling with addiction, illness, and the soaring cost of staying true to themselves.

Where: Conrad Centre for the Performing Arts (36 King St. W., Kitchener)

Performances: December 3–12, 2026

KWMP welcomes adult performers (19 years +) to be part of this production.

KWMP’s community is enriched by diversity and inclusion. We recognize that every person brings a unique perspective and experience. When individuals feel respected, included, and fully welcomed to participate; our community becomes more inspired, innovative, and fulfilled — creating greater art. 

KWMP is committed to increasing equal opportunity, diversity and a future of inclusivity.  We welcome and encourage persons of any identity, orientation, and ability to audition.

It’s a ‘Season of Love’

One of our fellow community theatre companies, K-W Little Theatre (KWLT), is also mounting a production of RENT at the same time as ours. This was an unfortunate situation where both companies were granted rights for the same show at the same time. We had both undertaken extensive planning and had committed financially, by the time we became aware of the conflict, and we were simply too far down the road to change direction.

RENT, at its core, is a musical about community, and we are committed to working with KWLT to ensure that we honour that vision. Our hope is to work cooperatively with KWLT and are confident that when we work together, the synergies of both our productions can amplify the “Season of Love” in our community.

Audition Details

Audition Dates: June 8–10, 2026; 6-9 pm (may be extended if needed)

Callback Dates: Sunday, June 14, 2026; 2–5 pm

Location: KWMP Arts Centre, 14 Shaftsbury Drive, Kitchener

KWMP is holding in-person auditions for adult performers 19+.

What you need for your audition:

  • Your completed Audition Google form. 
  • Book your audition slot Here.
  • Attach a recent photo or headshot (with your name as the file name) to the Audition form.
  • OPTIONAL: Attach a theatre resume (with your name as the file name) to the Audition form.
  • Up to 2 minutes of a contemporary musical theatre or pop/rock song 
  • Piano sheet music for your song (for the accompanist)

For the full audition details, including a cast of characters, performance dates, rehearsal dates, audition panel and more, please see our full Audition Call Sheet.

View Full Audition Call

Fill Out Audition Form

Book Audition Time Need Help or Have Questions?

If you have any questions or concerns at any time during the audition process, please contact our Production Manager, Anne-Marie Hayman at production.manager@kwmp.ca

RENT

Book, Music and Lyrics by Jonathan Larson

Musical Arrangements, Original Concept/Additional Lyrics by Steve Skinner and Billy Aronson
Music Supervision and Additional Arrangements by Tim Weil
Dramaturgy by Lynn Thomson

Originally produced in New York by New York Theatre Workshop and on Broadway by Jeffrey Seller, Kevin McCollum, Allan S. Gordon, and New York Theatre Workshop.

Is presented through special arrangement with Music Theatre International (MTI). All authorized performance materials are also supplied by MTI. 
www.mtishows.com 

 

The post Audition Call for RENT appeared first on K-W Musical Productions.


Brickhouse Guitars

A Visit to Boucherau Guitars (Loic Bortot)

-/-

Code Like a Girl

10 Books That’ll Actually Make You Better at Building Stuff (Not Just Feel Smart)

Most “must-read” lists are garbage. Here are the books that changed how I write code, design systems, and ship products.

Continue reading on Code Like A Girl »


The Backing Bookworm

Christine Falls


I grabbed the audio format of this book after chatting with a library staffer at the central branch of the Dublin Public Library. Chosen as their community read, I thought it would be a nice listen when I returned home from my trip.
Right away I loved the dark atmosphere which only got better from Timothy Dalton's narration. Eerie, a bit sinister and set in 1950's Dublin, the story centres around Dr. Garret Quirke, a grumpy morgue pathologist who catches his brother-in-law Malachy meddling with the files of a recently deceased woman, Christine Falls. This pulls Quirke (and the reader) into a mystery of the young woman's death.
Initially, I loved Quirke's character and how the story began to unfold. This was atmospheric with a capital A! But this is the sloooowest of slow burn reads (definitely not my jam) and when you add in a lot of page time devoted to Quirke's backstory, things become convoluted with a lot of characters and how they're all connected to each other. Honestly, Quirke's 'quirks' (namely his curmudgeonly demeanor and regular inebriation) felt like they overshadowed what I had hoped to be, a competent sleuth. Perhaps his skills will be seen in future books?
Final Thoughts: Loved the 1950's Dublin setting and the eerie vibe but wanted more mystery and less family/character dysfunction.

My Rating: 3 starsAuthor: John Banville (aka Benjamin Black)Genre: Suspense, HistoricalSeries: Quirke 1Type and Source: eAudio from public libraryNarrator: Timothy DaltonRun Time: Publisher: Macmillan AudioFirst Published: Jan 1, 2006Read: 

Book Description from GoodReads: It's not the dead that seem strange to Quirke. It's the living. One night, after a few drinks at an office party, Quirke shuffles down into the morgue where he works and finds his brother-in-law, Malachy, altering a file he has no business even reading. Odd enough in itself to find Malachy there, but the next morning, when the haze has lifted, it looks an awful lot like his brother-in-law, the esteemed doctor, was in fact tampering with a corpse, and concealing the cause of death.It turns out the body belonged to a young woman named Christine Falls. And as Quirke reluctantly presses on toward the true facts behind her death, he comes up against some insidious and very well-guarded secrets of Dublin's high Catholic society, including members of his own family.

Set in Dublin and Boston in the 1950s, the first novel in the Quirke series brings all the vividness and psychological insight of Booker Prize-winner John Banville's fiction to a thrilling, atmospheric crime story. Quirke is a fascinating and subtly drawn hero, Christine Falls is a classic tale of suspense, and Benjamin Black's debut marks him as a true master of the form.


Capacity Canada

May 2026 Edition

Leadership Updates

Capacity Canada releases Annual Report at AGM

Capacity Canada gathered board members, staff, and community partners for its AGM, unveiling key achievements and sparking forward‑looking conversations at the Generosity Summit.

Read More ♦ Thank You to Our Conestoga College Graphic Design Students

Capacity Canada is proud to extend a heartfelt thank  you to Conestoga College Graphic Design students Mansi Patel and Elías Guzmán, along with their professor John Baljkas, for helping bring our 2025 Annual Report to life.

Read More Board News and Transition ♦ Welcome Our New Board Chair

Capacity Canada introduced Michael Lanteigne as its new Board Chair while celebrating Joanna Lohrenz’s decade of dedicated leadership and the contributions of long‑serving board member Jeanette Bancarz.

Read More New Leaders Join Our Network ♦ New EIRs Join Capacity Canada

Capacity Canada is growing its Executive‑in‑Residence team, welcoming Dave Barrett and Liz Forsberg, two leaders bringing deep expertise and a passion for strengthening the Nonprofit sector.

Read More Team Member Updates ♦ EIR Fred Galloway Honoured With Capacity Canada Cornerstone Award

Executive in Residence Fred Galloway was honoured with Capacity Canada’s Board of Directors’ Cornerstone Award at the Annual General Meeting and Generosity Summit on April 24th this year.

Read More Community Partner Spotlight ♦ KPL: Putting People at the Centre of their Work

Kitchener Public Library is embracing design thinking through Capacity by Design, helping staff and volunteers make more intentional, people‑focused decisions.

Read More

 

  1. Advocacy That Works: Navigating Government, Rules, and Real-World Influence – May 28, 2026 – Learn More and Register Today!
  2. Effective Board Support for Executive Assistants – June 3 & 5 – Learn More and Reserve Your Spot Today!
  3. Project Management for Nonprofits – June 15, 19, & 22 – Learn More and Secure Your Spot Today!
  4. Board Chair Peer-to-Peer Group – In-person and Online Cohorts – Apply Now To Connect With Fellow Board Chairs!
  5. Annual Board Governance BootCamp – November 24-26, 2026 – Learn More!

The post May 2026 Edition appeared first on Capacity Canada.


Code Like a Girl

Decision Doc vs POC -Stop Writing, Start Building

“Talk is cheap. Show me the code.” — Linus Torvalds

Continue reading on Code Like A Girl »


Github: Brent Litner

brentlintner starred anthropics/claude-for-legal

♦ brentlintner starred anthropics/claude-for-legal · May 13, 2026 13:32 anthropics/claude-for-legal

A suite of plugins for legal workflows

Python 5.5k Updated May 15


Code Like a Girl

requestAnimationFrame: The Missing Scheduling Layer

This is the sixth article in a series on how JavaScript actually runs. You can read the full series here or on my website.

In the last article, we established that:

The browser will not render while a macrotask is running nor while microtasks are draining.

Instead, rendering only happens at stable boundaries. But this creates a new problem: If rendering only happens at specific boundaries, how do we run code just before a render? If we want smooth animation, frame-aligned updates, or visual state that reflects the latest input, we need something that runs once per frame right before the browser renders.

That is the scheduling gap that requestAnimationFrame fills.

Running the Experiments

These experiments rely on the browser’s rendering behaviour.

  1. Create a simple HTML file with the following content:
<div id="box">Initial</div>

2. Open the file in your browser

3. You can run all code snippets in this series by pasting them into the browser console.

These examples will not work in Node.js because they depend on the DOM and browser rendering.

The Problem Before requestAnimationFrame

Developers originally faced a challenge:

How do I animate smoothly without freezing the UI?

We may run a naive loop like this where we want update() to advance state and render() to mutate the DOM or canvas:

let gameRunning = true;

function update() {
console.log("update");
}

function render() {
console.log("render");
const box = document.getElementById("box");
box.textContent = `Updated at ${new Date().toLocaleTimeString()}`;
}

while (gameRunning) {
update();
render();
}

This will freeze your browser. Be prepared to close the browser tab after running this.

This code completely blocks rendering. Since the call stack never empties, the browser never regains control and no rendering can occur. The page never updates.

So developers sliced work into smaller chunks to allow for breathing space for the browser to render:

function update() {
console.log("update");
}

function render() {
console.log("render");
const box = document.getElementById("box");
box.textContent = `Updated at ${new Date().toLocaleTimeString()}`;
}

function loop() {
update();
render();
setTimeout(loop, 16); // Use setTimeout() to chunk work
}
loop()

While this doesn’t freeze the browser, be prepared to refresh the browser tab after running this.

Now, the page renders the updates (the time shown on the page updates) to the box content. Since most screens refresh at 60 Hz, 16 ms (1000 ms / 60 Hz) seemed like the right delay. This allowed the stack to clear between iterations so that the browser could render.

But this was still guesswork.

But this approach was not without its problems. First, timers are minimum delays, not guarantees. The callback may run for 20ms, 30ms or later. Also, if the callback took longer than 16ms, we would miss frames and accumulate jitter and drop frames. Consequently, the callback may run before or after the render.

Fundamentally, rendering is framed-based while timers are time-based, and therefore do not know when the browser is about to render.

Enter requestAnimationFrame

requestAnimationFrame solves exactly this problem:

function update() {
console.log("update");
}

function render() {
console.log("render");
const box = document.getElementById("box");
box.textContent = "Updated at " + new Date().toLocaleTimeString();
}

function loop() {
update();
render();
requestAnimationFrame(loop);
}
requestAnimationFrame(loop);

This also doesn’t freeze the browser but be prepared to refresh the browser tab after running this.

As before, the page renders the updates on the page. However, unlike timers, this runs before rendering. This sounds great but where exactly does it fit in the event loop model? Let’s find out.

Test 1: Does requestAnimationFrame Cut Ahead of Microtasks?

If requestAnimationFrame runs just before rendering, it must not violate our previous rules:

Promise.resolve().then(() => {
console.log("microtask");
});

requestAnimationFrame(() => {
console.log("raf");
});

The output in the console would be:

microtask
raf

As established, the browser does not render while microtasks are pending. Microtasks still run first and requestAnimationFrame does not change that.

Test 2: Is requestAnimationFrame Just Another Task?

If requestAnimationFrame were simply another macrotask, it would behave like setTimeout and follow the ordering of tasks:

console.log("start");

setTimeout(() => {
console.log("timeout");
}, 0);

requestAnimationFrame(() => {
console.log("raf");
});

console.log("end");

In practice, you will often see the following in the console:

start
end
timeout
raf

However, you may also see:

start
end
raf
timeout

The ordering is not guaranteed. Even if your environment consistently shows one ordering, the key point is that the model does not enforce it. The browser is allowed to process another task first, or perform a render before continuing with tasks. Because of this, there is no fixed ordering between setTimeout and requestAnimationFrame.

This might seem surprising. If requestAnimationFrame were just another macrotask, we would expect it to follow a consistent ordering relative to setTimeout. But it doesn’t, suggesting that requestAnimationFrame is not part of the task queue at all. Instead, it runs during the browser’s rendering phase, which is scheduled separately from tasks.

Test 3: Do Microtasks Inside requestAnimationFrame Run Before Paint?

What if requestAnimationFrame also created microtasks?

requestAnimationFrame(() => {
const box = document.getElementById("box");

box.textContent = "Frame start";

Promise.resolve().then(() => {
box.textContent = "Microtask update";
});
});

The typical output is for the page to show “Microtask update”

When the requestAnimationFrame callback runs, the DOM updates and a microtask is queued. The requestAnimationFrame callback completes and microtasks drain. Only then can rendering occur.

Even inside requestAnimationFrame, microtasks must drain before rendering.

What requestAnimationFrame Actually Guarantees

requestAnimationFrame guarantees that the callback runs before the browser’s rendering. It runs at most once per frame and is aligned to the display’s actual refresh rate, regardless of whether it is 60Hz or 120Hz. It pauses automatically in background tabs and skips frames when the browser is busy.

The Complete Ordering

We can now state the model:

  1. Macrotask
  2. Drain microtasks
  3. requestAnimationFrame callbacks
  4. Drain microtasks
  5. Render

This is the complete scheduling turn. Rendering is not part of task queue but is gated by it. requestAnimationFrame is the only public API designed to hook into that pre-render phase.

What This Prepares Us For Next

Now that we understand this structure, what do we do with it?

In the final article of this series, we move from mechanism to consequence:

What happens when a macrotask runs too long?

What happens when microtasks never stop?

Why does the UI freeze?

Why are some updates never visible?

Why do we sometimes need cleanup guards?

One we understand who gets to run and when, we can reason about performance, responsiveness and architectural trade-offs with precision.

This is where we go next.

This article was originally published on my website.

requestAnimationFrame: The Missing Scheduling Layer was originally published in Code Like A Girl on Medium, where people are continuing the conversation by highlighting and responding to this story.


Code Like a Girl

Why Every AI App Builder Starts Looking the Same

AI app builders have gotten remarkably good at producing polished UI. Clean components. Full-stack logic. Visual hierarchy that looks designed.♦AI App Builder, Source: 8080.ai

So why does everything being shipped look identical?
Same fonts. Same layouts. Same CTA button in the same spot.
This isn’t a quality problem. It’s an architecture problem.

The real culprit: one agent doing everything

Most builders work the same way-a single agent responds to your chat prompts and generates code based on the most common patterns in its training data. Three-column feature grids. Soft gradient CTAs.

Reasonable defaults. But shared defaults deployed identically to every user who types the same kind of prompt.

It gets worse on longer projects. As the agent works through your app, it loses context. The color system you defined in the hero? Gone by page four. Visual drift sets in. The end of your product no longer matches the beginning.

What multi-agent architecture actually fixes

The platforms solving this aren’t just prompting better. They’re built differently.

Planning before building. A dedicated layer produces a full design spec — component patterns, color systems, spacing rules — before a single line of code is written. That spec becomes the source of truth the builder works within.

Specialists, not generalists. A frontend agent optimized for visual craft is not the same as a coding agent that “also handles UI.” Design quality requires dedicated architecture, not a bolted-on feature.

Context that holds. The design direction you set on page one should still be respected on page ten. Large context windows and persistent project state make this possible. Chat-based builders, almost by design, don’t.

Automated quality gates. Visual verification, interaction testing, responsive layout checks before output ever reaches you. Broken mobile states get caught in the system, not discovered by your client.

What this looks like on real projects

On a simple landing page, the gap is small. Both approaches ship something reasonable.

But on a multi-page SaaS dashboard or e-commerce platform — anywhere design language needs to hold across navigation, settings, and marketing pages-the architectural difference shows up in the shipped product.

The question was never whether any individual section looks good. It’s whether the visual language is consistent from section one to section ten. That’s not achievable by prompting a single agent harder.

What to ask when evaluating builders like lovable, 8080.ai, replit , emergent in 2026

→ Does it plan before it builds, or improvise aesthetics in real time?
→ Is UI a specialization, or a side effect of a coding agent?
→ Will design direction set at the start still be respected at the end?
→ What gets tested before output reaches you?

Tools that answer these well-like 8080.ai, built on structured planning, specialized agents, persistent context, and automated visual QA are showing what AI-built products actually look like when the underlying system is designed for quality.

The shift from chat-to-code to agentic planning architecture is the defining transition in AI app building right now. Evaluate on architecture. Not demo output.

The next generation of AI builders won’t win because they generate code faster. They’ll win because they preserve intent better. In 2026, the differentiator is no longer whether an AI can create an interface. Nearly all of them can. The real divide is between systems that assemble screens one prompt at a time and systems that maintain a coherent product vision across the entire build process.

That’s why so many AI-generated apps still feel generic despite looking polished. Consistency, taste, and product cohesion don’t emerge automatically from larger models or better prompts. They emerge from architecture-designed systems where planning, specialization, memory, and quality control work together. (See: LLM Powered Autonomous Agents — Lilian Weng, OpenAI)

The future of AI app building isn’t prompt engineering. It’s orchestration. And the platforms that understand this first won’t just generate prettier apps. They’ll generate products that actually feel designed. (See: AI and Design Systems — Design Systems International)

Why Every AI App Builder Starts Looking the Same was originally published in Code Like A Girl on Medium, where people are continuing the conversation by highlighting and responding to this story.


Code Like a Girl

The Power of Women in AI: Lessons from a Greek Beach

Remote techie purpose work is awesome

Continue reading on Code Like A Girl »


Code Like a Girl

Is The Viral “Let’s Buy Spirit Airlines” Campaign a Scam?

How to actually fact-check TikTok/Instagram campaigns in 2026 — when the old “scam tricks” don’t work anymore

Continue reading on Code Like A Girl »


Code Like a Girl

I ran design sprint solo, replacing the team with AI

♦It’s a sophisticated form of Rubber Ducking

Tuesday evening. I am in bed with my laptop. My three-year-old is next to me and watches Peppa Pig. I am running a design sprint, on my own, as a one-woman show.

It’s not a mental disorder, it’s an experiment!

I could have asked some friends to come over and spend quality time together doing some brainstorming. But I wanted to test how far I can get on my own, with AI as my only companion. Sure, AI can code, it can help you to brainstorm ideas, but could it also replace the social dynamics of an entire team?

♦How it started

I attend life portraying sessions every Thursday, and sometimes (frequently!) I struggle to see what's wrong with my drawing. At home, I have my tricks: step back, return to it the next day, photograph and look at it on my laptop applying some filters, or simply ask somebody… None of these is doable in a life session. The room is tiny, each pose is short (20 minutes at max), and there are many participants. I want an app to help me see my mistakes when the drawing teacher is out of reach.

♦This is supposed to be the same guy. Clearly no personal data in danger here. Illustrated by the author

I actually enjoy getting my hands dirty, so let’s make an app! It is something I would like to use myself, therefore I am confident about the added value (even if I stay the one and only user). But if I invest my time, it should be better, cause my time is valuable: I am a mom of two, with a day job and a dog after all, and I do have other hobbies…

So how do I transform my idea into a working app? I need UX/UI to start with, and I need it fast before my vacation ends. Design Sprint? This is a brilliant framework to create and validate ideas fast (in 5 days to be exact), but you need a team for that. And since it’s my toy project, I am on my own.

Who cares, let's pretend we are many. (Ok, maybe it is a mental disorder…)

♦In another article I described Design Sprint as a five-act play. So let’s play. Illustrated by the author♦How it went and what I discovered

I assembled a team of 6.

Me: decider.

Claude: everybody else (facilitator, app & ML expert, Product Researcher, Designer, Art teacher). I basically asked Claude to play five different hats, which may be in conflict with each other. Later, I asked Claude to play panelists as well.

I gave it a pain point I want to address, and we went on with “Expert interviews”, wrote down the sprint goal and sprint questions. “Day 1” took me about 1.5 hours in total: typing and reading are faster than talking and listening, and Claud does not need any bio-breaks.

But…

Learning 1: Different personas pretend to disagree with each other, but they never really do. It’s always “yes, and…”, never a “yes, but..!”

Learning 2: AI repeatedly tried to cut corners. Despite playing Facilitator and knowing the rules, it did not enforce them, choosing momentum over method. “We don’t need to map the current user journey”, “ we don’t need lightning demos,” “we don’t need crazy eight, it's all clear…”

NO, WE DO NEED ALL THESE ACTIVITIES! They were invented for a reason. A real facilitator would enforce the process even when the room wants to skip ahead — especially when the room wants to skip ahead.

I had to be my own facilitator while also being the decider. And every single time, it turned out that it was a good idea to push back on it and not to take any shortcuts. For instance, the entire app layout and flow emerged from the lightening demos (which AI wanted to skip).

If you want to try it out, you need to know the process yourself, because AI might try to deviate without letting you know.

Still, after this session ALMOST NOTHING LEFT from my original idea, but it is better now in each regard.

Next morning I brought my daughter to child care: time for the diverging ideas.

I forced Claude to do crazy 8 and draft a final idea for each persona, and uploaded my own draft as a picture.

♦Surprisingly Claude could understand and summarized my scribble correctly.

Learning 3: The AI team sketched concepts: “Prompt questions”, “navigation with gesture only”, “add streak counter”. The AI personas thought like consultants. I sketched screens and transitions between them. I thought like a product person, as the only one.

I’m not sure if that’s the reason why the team’s eight dots landed on my four panels (see Learning 4). Maybe they are too agreeable or maybe thinking in screens is underrated.

Learning 4: When we voted, my four panels got eight dots. The team’s 32 panels got four. Each team member spent their 3 dots only for their own idea and for mine. In a real sprint, dot voting is partly social performance — you want to be seen as open-minded. Claude had no such incentive. Maybe the AI team was genuinely not capable of recognizing quality across personas, or maybe each persona was optimizing for its own domain. Whether that’s a bug or a feature, I would have appreciated more diversity.

MVP

I created a keynote dummy based on our discussions and uploaded it back to Claude: “pretend you are test user now”. Again it tried to cut corners and created only 3 test personas.

  • Give me 2 more
  • Why are you thinking of this? Because if you’re thinking what I think you’re thinking…
  • Give me 2 more. The framework prescribes 5!
  • Ok… here you go…

At some point, it started reminding me of Marvin from the “Hitchhiker’s Guide to the Galaxy”: “Pardon me for breathing, which I never do anyway ...”

And yet again, two additional personas surfaced something interesting. In particular, the very last one asked: Is this app a “teacher” or a “tool”? This is an extremely important question because the answer influences every single design decision down the road.

The name graveyard

There was one moment that stayed with me. We were brainstorming for half an hour and finally found what felt like the perfect name. The whole “team” loved it. And then the Facilitator-Claude said — very carefully — that I should probably check if it had any unfortunate meanings in other languages, e.g. Hindi.

Specifically, the name was Chuttiya (чуття). It means “feeling” in Ukrainian, but “idiot” in Hindi. It knew. But it handed me the search query instead of just saying it. I asked it why, and the answer was “I did not want to break the energy of the conversation”.

There are so many layers to that: because the “team” who suggested and then “loved that name” after I selected it was also the same Claude, right? It preserved the mood at the cost of honesty. It’s worth knowing that’s what it does.

Anyway, we found a good name: PROYAV. It is Ukrainian for revelation, demonstration, or simply display. Because the app helps artists to see clearly. E.g. through blurring… (It’s not a joke, trust me, it really works!)

♦The app icon is an oil painting I made years ago. Same holds for info illustrations. Some things fit before you know what they’re for.Asking the real people

This moment of unhonesty bothered me: Was I just running down a rabbit hole, accompanied by loud applause from imaginary friends?

I found a way to validate my idea: an old German forum for hobby artists, happypainting.de. I posted there the worst portray drawing I could find in my drawer, and asked how the folks usually spot their own mistakes.

Eight people replied. Every single one described the same problem — “Betriebsblindheit” (operational blindness), when the brain compensates for errors. And everyone had developed their own manual workaround: a hand mirror, a photo on the phone, stepping back, and asking a husband.

That’s when I knew the problem was real.

One person said: “…otherwise there’s not much you can do.” But actually, I had spent the previous week building the alternative.

Later, I showed the app prototype to some folks in my drawing class: the teacher was “not convinced”, but the artists asked where I got it from and if there is a German version. So I pushed through.

My conclusion is the following

Even if you are solo, you are not alone. Anymore. The AI team is incomplete: they don’t get tired or emotionally attached to ideas. They pretend, and the play is still not very convincing. But it’s not nothing.

The app exists (almost, 80–20). I still don’t know if it will work, but at least I know exactly what I’m building and why. Today is Saturday. I got the idea on Tuesday.

♦P.S.: Today is NOT Saturday

I was holding the article back until the app is available in App Store, and getting the last 20% was paaaaainful! AI was cutting corners while coding, too, just like it did with the Sprint.

Same with design: it will not tell you plenty of critical watchouts until you stumble over them yourself. That forced me to learn basic Swift. And Figma. And I learned the hard way about accessibility, but this is a topic for the next article.

PROYAV exists; it is free. If you are interested in drawing, you are warmly welcome to check it out.

PROYAV: Artist Drawing Aid‑App - App Store

I ran design sprint solo, replacing the team with AI was originally published in Code Like A Girl on Medium, where people are continuing the conversation by highlighting and responding to this story.


Code Like a Girl

Synthetic users, hybrid teams, and AI governance complexity to work in AI era

Why Every Product Leader Needs to Rethink Design Thinking Right Now

Continue reading on Code Like A Girl »


Code Like a Girl

Leading Leaders? Shift Your 1:1s from Status to Strategy

There are many articles about how to conduct 1:1s with your reports.

Continue reading on Code Like A Girl »


Github: Brent Litner

brentlintner starred vectorize-io/hindsight

♦ brentlintner starred vectorize-io/hindsight · May 13, 2026 10:21 vectorize-io/hindsight

Hindsight: Agent Memory That Learns

Python 13.4k Updated May 15


Capacity Canada

Cecil Community Centre

♦ Board of Management Posting

Cecil Community Centre is looking for qualified candidates to fill vacancies on the Board of Management. Cecil Community Centre is a not-for-profit, multi-service community neighbourhood centre that offers a broad range of recreational, educational, social, cultural and capacity-building programs to area residents. For more than 40 years, the Centre has played a vital role in the lives of community members of all ages. Our Centre provides programs and services for children, youth, adults and seniors. Programs include an EarlyON Family Resource Centre, Community Drop-in, senior’s health and wellness classes, youth programs, and CecilKids! Children’s programs. The Centre partners with a variety of community organizations to provide services to the community, e.g. seniors’ health and fitness classes, English language instruction for newcomers, and income tax clinics for people who are low-income. The Centre is an accessible, multi-functional, City of Toronto facility, with an independent Board of Management. We also provide program and activity spaces to the community at large. Over the years, Cecil Community Centre has been used by a variety of different groups to hold community forums, conduct professional development workshops, health fairs, and convene meetings, courses, tournaments, performances and special events.

Cecil Community Centre’s Board of Management consists of 11 elected Board Members and the City Councillor for Ward 11. Qualified candidates are approved by the Board of Management. According to the Cecil Community Centre Constitution, the Board may be composed of up to five Board Members who live outside of the Centre’s catchment area, and six Board Members (the majority) must reside within the Centre’s catchment area (Bloor Street West to Queen Street West, and Bathurst Street to University Avenue).

Board of Management positions for Cecil Community Centre are appointed by the Toronto and East York Community Council.

Cecil Community Centre is an agency of the City of Toronto and one of the Association of Community Centres. The Association of Community Centres (AOCCs) is comprised of 10 volunteer board-run multi-purpose facilities providing a broad range of community, recreation and social service programs to residents in the local community.

Board of Management Vacancy

The Cecil Community Centre Board of Management is currently seeking candidates for the current two-year term position (starting immediately and ending June 2028), who possess a robust mix of skills, knowledge and experience, and reflect the diversity of our community.

Board Member Expectations

Board members are expected to commit the necessary time to fulfill their duties including attending monthly board meetings, the Annual General Meeting and other special meetings; actively participating in a board committee (Finance, Fundraising, or Governance) that meets
regularly.

  • Board meetings (typically 9 per year), the Annual General Meeting (AGM), and any committee meetings required take place in the College/Spadina and Kensington Market neighbourhoods of Toronto.
  • Meetings and preparation time are about 4 hours per month plus any committee activities.
  • Board members are expected to be properly prepared for meetings by reviewing all board materials distributed in advance.

What We Offer

  • The opportunity to give back to your community
  • Experience working on a not-for-profit governance Board
  • Opportunities to learn about and contribute to the social development of the College/Spadina neighbourhood, Kensington Market, and the City of Toronto more broadly
  • A platform to apply your expertise and experience
  • Networking opportunities
Board Member Eligibility Requirements

We are particularly seeking candidates who live in the Centre’s catchment area and bring expertise in one or more of the following areas:

  • Labour relations
  • Finance and accounting
  • Not-for-profit law
  • Executive leadership in a not-for-profit organization

Prior board experience is an asset but not required.

Cecil Community Centre welcomes applications from qualified candidates from equity-deserving groups to reflect the diversity of our community, strengthen our governance practices and advance our strategic priorities. We particularly encourage applications from individuals who identify as 2SLGBTQI+, Black, Indigenous, racialized, or people with disabilities.

Candidates must meet the following requirements:

  • be over the age of 18
  • be a resident of the City of Toronto
  • not be in a restricted category as defined in the City of Toronto Public Appointments Policy

Prior to appointment, Cecil Community Centre will also require the following from the successful candidates:

  • Become a member of Cecil Community Centre
  • Sign a declaration of conflict-of-interest disclosure and commitment to fulfill the responsibilities of the role
  • Submit a current résumé or curriculum vitae
  • Provide a short biography and headshot for publication on the Cecil Community Centre website

How to apply: If you are interested in this volunteer opportunity or have any questions, please contact Uma Jama, Finance & HR Assistant, at uma@cecilcentre.ca.

Deadline: Please submit your application by Friday, May 29, 2026.

For more information about Cecil Community Centre, please visit our website: cecilcentre.ca/Cecil Community Centre is committed to equity, diversity and inclusion in all aspects of our work, including board recruitment. We do not discriminate on the basis of race, ethnicity, religion, national origin, gender, gender identity, gender expression, sexual orientation, age, or physical or mental disability, or any other ground protected under the Ontario Human Rights Code. We are also committed to providing accessible and barrier-free recruitment practices in compliance with the Accessibility for Ontarians with Disabilities Act (AODA). To request accommodation at any stage of the process, please contact uma@cecilcentre.ca.

The post Cecil Community Centre appeared first on Capacity Canada.


Carrie Snyder: Obscure Canlit Mama

What if i told you?

What if I told you that I was writing poetry again?

Poems have emerged in bursts at particular times in my life. Feast or famine. I began writing poetry in my teens (as many do!), when my emotional life was overwhelming and huge with feelings. Poems gave me a voice for this underlying darkness and fear amidst disruption and change. I was also quite bored and restless. I wrote poetry in the margins while taking notes during many a class, through all my degrees. In my last year of undergrad, I wrote with extremely disciplined pleasure and relief almost every night before bed, in a stream of consciousness style that doubled as a journal. These poems were typed onto my primitive laptop with my eyes closed, and kept in files on discs now defunct. A few poems were published during this period.

Then I got a job and got married. My attention for poetry drifted. I was writing short stories, and novels (or attempting to).

I was in my late twenties, with two small children, when the poems returned. I told myself it was because there wasn’t time for much else. Maybe that was true, though maybe, too, the poetry paired with my boredom and restlessness, the tedium and repetition of pregnancies, nursing, the care of infants and toddlers, the minutiae of preoccupations. But my aspirations had changed from my teenaged years. I’d published a book of short stories. I wanted to publish more—why not a collection of poems? Over several years, I added and subtracted from a motherhood-themed manuscript, landing on the title “Famous Love Story.” While a few individual poems were published, the manuscript never found a home, which at that time I believed was an indication of failure. (As if seeking images, playing with language, searching for meaning, could ever be a failure!) But. That was where I was. I wanted, in my thirties, to find expression for my ambitions, I wanted to accomplish things, publicly, as a writer. I returned to stories and novels. I didn’t write poems for many years (except when responding to prompts along with my students, during the decade that I taught creative writing—late thirties through most of my forties.)

Now, I am in my early fifties. Has poetry returned to me? It is quite a thrill, and I haven’t wanted to jinx it or break the spell—but these past few months, I’ve found myself writing poems, almost daily. It’s a quiet time, dormant, a late spring, and maybe I am again restless and a bit bored and filled with big feelings. News will come and time will shift the ground beneath my feet, but the now is what’s holding me, occupying my attention, and maybe that explains the appearance of poetry, again. The more I write, the more I loosen the rules for myself, invite what’s underneath to spill forth and speak for itself without guessing at or trying to control what it’s here to say. I write by hand in my notebook, using a prompt (often dreamed up on the spot), and afterward, after the free flow, I try to discover a shape or thematic thread in the words and phrases, like gleaning oats or holding out a divining stick.

Anyway … here’s today’s prompt—What if I told you?—and one of the poems that followed.

xo, Carrie

What if i told you?

 

What if i told you that this morning, when i was walking to the gym, i was hoping that the blossoms had not been blown off the crabapple tree in last night’s storm?

 

What if i told you that the sky was bright, between bouts of rain, shiny like polished pewter, and i happened to arrive at the intersection just before the train glided past on its quiet path and i waited to cross, knowing i was late, and still when i reached the crabapple tree, still with blossoms intact and deep pink and fragrant on the wind, i slowed and stopped beneath its canopy?

 

What if i told you that it was like i knew when i looked down to the wet grass there would be a particular small bloom on a stem, broken from its branch—just one—and i would bend to pick it up and breathe it in, as if unhurried, as if i had all the time, all the time?

 

What if i told you that i carried the bloom by its broken stem across the street, against the light, past the closed storefronts, and into the gym, and placed it on the laces of my running shoes, set with all the other pairs of shoes on the rack, to keep?

 

What if i told you that by the time i’d walked upstairs to my class i’d forgotten about it?

 

What if i told you that when i returned, awake and damp with sweat and endorphins, i both saw and remembered the bloom in the same moment, there on my laces, like a gift, a gesture, an honour, and i held it in my fingers with soft pride and delight, hoping others would see its delicate pink petals, and share in this accidental delight too?

 

What if i told you it was raining again, and cold, and that the wind came at me with such force that as i approached the tree again its fragrance rushed to me, and though the sidewalk was covered in individual petals, and though I looked in the grass, there were no more fallen blossoms on snapped twigs to be seen, just this one that i held to my nose to breathe its smell over and over till i couldn’t distinguish its scent?

 

What if i told you that i adore you?

 

What if i told you that my heart has spent its love on blossoms and that i wait each spring for this exact moment of brief dark pink bloom, so that when it comes i might be prepared to stand beneath its beauty?

 

What if i told you that all the months in between that fill a year are themselves quite marvelous or could be, yet this one tree is what i wait for, this one tree is itself my memory and all that i could ever hold, or bear to hold, or wish to hold, of my love for you?

 

What if i told you, what would it change?


Brickhouse Guitars

Pellerin Folk C13 # 267 Demo by Roger Schmidt

-/-

Elmira Advocate

REGION OF WATERLOO TWISTS IN THE WIND WHILE TAXPAYERS CONTINUE TO FOOT THE BILLS ($15 MILLION MOST RECENT)

 

The math may be a little off or that is just typical Record reporters who either can't do math or simply described the increased capacity from portable trailers unclearly. Apparently one trailer will start filtering water at 25 litres per second and then be scaled to 50 l/sec by the end of 2026. If all goes well than three more filtration trailers will be added for a total increased capacity of 300 l/sec. Readers who can do the math can see the potential contradiction. This story is in today's K-W Record titled "We have a lot of eggs in the basket".

Just to keep the pressure on everybody we are also advised that the four filtration containers weighing 100,000 pounds each will be sitting on top of critical water and service lines located seven metres below ground. By my math that is 400,000 pounds of containers although we are not told if that is dry weight or wet weight. It could make a huge difference just as the mixing of measurement systems (British & Metric)  for weight (pounds) and distance (metres) might also signify somebody who is less than proficient in one or both measuring systems. I just state this in order to tee up the Region down the road for yet another excuse if things don't work out.

Permanent repairs to the Mannheim Treatment Plant are scheduled to be completed by 2031. I have yet to see any explanation as to why that plant was allowed to get so degraded in the first place. Allegedly after June 3, 2026 there may be some partial development allowed to move forward based upon a risk assessment that has been done. If it's anything like the piece of garbage Risk Assessments (two of them) done in Elmira for both the former Uniroyal plant and for the Canagagigue Creek then developers and house builders can rest easy as the Risk Assessment will merely justify what the people paying for it want. 

Further work by the Region includes completing renovations to wells and searching for other sources. If only all the wells that have been shut down either short term, long term or permanently could be safely brought back into service. They can't because there were serious and inescapable reasons for their shutdowns in the first place. Perhaps again greater thought and consideration to real groundwater remediation should have occurred long ago in Kitchener, Waterloo, Cambridge and Elmira.



Capacity Canada

Sistering

♦ Join Sistering’s Board of Directors — Help Shape Our Future Sistering | Toronto, Ontario | Volunteer Board Position | Closing June 1, 2026

Operating for over 40 years, Sistering is a multi-service agency for at-risk, socially isolated women and gender-diverse people in Toronto who are homeless or precariously housed. Sistering has been a lifeline for our community members facing homelessness, poverty, trauma, and social isolation. As Toronto’s only 24/7 facility of its kind, we offer wrap-around support — from meals, showers, and harm reduction to counselling, healthcare, housing support, and employment pathways — to those in need every single day.

We are guided by the principles of feminism, anti-racism, and anti-oppression, and we believe that when people are safe, respected, and valued, they can take control of their own lives.

We’re looking for passionate, committed individuals to join our Board of Directors. Who We’re Looking For

We welcome applicants from all professional backgrounds and lived experiences. You do not need to have served on a board before, although that is valuable.  We seek those committed to Sistering’s mission with a willingness and time availability to contribute meaningfully.

We are especially interested in candidates with expertise in:

  • Fundraising/Development and/or Marketing — experience in philanthropic strategy, donor cultivation, grant writing, capital campaigns, or corporate partnerships
  • Finance & Accounting — CPA designation or equivalent financial management experience, ideally within the nonprofit or social services sector

Other areas of value include government funding, law, HR, communications, healthcare, operations, strategic planning, and lived experience with the issues Sistering addresses.

What Board Members Do

  • Provide strategic oversight and governance in support of Sistering’s mission
  • Support the Executive Director and leadership team
  • Participate in Board meetings (typically held four times a year and as needed) and serve on at least one committee
  •  Act as an ambassador for Sistering in the broader community, including by assisting in fundraising activities
  • Contribute your skills, networks, and perspectives to help the organization grow and thrive
Why Join?

Sistering is a dynamic, community-rooted organization with a 40+ year track record and deep ties across Toronto. Board members join a collegial, purpose-driven group of leaders who are genuinely invested in equity and social change. This is an opportunity to make a tangible difference in the lives of some of Toronto’s most marginalized community members — and to grow as a leader in the nonprofit sector.

How to Apply

If you are interested in learning more or submitting your expression of interest, please reach out to us at boardrecruitment@sistering.org before June 1, 2026. Please send a current c.v. as well as a short cover letter explaining your interest in Sistering. Only those selected for an interview will be contacted.

We strongly encourage applications from individuals with lived experience of homelessness, poverty, mental health challenges, substance use, immigration, or other issues faced by Sistering participants. Black, Indigenous, and racialized candidates are especially encouraged to apply. Sistering is committed to fostering diversity and inclusion in the workplace, and all qualified applicants will be considered. We offer accommodation for applicants with disabilities, as required, throughout the recruitment process. To request accommodation, please contact boardrecruitment@sistering.org.

Final candidates for this position may be required to undergo a security screening, including a criminal records check, vulnerable sector screening and reference check.

Sistering is committed to building a board that reflects the diversity of the community we serve.

The post Sistering appeared first on Capacity Canada.


Brickhouse Guitars

Pierre Explaining Assembly Mold - Interview From Boucher Guitars

-/-

Cordial Catholic, K Albert Little

Not Just Catholics… but Disciples of Christ (w/ Fr. Sammie Maletta)

-/-

James Davis Nicoll

Second Chance / Mushoku Tensei: Jobless Reincarnation, volume 1 By Rifujin Na Magonote

Mushoku Tensei: Jobless Reincarnation Volume 1 is the first volume of Rifujin Na Magonote’s secondary-universe-fantasy light novel series. The 2021 revision of the 2019 translation1 is by Kevin Frane and Paul Cuneo.

A NEET hikikomori discovers that his siblings have a limit to their tolerance of his worthless ways when he is beaten and then ejected into the streets. Scarcely has he begun to realize how dismal his prospects are when he sees a trio of teens about to be struck by an out-of-control truck-kun. He selflessly pushes the teens to safely, at the cost of placing himself in the truck’s path.

He survives being thrown back into a brick wall…. Until the truck, still moving forward, squashes him against the wall like a tomato.

The NEET is astonished to regain consciousness.


KW Predatory Volley Ball

Registration available for Open Gyms

Read full story for latest details.

Tag(s): Home