Tuesday, August 11, 2026
Gmail might partially be to blame for me receiving emails from other Sean Conners
I was reading the Lobsters thread about the article âA researcher bought noreply.net. Companies started sending him secretsâ when I left a comment about my own struggles with receiving emails for other Sean Conners. That started a thread that swamped the comment section about other people who had similar stories, so it's nice to know that I'm not alone. Also, here's one of my favorite comments in that thread (for reasons that should be apparent):
I was about to say, "I know a guy with a whole blog series about that." But then I looked, and you were him.
Lobsters comment from Jason McBrayer
Heh.
But the thread as a whole left me with the idea that there's still a lot of people out there that barely understand email and aren't even sure what their own email even is. Sad.
I did get an email about my comment from Keong Lim, claiming it was mostly Google's fault for the confusion and linked to this fairly damning answer at Stack Exchange:
It is a lesson in human nature that so many experts simply recite Google's pat answer on this as if an assertion were identical to empirical reality. I am one of the early account holders with the
firstname.lastname@gmail.comaccounts. About three years ago, I began receiving email directed tofirstnamelastname@gmail.com. By triangulating the information I was able to glean from their dry cleaners, car dealer, etc. I was finally able to contact these people (about 3,000 miles from me, BTW). The DO have the same account as me, minus the period. We were able to determine that only a portion of email "leaks" across accounts. Unfortunately, the fact that I had my account 10 years before they had theirs did not convince them to leave the account to me. Thus, I live with the occasional notice from the bank, school, etc. Because of this, I no longer use Gmail for anything important or confidential.The most disturbing thing to me is Google's insistence that they could not have made a programming mistake when they clearly did. These folks are arrogant in their faux humility.
Why does Google not consider dot in usernames of Gmail addresses?
The âpat answerâ is that Google is that it's cutting down on possible confusion over who receives firstname.lastname@gmail.com and
firstnamelastname@gmail.com,
but it seems that the âpat answerâ is a somewhat later change to Gmail to ignore periods in the local part
(the part before the â@â)
of the email address.
I think Gmail is leaning heavily upon this portion of âRFC-5321: Simple Mail Transfer Protocolâ to justify this:
2.3.11. Mailbox and Address
As used in this specification, an "address" is a character string that identifies a user to whom mail will be sent or a location into which mail will be deposited. ⦠Consequently, and due to a long history of problems when intermediate hosts have attempted to optimize transport by modifying them, the local-part MUST be interpreted and assigned semantics only by the host specified in the domain part of the address.
(emphasis added)
I know I signed up early enough to Gmail to get sean.conner@gmail.com and at that time,
seanconner@gmail.com might have been considered a different email address.
After the change,
it appears that Gmail might get confused sometimes a mess up some legacy addresses at times.
While reading all that, I did go down a small rabbit hole with what characters are actually allowed in an email address. It's unclear if anything but ASCII is allowed, but there are surprisingly little in ASCII that isn't allowed. Out of the 95 defined graphic characacters (which I'm including the space character), the following are not allowed:
| character | name |
|---|---|
| Â | Space |
| " | Quotation Mark |
| ( | Left Parenthesis |
| ) | Right Parenthesis |
| , | Comma |
| : | Colon |
| ; | Semicolon |
| < | Less-than Sign |
| > | Greater-than sign |
| @ | Commercial At |
| [ | Left Square Bracket |
| \ | Reversed Solidus |
| ] | Right Square Bracket |
Technically, they could be used in an email address if they're escaped, but it's discouraged heavily.
Saturday, August 08, 2026
Mowing Da Lawn, part II
As I was mowing the lawn today at Chez Boca, cursing myself for letting it go a few weeks, I was reminded that it wasn't as bad as that one time at Casa New Jersey. I'm thankful for that.
Thursday, August 06, 2026
What is even taste when it comes to programming?
[This is me reposting a comment I left on Lobsters about âTaste Is All That's Left,â a post about vibecoding. I think my comments works well enough on its own here as a post. âSean]
As I read this, I was reminded of two quotes. The first is about the taste gap from Ira Glass:
Nobody tells this to people who are beginners, I wish someone told me. All of us who do creative work, we get into it because we have good taste. But there is this gap. For the first couple years you make stuff, itâs just not that good. Itâs trying to be good, it has potential, but itâs not. But your taste, the thing that got you into the game, is still killer. And your taste is why your work disappoints you. A lot of people never get past this phase, they quit. Most people I know who do interesting, creative work went through years of this. We know our work doesnât have this special thing that we want it to have. We all go through this. And if you are just starting out or you are still in this phase, you gotta know its normal and the most important thing you can do is do a lot of work. Put yourself on a deadline so that every week you will finish one story. It is only by going through a volume of work that you will close that gap, and your work will be as good as your ambitions. And I took longer to figure out how to do this than anyone Iâve ever met. Itâs gonna take awhile. Itâs normal to take awhile. Youâve just gotta fight your way through.
The second is from The Ze Frank Show:
For a very long time, taste and artistic training have been things that only a small number of people have been able to develop. Only a few people could afford to participate in the production of many types of media. Raw materials like pigments were expensive; same with tools like printing presses; even as late as 1963 it cost Charles Peignot over $600,000 to create and cut a single font family.
The small number of people who had access to these tools and resources created rules about what was good taste or bad taste. These designers started giving each other awards and the rules they followed became even more specific. All sorts of stuff about grids and sizes and color combinations â lots of stuff that the consumers of this media never consciously noticed. Over the last 20 years, however, the cost of tools related to the authorship of media has plummeted. For very little money, anyone can create and distribute things like newsletters, or videos, or bad-ass tunes about "ugly."
Suddenly consumers are learning the language of these authorship tools. The fact that tons of people know names of fonts like Helvetica is weird! And when people start learning something new, they perceive the world around them differently. If you start learning how to play the guitar, suddenly the guitar stands out in all the music you listen to. For example, throughout most of the history of movies, the audience didn't really understand what a craft editing was. Now, as more and more people have access to things like iMovie, they begin to understand the manipulative power of editing. Watching reality TV almost becomes like a game as you try to second-guess how the editor is trying to manipulate you.
As people start learning and experimenting with these languages authorship, they don't necessarily follow the rules of good taste. This scares the shit out of designers.
the show with zefrank - 2006-07-14
I'm not sure what I make of all this.
Unary operators and the Shunting Yard algorithm
I use the Shunting Yard algorithm to handle precedence when parsing expressions in my assembler. It's great because not only is it simple to implement, but it simplifies the code in a hand-written recursive descent parser. The BNF is effectively:
; BNF per RFC-5234
expr = factor *(op factor)
op = '*' ; just the basic ops for now
/ '/' ; adding more is just adding
/ '+' ; them to this definition
/ '-'
factor = literal
/ var
/ '(' expr ')'
literal = DIGIT+
var = (ALPHA / '_') (ALPHA / DIGIT / '_')*
When expressing this BNF via a recursive descent parser,
the function handling expr is where the Shunting Yard algorithm is used,
providing precedence handling.
In my implementation,
the function handling op returns the precedence and associativity from a table:
static struct optable const cops[] =
{
[OP_EXP] = { OP_EXP , AS_RIGHT , 1000 } ,
[OP_MUL] = { OP_MUL , AS_LEFT , 900 } ,
[OP_DIV] = { OP_DIV , AS_LEFT , 900 } ,
[OP_MOD] = { OP_MOD , AS_LEFT , 900 } ,
[OP_ADD] = { OP_ADD , AS_LEFT , 800 } ,
[OP_SUB] = { OP_SUB , AS_LEFT , 800 } ,
[OP_SHL] = { OP_SHL , AS_LEFT , 700 } ,
[OP_SHR] = { OP_SHR , AS_LEFT , 700 } ,
[OP_BAND] = { OP_BAND , AS_LEFT , 600 } ,
[OP_BEOR] = { OP_BEOR , AS_LEFT , 500 } ,
[OP_BOR] = { OP_BOR , AS_LEFT , 400 } ,
[OP_WORD] = { OP_WORD , AS_LEFT , 350 } ,
[OP_NE] = { OP_NE , AS_LEFT , 300 } ,
[OP_LT] = { OP_LT , AS_LEFT , 300 } ,
[OP_LE] = { OP_LE , AS_LEFT , 300 } ,
[OP_EQ] = { OP_EQ , AS_LEFT , 300 } ,
[OP_GE] = { OP_GE , AS_LEFT , 300 } ,
[OP_GT] = { OP_GT , AS_LEFT , 300 } ,
[OP_LAND] = { OP_LAND , AS_LEFT , 200 } ,
[OP_LOR] = { OP_LOR , AS_LEFT , 100 } ,
};
Adding a new operator is pretty easy.
I was able to add the :: operator
(OP_WORD)
and slot it in
(the expression a :: b is the same as a * 256 + b and is used extensively in my 6809 ANS Forth implementation).
The downside,
the Shunting Yard algorithm doesn't handle unary operators very well.
From what research I've done and a proof-of-concept I did,
it can be done.
Unary operators need to be right associative,
but that's the easy part.
It gets ugly with parsingâhow to determine if â-â is a subtraction binary operator or a unary negation operator,
and where to place that code,
and it has to go somewhere.
I got it working.
but it involved smearing the Shunting Yard algorithm into the op and factor functions in my case.
And honesty,
I don't think it's worth it just to get -3**2 to return -9 versus 9.
Wednesday, August 05, 2026
Notes on an overheard conversation coming from the Family Room
âThe TV remote isn't working again!â
âYou need to really smash that select button.â
âI am! See?â
âHmmm. Let me try ⦠oh. There you go.â
âThe remote hates me!â
âIt seems so.â
The surprising email to âSean Connerâ that wasn't meant for me
I received yet another email for Sean Conner but this time, it wasn't at Gmail!
It was surprising because it was sent from my friend Lorie who currently lives in Pennsylvania, about the new Area Director for Toastmasters, which is funny, because I do not live in Pennsylvania, nor have I been involved with Toastmasters since the 5th grade (ages 9â10 for non-US people). I wrote her back about this, and I received the following back:
Oh my word, I was trying to send to a different Toastmaster that was Sean Conner - and the email got confused - so sorry!
My God! The Internet is full of Sean Conners it seems!
Alarm clocks
Chris Siebenmann uses iPhone as an alarm clock, and his reasons are largely why I too, I keep my old iPhone (which is no longer supported by the Oligarchic Cell Phone Company) as an alarm clock (and why I don't have a new iPhone that is supported is a complicated story I'd rather not get into for my own sanity).
And I use the iPhone for all the reasons that Chris does. But one aspect that Chris doesn't mention is the ability to change the alarm sound to prevent myself from being conditioned to ignore the alarm. I have two stories about an old alarm clock (of the type that you plug into the wall) that illustrate my being conditioned to an alarm.
Both of these happened in the mid-90s when I had been using the same alarm clock for maybe a decade at that point. The first was a dream. I was at work when my boss approached me. âBaah baah baah baah baah baah,â he said. Nothing I said deterred him from his speech impediment. âBaah baah baah baah baah baah.â He just would not shut up. It took a while for me to realize that my alarm clock was going off, and that I had incorporated the sound into my dream. âBaah baah baah baah baah baah,â indeed.
For the second, I must explain that I had placed my alarm clock out of arms reach. In fact, I had placed it across the room, meaning that when I realized the alarm was going off, I would be forced to get out of bed to shut it off. But as I found out, that wasn't enougn.
There was one time when the alarm went off, âbaah baah baah baah baah baah,â I would roll out of bed, take the two steps to cross the room, slap the âsnoozeâ button, two steps back, roll back into bed. âBaah baah baah baah baah baah.â Roll out of bed, two steps, slap, two steps, back to sleep.
For three hours!
At which point, the alarm clock said âenough of this silliness,â and shut the alarm off itself. I am not proud to have learned this.
So yes, I still use the iPhone for an alarm clock, as when (and I think it's a matter of when) I become conditioned to the current alarm sound, I can change it.
But that still leaves one questionâwhy does âsnoozeâ only last for nine minutes? The most plausible answer is one popular model did it that way. So there you go.
Saturday, August 01, 2026
The precedence of the factorial operator
Back when I added a factorial operator to my assembler, the code only applied it to numeric literals because the code that implemented it appeared in the same function as parsing a numeric literal. I only found the bug when I tried to apply a factorial to a subexpression in parenthesis, for example, -(2+1)!.
The fix was easy,
just move the code out of the numberic literal parsing routine rvalue() to rfactor() where the unary + and - occur,
as well as handing subexpressions.
But the fix lead to another issueâhow to handle a sequence like -3!.
Should it error out since negative values aren't defined for factorial?
Or should it apply the factorial to â3â and then the unary minus sign?
I asked the question over on Lobters and a very loose consensus seemed to be that factorial has a higher precedence than unary minus. I also threw -3! at Wolfram Alpha (that I forgot existed until I started doing some web searches on the question) and it also handled factorial before unary minus.
So that's what I went with. From what little I found on this topic, it seems that -3! should indeed return -6 as an answer. It also seems to be the mathematical convention that -32 should return -9 and not 9 (which is that my assembler returns, as well as Microsoft Excel). Fixing that issue would require a rewrite of the expression parser. The Shunting Yard algorithm I use to handle precedence doesn't handle unary operators all that well.
Sigh.
Wednesday, July 22, 2026
âI am altering the deal. Pray I don't alter it any further.â
I know it was probaby inevitable, but I still found it surprising and rather upsetting to see that our television updated itself and that we had to accept the new terms of service. I'm not sure what would have happened had we refused. Would it have bricked itself? And what âserviceâ has changed that required new terms? Sending back our watching habits to the mother ship? Watching one more ad ad we turn it off?
Sigh.
Tuesday, July 21, 2026
A week of appointments
You would think that now that Bunny was home now that we could relax for a bit. But nooooooooo! We had to call today to schedule a follow-up visit at the house. This follow-up visit is for tomorrow, then a scheduled visit to Bunny's general doctor on Thursday, and a follow-up visit to the orthopedist on Friday. I don't think she's ever had this many scheduled medical visits before.
Nor so quickly.
Geeze.

![Oh Chrismtas Tree! My Christmas Tree! Rise up and hear the bells! [Self-portrait with a Christmas Tree] Oh Chrismtas Tree! My Christmas Tree! Rise up and hear the bells!](https://www.conman.org/people/spc/about/2025/1203.t.jpg)