Doxa
Wednesday, June 24, 2026
Tuesday, June 23, 2026
Bummed
Looking for something midly amusing on the Web this morning, to kick off
my blog. Nothing: everybody is overheated/water_logged, hopelessly alcoholic,
resigning, rightiously_offended...bummed out.
Except, perhaps, these two; Gurky and his videographer Karl. A monument to the
everlasting pleasure of food. Below, one of my favourite vids, on historical foods;
Monday, June 22, 2026
Pricing_it
Hey, it's stopped raining!! How about that...
Before going into full celebration mode to kick off summer, and it's back-to-back
National Holidays (which we have certainly earned this year), one might do well
to look at this little... situation:
Checking in on the Canadian dollar, this morning: it is not a pretty sight. Scratching
the bottom of the barrel at .70. With vacations coming up, as well.
I have no doubt there is a very good reason for this, what with oil tumbling in the last few
days. And then the USA all but threatening to shut down the free trade agreement. Makes
perfect sense. And guess what; I don't care. It is bad news at a bad time. What are we going to do
about it!!??
The exchange rate is always the last considered when Canada pulls itself out of economic
difficulties. This should not be. It is what hurts the most.
Sunday, June 21, 2026
Concept
Today is the first day of summer: at 4:27AM Montreal time, the Earth reached its
most bent toward the Sun moment ie the Solciste, and today will be the longest day
of the year in sunshine hours.. This naturally lends itself to celebration,
and - as for every year - I need to reconfigure how I will dress going into Summer.
Last night I was wondering at what time this Solciste moment was going to happen in, say,
London or Paris. Sure to have ramifications on how people will dress there. The whole sartorial
day is in evolution here.
I could no doubt find a friendly online app to figure all this out for me; but Summer Solciste is
not the only moment when I wonder was might be going on elsewhere on the planet. or need to
know: Is itChristmas there yet, has the day come and gone in Asia and so forth. Long story short,
I could use an app...
Below, a mock-up on what appears when the app is opened. One enters the current time in the
reference place. The date is always D. One also enters the second timezone one is interested in.
On pressing calculate, the time in the target zone should appear and - for day - one of D+, D, D-
thus indicating whether the date is tomorrow, today or yesterday.
That's all I need to know! Now all I need is a friendly AI that will generate the Python code for
me. I expect to have to furnish the Timezone chart, but the code should handle the rest directly!
import tkinter as tk
from tkinter import ttk
from datetime import datetime
import pytz
from PIL import Image, ImageTk
# ---------------------------------------------------------
# Timezone Conversion Logic
# ---------------------------------------------------------
def convert_time():
ref_tz_name = ref_timezone.get().strip()
tgt_tz_name = tgt_timezone.get().strip()
ref_time_str = ref_time.get().strip()
try:
# Parse reference time
ref_dt = datetime.strptime(ref_time_str, "%H:%M")
# Attach today's date
today = datetime.now().date()
ref_dt = datetime.combine(today, ref_dt.time())
# Localize to reference timezone
ref_zone = pytz.timezone(ref_tz_name)
ref_dt = ref_zone.localize(ref_dt)
# Convert to target timezone
tgt_zone = pytz.timezone(tgt_tz_name)
tgt_dt = ref_dt.astimezone(tgt_zone)
# Determine D-, D, D+
if tgt_dt.date() < today:
d_flag = "D-"
elif tgt_dt.date() > today:
d_flag = "D+"
else:
d_flag = "D"
# Display result
result_time.set(tgt_dt.strftime("%H:%M"))
result_date.set(d_flag)
except Exception:
result_time.set("Error")
result_date.set("Check inputs")
# ---------------------------------------------------------
# Zoomable Image Popup
# ---------------------------------------------------------
def show_timezone_chart():
popup = tk.Toplevel(root)
popup.title("Timezone Chart")
popup.configure(bg="#ffffff")
# Load original image
original_img = Image.open("Images/Timezones.png")
# State for zooming
popup.zoom_level = 1.0
popup.original_img = original_img
# Canvas for image
canvas = tk.Canvas(popup, bg="white", width=900, height=450)
canvas.pack(fill="both", expand=True)
# Function to redraw image at current zoom level
def redraw_image():
zoom = popup.zoom_level
w = int(original_img.width * zoom)
h = int(original_img.height * zoom)
resized = original_img.resize((w, h), Image.LANCZOS)
popup.photo = ImageTk.PhotoImage(resized)
canvas.delete("all")
canvas.create_image(0, 0, anchor="nw", image=popup.photo)
canvas.config(scrollregion=(0, 0, w, h))
# Zoom controls
def zoom_in():
popup.zoom_level *= 1.2
redraw_image()
def zoom_out():
popup.zoom_level /= 1.2
redraw_image()
# Mouse wheel zoom
def mouse_zoom(event):
if event.delta > 0:
popup.zoom_level *= 1.1
else:
popup.zoom_level /= 1.1
redraw_image()
canvas.bind("<MouseWheel>", mouse_zoom)
# Buttons
btn_frame = tk.Frame(popup, bg="white")
btn_frame.pack(pady=10)
tk.Button(btn_frame, text="Zoom In", command=zoom_in,
font=("Arial", 12), bg="#66aaff", fg="white").grid(row=0, column=0, padx=10)
tk.Button(btn_frame, text="Zoom Out", command=zoom_out,
font=("Arial", 12), bg="#66aaff", fg="white").grid(row=0, column=1, padx=10)
tk.Button(btn_frame, text="Close", command=popup.destroy,
font=("Arial", 12), bg="#ffcc00").grid(row=0, column=2, padx=10)
# Initial draw
redraw_image()
# ---------------------------------------------------------
# GUI Setup
# ---------------------------------------------------------
root = tk.Tk()
root.title("Timezone Converter")
root.geometry("520x420")
root.configure(bg="#f0f4ff")
title_label = tk.Label(root, text="TIMEZONE", font=("Arial", 22, "bold"),
bg="#f0f4ff", fg="#003366")
title_label.pack(pady=10)
frame = tk.Frame(root, bg="#f0f4ff")
frame.pack(pady=10)
# ---------------------------------------------------------
# Reference Section
# ---------------------------------------------------------
ref_label = tk.Label(frame, text="Reference", font=("Arial", 14, "bold"),
fg="#0044aa", bg="#f0f4ff")
ref_label.grid(row=0, column=0, padx=20)
tk.Label(frame, text="Timezone:", bg="#f0f4ff").grid(row=1, column=0)
ref_timezone = tk.Entry(frame, width=20)
ref_timezone.grid(row=2, column=0, pady=5)
tk.Label(frame, text="Time (HH:MM):", bg="#f0f4ff").grid(row=3, column=0)
ref_time = tk.Entry(frame, width=20)
ref_time.grid(row=4, column=0, pady=5)
# ---------------------------------------------------------
# Target Section
# ---------------------------------------------------------
tgt_label = tk.Label(frame, text="Target", font=("Arial", 14, "bold"),
fg="#aa0066", bg="#f0f4ff")
tgt_label.grid(row=0, column=1, padx=20)
tk.Label(frame, text="Timezone:", bg="#f0f4ff").grid(row=1, column=1)
tgt_timezone = tk.Entry(frame, width=20)
tgt_timezone.grid(row=2, column=1, pady=5)
# ---------------------------------------------------------
# Buttons
# ---------------------------------------------------------
calc_button = tk.Button(root, text="Calculate", font=("Arial", 14, "bold"),
bg="#ffcc00", fg="black", command=convert_time)
calc_button.pack(pady=10)
chart_button = tk.Button(root, text="View Timezone Chart",
font=("Arial", 12, "bold"),
bg="#66aaff", fg="white",
command=show_timezone_chart)
chart_button.pack(pady=5)
# ---------------------------------------------------------
# Output Section
# ---------------------------------------------------------
output_frame = tk.Frame(root, bg="#f0f4ff")
output_frame.pack(pady=10)
tk.Label(output_frame, text="Target Time:", bg="#f0f4ff",
font=("Arial", 12)).grid(row=0, column=0)
result_time = tk.StringVar()
tk.Label(output_frame, textvariable=result_time, bg="#f0f4ff",
font=("Arial", 16, "bold"), fg="#aa0066").grid(row=0, column=1, padx=10)
tk.Label(output_frame, text="Date:", bg="#f0f4ff",
font=("Arial", 12)).grid(row=1, column=0)
result_date = tk.StringVar()
tk.Label(output_frame, textvariable=result_date, bg="#f0f4ff",
font=("Arial", 16, "bold"), fg="#cc0000").grid(row=1, column=1, padx=10)
root.mainloop()
Father's_Day26
Below, an interesting research report on speaking many languages and the brain. Suggests it's
all one language as far as the brain's resource allocation is concerned. Interesting...
HAPPY FATHER'S DAY TO ALL!
Saturday, June 20, 2026
Changing_C
Copilot Search...
"Rebus sic stantibus" is a Latin legal doctrine meaning "things thus standing," allowing a contract or treaty to be modified or terminated if fundamental circumstances change.
Definition and Legal Significance
The phrase rebus sic stantibus literally translates from Latin as “things thus standing” and refers to the principle that agreements remain binding only as long as the circumstances under which they were concluded remain substantially the same
In law, it serves as an exception to the general rule of pacta sunt servanda, which holds that agreements must be kept
When unforeseen, fundamental changes occur that radically alter the obligations of a contract or treaty, the affected party may seek termination, withdrawal, or renegotiation
Application in International Law
In international law, the doctrine is codified in Article 62 of the 1969 Vienna Convention on the Law of Treaties, under the title “Fundamental Change of Circumstances”
To invoke it, a state must demonstrate that:
The circumstances at the time of the treaty were objectively essential to the obligations.
The change in circumstances has had a radical effect on the obligations still to be performed.
The change was unforeseen and not contemplated by the parties at the time of agreement
Courts and tribunals apply this principle very narrowly, ensuring it is used only in exceptional cases where obligations have become fundamentally different in character, not merely more difficult or costly
.Relation to Domestic Law
In domestic contract law, similar doctrines exist, such as impracticability or frustration of purpose, which allow parties to adjust or terminate contracts under unforeseen, extreme circumstances
However, courts generally apply these doctrines cautiously to prevent abuse.
Historical Context
The principle originates from Roman law and was formalized by jurists like Scipione Gentili and Emer de Vattel, who emphasized that obligations are contingent on the conditions present at the time of agreement
Early examples include disputes over treaties in ancient Greece and later in European international law, such as Russia’s invocation of the doctrine in the 19th century Treaty of Paris and Treaty of London
Limitations
The doctrine cannot be invoked if the changed circumstances were anticipated by the parties.
Unilateral denunciation of a treaty is generally prohibited unless specific conditions under the Vienna Convention are met
It is considered a rare “escape clause”, not a general right to exit agreements
In summary, rebus sic stantibus allows for legal flexibility in contracts and treaties when unforeseen, fundamental changes occur, balancing the stability of agreements with the realities of changing circumstances.










