The Boston Diaries

The ongoing saga of Sean Conner, who doesn't live in Boston, nor does he even like Boston, but yet named his weblog/journal “The Boston Diaries.”

Go figure.

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.com accounts. About three years ago, I began receiving email directed to firstnamelastname@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:

ASCII characters not allowed in an email address
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 GAP by Ira Glass

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.

Obligatory Picture

[Self-portrait with a Christmas Tree] Oh Chrismtas Tree!  My Christmas Tree!  Rise up and hear the bells!

Obligatory Contact Info

Obligatory Feeds

Obligatory Links

Obligatory Miscellaneous

Obligatory AI Disclaimer

No AI was used in the making of this site, unless otherwise noted.

You have my permission to link freely to any entry here. Go ahead, I won't bite. I promise.

The dates are the permanent links to that day's entries (or entry, if there is only one entry). The titles are the permanent links to that entry only. The format for the links are simple: Start with the base link for this site: https://boston.conman.org/, then add the date you are interested in, say 2000/08/01, so that would make the final URL:

https://boston.conman.org/2000/08/01

You can also specify the entire month by leaving off the day portion. You can even select an arbitrary portion of time.

You may also note subtle shading of the links and that's intentional: the “closer” the link is (relative to the page) the “brighter” it appears. It's an experiment in using color shading to denote the distance a link is from here. If you don't notice it, don't worry; it's not all that important.

It is assumed that every brand name, slogan, corporate name, symbol, design element, et cetera mentioned in these pages is a protected and/or trademarked entity, the sole property of its owner(s), and acknowledgement of this status is implied.

Copyright © 1999-2026 by Sean Conner. All Rights Reserved.