October 29, 2025

AI-related scams via Google Calendar

Whose calendar is it, anyway? A cautionary tale

A while ago I noticed an odd "Paypal to BTC" calendar item that I didn't recognise, so I clicked on it and saw this.

"Interesting," I thought, "where on Earth did this come from?" You'll notice that only my identity is listed, as whoever created it has concealed their own identity by withholding the full guest list.

Intrigued, I clicked on the edit button to get a full view, and found this.


I don't know about you, but I very much doubt the fundacjawidzialnedzieki.org domain exists, let alone represents any kind of legitimate organisation. Further investigation revealed several similar entries scattered around my calendar, some containing specific instructions to transfer funds. An AI, however, might not "understand" (I use apostrophes because thinking and understanding are beyond the capabilities of the current chatbots) that this indicates a scam.

Being the cautious techie that I am I have not and do not intend to use automation to take unsupervised actions as a result of unsolicited input from Internet randos. To me, therefore, this represents a nuisance rather than a threat. As you will imagine, I have cleaned up my calendar and closed the loophole that allowed those events on to my calendar—see "Protecting yourself" below.

I can well imagine, however, that less conservative business people will be thrilled to avail themselves of the advantages of technology that helps them to set up appointments and keep on top of regular tasks, including settlement of outstanding accounts. Until their ever-helpful digital robot acts on an instruction injected by a third party in a similar manner to this. Who will be responsible for those losses?

Protecting yourself

It can happen to you. Check that arbitrary senders can't add events to your calendars by opening the calendar, bringing up the settings, then under "Events" make sure that the "Add invitations to my calendar" selector is set to "When I respond to the invitation in email."

This Google support page says it's not a new issue—in  fact the issue is so old the solutions refer to a setting that's no longer available). Here's what my settings page looked like.
Screenshot of fully-documented paged linked below

The process is fully documented in this support page.

Further thoughts


A current search implies it's still an issue.
Top four "people also ask" selections from a Google
search for "google calendar unrecognised events:"

Be very careful about automating any processes which could cost you money if they don't do what you expect. Until recently, automation was predictable. Once "AI" enters the picture, predictability becomes problematic. In a carefully designed system, most of the time nothing will go wrong. What you have to do is to limit the downside when it does, as it inevitably will (ironically just like systems with humans in the loop, while totally lacking in empathy or creativity). The more automation the greater the risk.

Understand that vendors don't always provide systems that are secure by default. Google made two mistakes here: the first was allow external users to make entries in your calendar; the second was to allow those who do make such entries to hide their identity. Neither shows much concern or respect for the people who use their products. At least the former can be switched off, so why isn't it switched off by default? I can't imagine in my long use of Google's products I would have ever selected such an option voluntarily.

In the past we have mostly had human adversaries to contend with. Nowadays exploits involving large networks of fictitious identities can be constructed en masse with minimal effort in industrial quantities. We can't rely on luck to avoid the attention of bad actors forever when without effective protection and sensible precautions a business can be ended overnight.

January 15, 2025

I want to bang some heads together!

 It's frustrating when useful tools refuse to work together nicely. In the past I've experienced conflicts between black and flake8 that made it impossible to commit via my default commit hooks. Now I'm seeing the same behaviour with black and reorder-python-imports.

In short, almost a year ago now github user maxwell-k reported that black release 24.1.0 had introduced an incompatibility with reorder-python-imports by starting to require a blank line after a module docstring. In the discussion on the bug report the black crew make the reasonable-seeming point that it's black's job to determine the disposition of whitespace, and that reorder-python-imports should do what its name implies and nothing more. This would respect the long-standing Unix tradition that each tool should as far as possible perform a single function.

Unfortunately, when elagil raised the same issue with the reorder-python-imports developers, with a request to make their project usable with black (ably supported by maxwell-k), they received a response which I can only (avoiding the use of expletives) describe as disappointing:

anything is possible. will it happen here: no

In my opinion this uncompromising attitude displays the worst kind of arrogance from a developer, and I frankly fail to see who benefits from this refusal to bend (except perhaps a developer unwilling to work further on a project or set it free). The net consequence from my own point of view is that I'll no longer be using reorder-python-imports, nor recommending it.

The situation remains unchanged. Life's too short to persuade donkeys to move. On the plus side, research into solving this irritation led me to start working with ruff, which provides the functionality of both utilities in a single rather faster tool. It's an ill wind that blows nobody any good. Goodbye, donkeys!

May 24, 2024

LiveBlog of the Pycon IT 24 Lightning Talks

These things move fast. No guarantees! They're doing it "The Italian Way," which apparently involves forfeits.

