• DMARC reports

    I set up DMARC on my new domain with p=none; rua=mailto:dmarc-reports@example.com. This means “don’t enforce any mail restrictions, but send reports to this address”. Never seen a report before! I sent a few test emails recently and got my first set of reports.

    Each of three mail handlers I sent mail to emailed me back a report for 24 hours. Some had no text at all, some had a summary of the contents (like “1 success 0 failures”). Attached in the mail is an XML report in some standardized format. It seems to contain stats aggregated by source_ip with info on what domain the mail claimed to be from and whether it delivered or not. You can also infer roughly where the mails or going from who is sending you reports, although “Gmail” could be any of a zillion people. Anyway overall it looked useful and not too privacy-invading. I imagine there are tools to ingest the XML and track stats. Update: a friend recommends Postmark which I think has a free level.

    Every time I try to read more about all the modern spam measures in SMTP I find a bunch of sites catering to spammers. Er, “newsletters”, which I assume 95% of the time means marketing bullshit. It’s clear why they’re the audience with money to be worth writing docs for. But I can’t help the feeling something is wrong when we’ve built so much email infrastructure that is mostly used by and circumvented by the spam industry.

    I find it hilarious that spamassassin has a rule that says “any mail signed with DKIM looks a little like spam”. That’s then offset by a bunch of DKIM specific rules that rate the mail less like spam if the signature is valid, matches SPF, etc. DKIM is a net positive in spamassassin. But not entirely!

    <?xml version="1.0" encoding="UTF-8" ?>
    <feedback>
      <version>1.0</version>
      <report_metadata>
        <org_name>google.com</org_name>
        <email>noreply-dmarc-support@google.com</email>
        <extra_contact_info>https://support.google.com/a/answer/2466580</extra_contact_info>
        <report_id>74417372361908878</report_id>
        <date_range>
          <begin>1756425600</begin>
          <end>1756511999</end>
        </date_range>
      </report_metadata>
      <policy_published>
        <domain>example.com</domain>
        <adkim>r</adkim>
        <aspf>r</aspf>
        <p>none</p>
        <sp>none</sp>
        <pct>100</pct>
        <np>none</np>
      </policy_published>
      <record>
        <row>
          <source_ip>209.85.220.41</source_ip>
          <count>1</count>
          <policy_evaluated>
            <disposition>none</disposition>
            <dkim>pass</dkim>
            <spf>pass</spf>
          </policy_evaluated>
        </row>
        <identifiers>
          <header_from>example.com</header_from>
        </identifiers>
        <auth_results>
          <dkim>
            <domain>example.com</domain>
            <result>pass</result>
            <selector>google</selector>
          </dkim>
          <spf>
            <domain>example.com</domain>
            <result>pass</result>
          </spf>
        </auth_results>
      </record>
    </feedback>
    
    

  • New domain Google Workspace email setup

    I’m setting up my domain somebits.com for my new email address. To do this I’m using Google Workspace to handle email. This turns out to be remarkably complex: Workspace is a quite elaborated product and designed to do a whole lot more than just forward email. I’m ignoring almost all of its features and only using it to forward all email sent to me at somebits.com on to my personal Gmail account (an @gmail.com address).

    Receiving somebits.com email in personal account

    There’s two ways to do this. You can forward email for an individual somebits.com simply in that user’s Gmail setup. Instead I’m using Workspace tools to forward mail for the whole domain, before it gets to the user’s Gmail. I’m doing a blanket default route (ie: all addresses in somebits.com). There’s way more complex routing rules.

    This is the key configuration. In Admin / Apps / Gmail there’s an option for “Default routing”. Here you can tell it that for All Recipients, Change the envelope recipient to any email address you want. I used <my.address>@gmail.com. I also clicked “Bypass spam filter for this message” and “Perform this action on non-recognized and recognized addresses”. I believe this means every single email will go to my personal gmail account.

    Sending somebits.com email from personal account

    I also want to be be able to send email from somebits.com from my personal @gmail.com. This is just adding another account in to Gmail. It wants to know an SMTP server: I tell it smtp.gmail.com. It also wants a username and password for logging in to the SMTP server. That’s kinda dumb: this is Gmail using Gmail! But they don’t have a special auth path. So I created an app password for it.

    Email logs

    Workspace has a very useful email log (“Email log search”) for figuring out problems. Note when you load it it says 0 results: you have to click the search button for it to populate.

    DKIM and DMARC and SPF

    I’ve set up DKIM (to sign mail), SPF (to say who can send mail for my domain), and DMARC (to say what folks should do with improperly signed mail). The Workspace docs for this are pretty good. check-auth@verifier.port25.com is also a big help in testing things. DKIM and SPF seem like basic price of entry now and the main reason I’m using Google Workspaces at all is I can have Gmail in the loop, Gmail is highly trusted globally. DMARC seems more optional, I’ve set up p=none just out of curiosity what reports I’ll get.

    Account juggling

    I now have two logins: my personal gmail and my new account. Every time I use any Google product I need to be careful which account I’m using. Most Google products have a switcher now. Gmail isn’t so bad. I got tripped up and accidentally turned on Workspace for my personal Gmail account because I didn’t realize which user I was clicking a button as.

  • Taming notification spam in Android 16

    I complained on social media:

    Android makes it hard to run background processes, but one hack to work around it is to display a notification. So my entire phone’s notifications screen is now filled with notifications that allow background jobs to run. GPS tracker, fitness tracker, web messages access, syncthing, doze stopper (itself to fix another Android bug). This is a very bad user experience

    A friend helped me improve things. In the settings for App Notifications, for each notification channel (not the whole app), you can silence the notification and then also minimize it. This silences only this category of notification so that others still come through.

    That gets it down to one line in the notification screen. It also hides the icon in the top bar. Finally, for the first time in my life I’m seeing the Screen Saver and Pixel Stand idle screen. Those weren’t being shown because there were visible notifications.

    Here’s what it looks like now. Still feels spammy but much better.

  • New registrar, DNS transfer notes

    I’m working towards establishing one of my domain names as my new primary email address. As part of that, I decided to finally move all my domain names from Hover over to a new registrar. Hover is OK but not great and hasn’t modernized their platforms in the way I’d like.

    I’m testing out Porkbun as my new registar. Namecheap is also in consideration. I asked on Mastodon and these two seemed the most popular. Gandi used to be more popular but got bought and their prices were jacked way up.

    Porkbun has a nice documentation page on transferring DNS without downtime. The challenge is if your domain’s whois records use your old registrar (Hover) as your DNS server. The transfer takes some unknown time to go through, several days. But the moment it goes through the old registrar will probably stop serving DNS queries, so your domain stops working until the new registrar can get in there and publish new info.

    Anyway, the key is to do all the transfer on Porkbun except the authorization key part. Then set up DNS records at Porkbun. Then edit the whois records on the old registrar (Hover) to point to Porkbun’s nameservers. Then finally unlock the domain and give Porkbun the authorization key to let it go through.

    I neglected to do these steps in this order and by the time I went to edit the whois at Hover I got “Registry error, domain’s nameservers not updated [Object status prohibits operation] (Code 405)”. ChatGPT claims this error is actually from Verisign, presumably a lock put in place while the transfer is underway.

    Fortunately the domain I’m trying this on isn’t really used so it’s no big deal if it breaks for a bit.

    I pretty much immediately got email from Hover saying that a transfer was requested and that I didn’t have to do anything to allow it, just wait five days. Notably absent is any button to press to expedite the transfer faster.

    Update

    The transfer went through 5 days and about 6 hours later. Hover still shows I own it in their list, but Porkbun has it in their system. The whois record is updated to Porkbun. The domain registration was extended another year.

    The whois still points to Hover’s DNS servers. Happily those still work, they didn’t turn off service immediately when the domain transferred. I just updated to use Porkbun instead. That change was visible immediately on whois.com’s web interface and within a few minutes in my Linux CLI whois tool. dig +trace shows the new nameservers are being queried. I’m sure something is going to end up cached for awhile, it really would be better to change the DNS servers first. But at least it wasn’t an instant disaster because I forgot to do that before the transfer.

    I was able to add a TXT record to my Porkbun DNS with a 60 second TTL. It was visible immediately from a DNS query. After I deleted it the deletion was visible immediately on a host without a cache. It did expire after a few minutes on my local Linux box where I had it cached but it may have taken longer than 60 seconds, I didn’t test fully. Anyway, I’ll say Porkbun DNS works, at least for the simple case.

    Porkbun’s web whois has a form for contacting a domain owner. It actually works! Here’s the message I eventually got.

    First, we are very sorry to bother you but someone has managed to jump through all of the required hoops in order to send you a message. As required by ICANN, we must allow someone to send a message to domain contacts via a web form. The person contacting you has validated their email address and passed a CAPTCHA proving that they are more than likely not a robot

  • Email woes

    For nearly 30 years I’ve been using nelson@monkey.org as my email address. The hosting details have changed over time but for nearly twenty years I’ve been forwarding everything into Gmail. Over the years this has gotten worse and worse as email has deteriorated as a medium.

    monkey.org uses OpenSRS’ HostedEmail for both sending and receiving email. It seems fine if barebones.

    Sending email

    The big problem I solved today was that Gmail was sending email itself and just forging the monkey.org address. This used to work seamlessly but over the years a variety of not-very-effective spam fighting technologies have made this harder and harder. The big problem is Gmail cannot sign emails for DKIM as monkey.org and DKIM is increasingly becoming required to have your mail delivered.

    Today I got to learn all about SPF and DKIM and DMARC. The autoresponder at check-auth@verifier.port25.com is very helpful for diagnosing problems, there’s also a lot of web based email verifier tools online.

    About a month ago Yahoo (and sbcglobal, and pacbell..) stopped accepting email from me. Often mail would just disappear but I did get one helpful bounce.

    550 5.7.9 This mail has been blocked because the sender is unauthenticated. Yahoo requires all senders to authenticate with either SPF or DKIM. Authentication results: DKIM = FAILURE - SPF monkey.org with ip 209.85.167.173 = FAILURE. See https://senders.yahooinc.com/smtp-error-codes/#authentication-failures for more information.

    This report is bogus: that IP address (from Google) is valid in monkey.org’s SPF records. At least it is right now. But there is no DKIM signature in my email and that’s maybe really why Yahoo bounced it. (monkey.org has a DMARC policy of p=none, which should mean sites accept email without DKIM).

    The solution for all this is to configure Gmail to use monkey.org’s SMTP server to send mail so that server can DKIM sign the mail. I hate adding this extra server in the path but there’s really no way around it. It seems to work fine once I figured out the configuration.

    Ugh: now a new problem, I can’t send a Google Photos URL to a hotmail friend of mine, it gets bounced as spam, I think by hotmail. This never happened before when Gmail was directly delivering the mail but now that hostedemail is involved, I get marked as spam.

    Receiving mail

    I’m also having trouble receiving mail.

    In my old setup, monkey.org forwarded my email directly to gmail as soon as it was received, I think inside the mailer daemon itself. This forwarded started failing occasionally, silently bouncing mail back without a clear explanation. Not consistently: simple text email from the same sender would mostly get through then one out of ten would bounce. Lots of spam gets through no problem.

    We changed it so monkey.org now delivers mail into the OpenSRS HostedEmail webapp. I then configured the app to forward mail to gmail. This mostly works fine, although it is yet more steps to process each message. But some messages still don’t get to gmail. Now instead of bouncing they get left in my Inbox at HostedEmail. It seems about the same pattern as the ones that bounced. My guess is Gmail doesn’t like these messages for some reason and is refusing to accept the forward. At least I can find them in this other inbox.

    I may yet configure Gmail to also fetch mail out of HostedEmail via POP3. That may be a way to retrieve the messages when the forwarding fails.

    Change my email address?

    Part of what’s made this complicated is I don’t control monkey.org. The other folks who use monkey mostly do not use Gmail. No complaint, they have been very generous and reliable, but I’m basically relying on the help of old friends. So once again I consider whether I should change my email address, probably to the domain I use for my blog. I can set that up to be hosted by Gmail pretty easily for $7/month. I think all the configuration is pretty simple, a few DNS records to set up just once.

    We are a long long way from the days when you could send email just by telnetting to port 25 and typing. And yet somehow we still don’t have end-to-end encrypted email. Probably never will.

    Update: giving up

    Sending mail via hostedemail is causing enough new problems that I’m giving up. I’m setting up my blog’s domain for email 100% in Google Apps. Email used to be an open medium. It has now been wrecked by spammers and captured by a few companies.

  • Starlink latencies 2021-2025

    I’ve been pinging 8.8.8.8 via Starlink for four years now. Here’s a graph of average and minimum ping times. The average this last week has been 29ms. The minimum I’ve ever seen is 14ms. This pings through to Google DNS and is generally 1-2ms slower than the Starlink diagnostic.

    What really impresses me are the systemic improvements. Things were bad in 2022 and 2023 when they added too many customers in my area (Grass Valley, CA) but then they fixed that. And average latency keeps going down. There’s also been a couple of steps down in the minimum as they’ve improved some things.

    (You’ll see some anomalies in my graph of very high latencies. That’s usually when something failed and I switched to my backup ISP.)

    (this is a copy of a comment on Reddit)

  • Sony Bravia A95L “Enhanced Mode” HDMI

    I bought a fancy new OLED TV, a Sony Bravia A95L. It’s beautiful! And it should do 3840×2160 video (ie, 4K) at 60Hz with HDR10. With Variable Refresh Rate, no less! But I was having trouble with both my Playstation 5 and a gaming PC I have.

    Long story short, the Sony Bravia has a configuration for each HDMI input called “Enhanced format“. You want to turn that on. By default it is off and video signals are limited to 30 FPS in HDR mode. I guess this is a compatibility / performance thing but it seems fine for me.

    There’s all sorts of other things that can go wrong. Windows likes to default to 30 FPS sometimes. The cable can be the wrong kind. Etc. But this setting in the screen is a new one on me.

    There’s a bunch of other settings in the screen input too. One thing I particularly like is you don’t have to enable “game mode” to disable a bunch of extra processing like motion smoothing, etc.

    It really is a lovely display. HDR is a marvel.

  • ZFS on an external USB drive

    I’m liking ZFS so much I decided to use it on my new media storage drive. A 14TB external USB drive with video and music files. The serious nerds who use ZFS will tell you that USB is unsuitable and there’s no point in using ZFS without reundancy. Phooey!

    It works quite well. You plug the disk in, create a pool on it (with just the one disk), and you’re done. It automounts for you. You can create datasets to segregate data and they automount. (Be aware you can’t efficiently move files between datasets, that ends up being a byte by byte copy.) And as a bonus you get ZFS features like checksums, deduplication, snapshots, etc. It’s nice!

    What happens if you unplug the disk? If you unplug while the disk is mounted (“imported”) it’s a total mess. Don’t do that. This is the problem with USB, it can be a bit flaky and act like it unplugs itself, but I think that’s mostly a problem of the bad old days. So far so good!

    If the disk is unplugged and the system is rebooted, the directories won’t exist at all. This is different from ext4 or other fstab filesystems. For instance, say /jukebox is my USB disk. With ext4fs I have to do a mkdir /jukebox before mounting, so there’s a /jukebox present on the root filesystem. The mount replaces the directory. If the disk doesn’t mount you still have that /jukebox visible and other stuff might try to use it. Instead if you have a ZFS pool named “jukebox” it just automounts to /jukebox even if that name doesn’t exist at all in the root filesystem. And if it doesn’t mount, that means there’s no /jukebox at all. In my case I’m using these USB disks as bindmounts for LXC containers. Proxmox notices the directory doesn’t exist and refuses to even start the container. I like that failure mode.

    Mostly the disk is plugged in though and ZFS seems to work pretty well with it.

    (Elsewhere I have a deployed system with ZFS mirroring deployed on two USB disks in the same enclosure. This also seems to work reliably, after one USB hiccup scared me right at the start.)

  • Passkey success (Jul 2025): 1Password

    I love the idea of passkeys but had a very bad time trying to use them last year. But sites keep adding support for them and friends reported they were having more luck, so I gave them another try. It worked!

    Before I get into details, I want to talk about another milestone: Apple is leading the way in passkey migration, see these notes on iOS 26. So far none of the vendors had any story for “what if I want to move my passkey to a different device or program?” and Apple now has a solution.

    For now I’m storing all my passkeys in 1Password. They’re my existing password agent and I like they are independent. If I were starting brand new I might use Google’s password manager instead, it’s now quite good, but it locks you into Chrome. Apple also has very good password management in their products.

    1Password, Windows, and Android

    I’m now able to log into GitHub and this test site with passkeys. I generated them in Chrome on Windows and stored them in 1Password and that worked. I could then use them from Chrome on Android (via 1Password). Hooray!

    It’s still a little janky: the 1Password UI integration is not perfect. But it does work. A huge help is everything is now displaying which software is trying to fill in the password: 1Password’s blue keyhole icon or Google’s multicolored key.

    It was not easy making this work reliably! It’s partly my fault: last year when testing I did everything I could to disable 1Password. Re-enabling it was not so simple. In Windows it’s straightforward enough, but note that Google Chrome or Windows Hello both might try to intervene. I’ve got it going to 1Password first now and I’m happy.

    In Android it’s a total mess. It’s Google’s fault, the Android settings have proliferated terribly across the product. And I suspect no one at Google is mandated to make it easy for their competitors to work well.

    1Password’s instructions mostly got me there but shed a tear for step 3 with four different scenarios like “If you have a Samsung device running…” Good ol’ Android :-(

    Actually even following those instructions I had a lot of trouble. You have to enable it in two different Settings places.

    I ended up having to remove everything and re-enable 1Password a second time for it to work. Like I said before, I did a bunch of stuff to disable 1Password last year and I suspect that made me a trickier case than most users.

    So passkey usability still isn’t great. But at least I can get them working on my devices now! And now that it is working I’m anticipating a real improvement in authentication usability. I’m convinced passkeys are a good technology, I just wish the user experience were better.

  • Some quick LLM speed tests

    This article about running LLMs on a laptop inspired me to try out LM Studio again on Windows. This is on a computer that I first built 8 years ago and updated in 2020. Ryzen 3700X CPU with 32GB RAM, and an old GeForce 1080 with 8GB of VRAM.

    Bottom line: I can run Q4 models up to 8B parameters pretty fast, 20-25 tokens/s. It feels about as fast as basic ChatGPT. Big models like 27B run in one tenth the speed, 2-3 tokens/second. The big difference is the smaller models fit entirely in my 8GB VRAM. I think there could be some headroom for more than 8B models, maybe as much as 12B? But in practice the 12B models are running a lot slower, so maybe not.

    You can run inference usefully entirely on a CPU, no GPU at all, as long as you aren’t in a hurry. LM Studio is smart about offload parts of a model to use as much of the GPU as it can, but it seems much faster if it can run the whole thing on the GPU. Most of these models are 4 bit quantized, so a 12B model needs roughly 6GB of RAM to load. Plus overhead which is significant, 20%? I can’t make the numbers add up in testing, I must not understand something.

    Update: I can get about 20 tokens/s on fast small models, and 2 tok/s on big slow models. FWIW ChatGPT says the consumer web products are working at about 50 tok/s.

    Anyway, some quick tests of recent models. The prompt was something like “write me a python program to reverse the words in a sentence. No fair using [::-1] to slice it backwards, that’s cheating Just write the reverse function and show it to me, don’t discuss your answer or show usage and tests”.

    I didn’t really inspect the quality of the output, just testing what I can run. Unfortunately I can’t exactly measure how much RAM and VRAM these things are loading: LM Studio does not accurately report it. So instead I’m recording the model download size: RAM usage seems to be 10-20% more.

    Fast

    deepseek/deepseek-r1-0528-qwen3-8b. 20-25 tokens/sec. 5.03GB. Note deepseek has an extensive “thinking… process” first so the useful output takes longer. Most of those tokens at 20 tokens/sec are not useful to me! It spun for several minutes on my programming questions, thinking to itself. I’ve got no idea what’s going on here but it was not very useful.

    google/gemma-2-9b: 20 tok/s. 5.1GB

    google/gemma-3n-e4b (6.9B). 25 tok/s, 4.2GB

    gemma-3-270m (0.3B) 112 tok/s but while the output is coherent it is very wrong

    Slow

    google/gemma-3-12b. 7.5 tok/s. 8.2GB. LM Studio says “Full GPU Offload possible” but I have my doubts based on observed behavior.

    google/gemma-3-27b. 2.7 tokens/sec. 16.4GB

    mistralai/mistral-small-3.2 (24B). 3.6 tokens/sec. 15.2GB

    Prompts (Aug 1)

    I forgot to document the prompts I’m using to testing. It’s very simple. (typos and all!)

    • who am i talking to?
    • write my a python program to reverse the words in a sentence
    • write my a python program to reverse the words in a sentence. No fair using [::-1] to slice it backwards, that’s cheating… Just write the reverse function and show it to me, don’t discuss our answer… or show usage and tests
    • summarize the literary career of Edmund White in about 500 words.

    Update (Linux server, Aug 1)

    I’m doing some new experiments using Ollama on my main server, a 2022 machine with an i5-12600K and 64GB of RAM. It has no GPU at all. I’m giving the LXC 40GB of RAM and 12 CPUs (the machine has 6 performance cores with 2 threads each.)

    google/gemma-3n-e4b (6.9B). 14tok/s. ollama has 8GB resident.

    gemma3/12b: (12B). 5.6 tok/s. Ollama is 10GB resident.

    gemma3/27b: (27B). 2.7tok/s. Ollama has 19GB resident.

    Summary: even without a GPU, my little server can run useful models fairly quickly. 14 tok/s on the server CPU feels reasonably fast and is a little over half the speed of the same model running on my Windows machine with an old GPU. The other big conclusion here is that tokens/second is correlated with number of weights in a model. Twice the weights, half the speed. (It’s not quite linear, but close.) I guess that’s obvious but I never understood it before.

    Update (Hosting, Aug 1)

    I don’t know that self-hosting an LLM makes sense. ChatGPT claims it would cost a few hundred dollars a month to rent a server with a GPU big enough to run gemma3/27b. Alternately you can pay companies to run gemma3/27b for you and access it for about $0.20 / 1M tokens. OpenAI and Claude are significantly more expensive, on the order of $10-$70 / 1M tokens. But then they are much higher quality systems with a lot more going on than just the LLM.

    Outputs

    I said I wasn’t evaluating output quality but here’s the Edmund White transcripts. They are all competent but the gemma3n/e4b model’s answer feels a little off, it talks about some lesser books and some of the tone feels a little off (like referring to “a close friend”). And the gemma3/12b model is just plain wrong in places, hallucinating the title “A Boy’s Own Apollo”. gemma3/27b also makes some factual mistakes: My Lives wasn’t published in 1981 but in 2005. Overall these answers seem good but have some real flaws.

    gemma3n/e4b

    Edmund White, born in 1940, is a towering figure in American literary
    history, renowned for his unflinching explorations of gay male life,
    sexuality, and the complexities of identity. His career, spanning over
    four decades, has consistently pushed boundaries, blending memoir,
    fiction, and literary criticism into a distinctive and highly acclaimed
    body of work.

    White’s early writing emerged during the burgeoning gay rights movement of
    the 1970s. His first novel, Desire (1976), established his signature
    style: a meticulously detailed, often self-deprecating narrative that
    prioritized psychological realism over plot-driven storytelling. It
    explored the anxieties and desires of a young, closeted gay man in New
    York City, setting the tone for his future explorations of intimacy and
    self-discovery. This period saw him become a prominent voice in the gay
    literary scene, offering nuanced portrayals that challenged prevailing
    stereotypes.

    Throughout the 1980s and 90s, White’s work gained wider recognition. He
    published several novels, including A Boy’s Own Story (1984), a
    semi-autobiographical novel that delved into his childhood and
    adolescence, and The Beautiful Room is Empty (1988), a poignant
    exploration of grief and loss following the death of a close friend. These
    works cemented his reputation as a master of psychological realism,
    capable of capturing the subtle nuances of human emotion and experience.
    He also began to publish more explicitly autobiographical works, blurring
    the lines between fiction and memoir.

    A significant turning point in White’s career came with the publication of
    My Usual Profession (1997), a collection of essays that offered a candid
    and often humorous account of his life as a writer. This collection
    revealed a sharp wit and a willingness to expose his own vulnerabilities,
    further solidifying his reputation as a literary intellectual. He
    continued to publish both fiction and memoir, including The Farewell, My Love (1998), a deeply moving exploration of love and loss, and States of Desire (2000), a collection of essays that examined the complexities of
    desire and identity.

    In later years, White’s work has become increasingly introspective and
    philosophical. He has explored themes of aging, mortality, and the legacy
    of his own life. His novels, such as The Humbling (2008), a
    fictionalized account of a mentally fragile painter, and Life is Elsewhere (2011), continue to grapple with the challenges of human
    connection and the search for meaning. He has also written extensively
    about other writers, offering insightful and often affectionate portraits
    of literary giants like Marcel Proust and Henry James.

    Edmund White’s literary career is characterized by his unwavering
    commitment to honesty, his masterful prose, and his profound understanding
    of the human condition. He has consistently challenged conventions and
    pushed the boundaries of literary form, creating a body of work that is
    both deeply personal and universally relevant. He remains a vital and
    influential voice in American literature, celebrated for his ability to
    illuminate the complexities of gay life and the enduring power of love and
    loss.

    gemma3/12b

    Edmund White’s literary career is a fascinating and evolving chronicle of
    a life lived openly and honestly, reflecting shifts in American culture
    and the ongoing struggle for LGBTQ+ visibility. Spanning over four
    decades, his work has traversed genres, from memoir and biography to
    novels and essays, consistently marked by a keen intellect, elegant prose,
    and a persistent exploration of identity, desire, and the complexities of
    human connection.

    White’s early work, heavily influenced by Proust and Fitzgerald,
    established him as a significant voice in American literature. His first
    novel, A Boy’s Own Apollo (1985), launched his career and became a
    landmark in gay literature. The trilogy, comprising A Boy’s Own Apollo,
    The Farewell Symphony, and The Plotting of Mrs. Lang, boldly explored
    the coming-of-age and interior life of Thomas Scholes, a gay man grappling
    with societal expectations, artistic ambition, and the AIDS crisis. These
    novels, initially criticized for their perceived elitism, resonated deeply
    with readers seeking authentic portrayals of gay experience, and
    solidified White’s reputation for stylish and introspective prose.

    The AIDS crisis profoundly shaped White’s subsequent work. States of the Union (1988), a semi-autobiographical novel, offered a poignant and
    searing account of a young man’s experience with the disease, interwoven
    with political commentary. This marked a shift towards greater social
    engagement in his writing. Following the deaths of friends and loved ones,
    White turned to biography, finding solace and intellectual stimulation in
    exploring the lives of others. His biographies of Guillaume Apollinaire
    (Guillaume Apollinaire: A Life) and Caravaggio (Caravaggio)
    demonstrated his talent for bringing historical figures to life, revealing
    their complexities and struggles within their respective contexts.

    The turn of the millennium saw White further evolve his style and themes.
    The Caliph’s House (2002), a memoir recounting his experiences with a
    devastating and secretive relationship, was a raw and intensely personal
    exploration of love, loss, and deception. It showcased a willingness to
    confront painful truths and challenge conventional notions of memoir. This
    work, and subsequent memoirs like Inside a Vicarious Mood: Re-reading a Life (2006) and How Odd to be Titular: A Collection of Photographs
    (2009), revealed a sophisticated understanding of self-reflection and a
    willingness to examine his own complicity in difficult situations.

    In recent years, White’s work has become increasingly focused on the
    complexities of relationships and the ongoing search for connection. Man in Profile: Essays (2011) and Let’s Not Talk About Cesars (2014)
    offered meditations on art, literature, and the evolution of his personal
    life. The Loveliest Home That Lady Ever Built (2018), a novel inspired
    by the life of Charlotte Perkins Gilman, showcased his continued ability
    to inhabit the perspectives of diverse characters and to grapple with
    issues of gender, class, and societal expectations.

    Throughout his career, Edmund White has remained a vital and influential
    voice in American literature. His unflinching honesty, lyrical prose, and
    ongoing exploration of identity and desire have consistently challenged
    readers and broadened the landscape of literary representation. He has not
    only chronicled his own journey but has also helped to illuminate the
    experiences of countless others.

    gemma3/27b

    Edmund White is arguably one of the most important American novelists and
    essayists to emerge in the late 20th and early 21st centuries, largely
    credited with pioneering a new frankness in gay literature. His career is
    marked by a persistent exploration of desire, memory, and the complexities
    of identity, often through a distinctly autobiographical lens.

    White began publishing in the 1970s, a period when openly gay fiction was
    still relatively rare. His early novels, like A Boy’s Own Story (1982),
    were groundbreaking for their unflinching portrayal of a young boy coming
    to terms with his homosexuality. Told through the voice of a young
    protagonist navigating childhood and adolescence, it broke ground by
    presenting gay desire not as a pathology or tragedy, but as a natural, if
    sometimes complicated, part of life. This novel established several key
    themes that would recur throughout his work: the exploration of desire as
    a driving force, the power of memory, and the often-painful process of
    self-discovery.

    Following A Boy’s Own Story, White published The Beautiful Room Is Empty (1985), a sequel that continued to chart the protagonist’s journey
    into adulthood and the search for love and acceptance. This novel deepened
    his exploration of the emotional and psychological landscape of gay life,
    tackling themes of isolation, longing, and the challenges of finding
    lasting connection.

    His work took a different turn with The Farewell Tour (1993), a
    fictionalized account of a closeted film star, and the subsequent novels
    Bonfire (1998) and The Married Man (2000). These novels moved away
    from the coming-of-age narrative and explored the complexities of love,
    desire, and commitment within established relationships, often involving
    characters grappling with the tension between public persona and private
    truth.

    Beyond fiction, White has also made significant contributions as a
    memoirist and essayist. His memoir, My Lives (1981), was a critical and
    commercial success, offering a candid and introspective account of his
    upbringing, sexual awakening, and literary ambitions. It’s known for its
    unflinching honesty and elegant prose. He’s continued to publish memoirs
    and essays, reflecting on his life, work, and the evolution of gay
    culture.

    A key aspect of White’s career is his willingness to challenge
    conventional literary boundaries. He often blends fiction and
    autobiography, blurring the lines between personal experience and
    imaginative creation. He’s been criticized for this perceived
    self-indulgence, but his defenders argue that this blending is essential
    to his artistic vision and allows him to explore universal themes of
    identity, desire, and memory with exceptional depth and nuance.

    Throughout his career, Edmund White has remained a vital and influential
    voice in contemporary literature. His work has been praised for its
    emotional honesty, stylistic elegance, and its unwavering commitment to
    exploring the complexities of the human heart and the enduring search for
    self-discovery. He paved the way for a more open and honest portrayal of
    gay lives in literature, and his influence can be seen in the work of many
    contemporary writers.