First, conference announcements. No mic - not a great start. Oh, here we are!

PyCon Portugal is 17 - 19 October 2024. There was a great acronym for Portugal, which I didn't have time to write down.

EuroPython is in Prague and remote, in July. 8-9 Tutorials and workshops, 10-12, talks, 13-14 Sprints.

Alessia Marcolini and Valerio Maggio chaired. They told us why pineapple pizza is such an awful idea. They then introduced the wheel of fortune, and the outcome determined various forfeits that speakers were given to force them to behave in specific ways: Swimming in the Arno, Italian hand gestures, Quack it, and various others, including the pineapple pizza, which cut the speakers' time down to 3 minutes.

Luca, the first speaker, spun the wheel too hard, so it took us a minute to discover he had to talk while swimming. With props - goggles and a snake floatation aid.. His talk was about annotating decorators. He showed an untyped decorator to time functions. Very amusing to see him remove the mypy errors one by one. He then turned it into a timing context manager, which also acted as a decorator. Great talk.

Samuel Colvin talked about Jiter, a JSON parser, drew the quack, and the audience decided to quack on the word JSON. He demonstrated, to much applause, how jiter can parse the outout from ChatGPT continuously, rather than having to wait until the whole thing was received. With about thirty quacks, until he wised up and cut down on his use of the word!

Peter next talked about PyClean, a project he wrote himself, while swimming. (He presented it while swimming, he wrote it some other time). He's worked on it so long he's forgotten what it does, but it's available on PyPi. The package actually cleans up your Python bytecode files from your __pycache__ directories. You might think this was a one-line find command, but it's written in Python, and it works!

Rodrigo became another swimmer, and talked about Elegant Code. His example was a simple GUI-based calculator he found online, so he refactored it before our very eyes. Rodrigo prefers expressions to statements, so he replaced many assignments either by simply using parenthisised walrus expressions, or introducing an auxiliary function. The function then became a single lambda expression. The import statements also became walrus expressions using __import__, and he then introduced the concept of "long-circuititng." By the time he'd finished, he'd conjoined all the expressions into a single expression. Most amusing.

By this point it had become less than clear which forfeit was being executed. The next speaker, whose name I did not catch, does two things every day - stay on the computer and listen to music, so he asked why not combine the two. An audience member chose the song "Unbroken" for an example, but apparently that title was too simple. So we next tried "Never going to give you up." His code then created album wallpaper from the Spotify page, and he challenged everyone to use the Gnome desktop, which is currently its only platform. Good talk!

Miro then talked about various keyboard layous, but he drew the pizza so had to talk in three minutes. He told us we were all using weird keyboard layouts, and then told us all about the right ones in varioius languages I couldn't identify, so while he amused the native audience greatly the humour I got was by looking at all the glyphs overlaid on a single keyboard. He explained compose sequences. Wish I'd got a picture. He closed by suggesting the remapping of the SHIFT LOCK and CTRL keys to make ESCAPE more available. Excellent. 

Rigel, the next speaker again became a swimmer, and we started to suspect the wheel was rigged. Problems with the projector paused him for a while, blaming his Windows computer for the issue, so we watched his slides from a web browser. Rigel is a bad skydiver, but he's an engineering manager who claimed to have no idea what his staff do. He's hiring, and talked about Booth's second rule: the safer skydiving becomes, the more risks skydivers take to keep the fatality rate constant. He demonstrated his "horrible code" to mine Bitcoin or similar crypto currencies, and then how raising the difficulty of the required hash of the transaction required nore steps, and finally demonstrated things ran faster in parallel. Neat.

Giuseppe Biradi is a project and program manager, who tried to persuade us that PMs Are (Not) Evil. Because he loves Python he has become a coder, and got the idea for this talk from his coding colleagues' horrified expressions. He claims that PMs are like the pinball firing pin, which can lead to lots of complex behaviours. Or perhaps like someone who gets grain, mill and various other components to finally produce bread. We shouild all respect each others' rules, and sing Kumbaya round the camp fire. I think.

Minita spoke on imposter syndrome. True story based on personal opinoins, and he isn't used to extemporising. Before the pandemic he didn't speak at conferences, but now he enjoys them a lot. There are five stages of imposter syndrome: denial, anger, bargaining, depression and finally acceptance. He showed us a picture of hime helping a fellow Pythonista, and uses a "Yes, you can" sticker on his wall to maintain confidence.

All in all an entertaining session, and one that brought much of the conference together before we all went off to dinner. Sometimes chaotic and always amusing, lightning talks are always one of the high spots of any PyCon. Thanks to all speakers, and the hosts.

February 29, 2024

Understanding Python Descriptors

Understanding Descriptors