Live data from Hacker News

Mining my mailbox for top email service providers

obem.be

101–110 of 110 posts

Re: Mining my mailbox for top email service providers

#101

Earlier quoted context omitted.

Not all JavaScript devs. Love the language, hate the popularity of anonymous functions and non-descriptive variable names. My production code as a sample. http://designbymobi.us/wp-content/uploads/2020/02/rabbitmq-c...

Your code sort of have the same issue. Why not define a function: function someName(p1, p2) {} and then when you need it for something, like a handler, just say: handler: someName

Hoped to show that JavaScript can be easier to read than you described.

Obviously wrong. My mistake.

Re: Mining my mailbox for top email service providers

#103

I'm wondering the legality of this... The emails in your mailbox aren't yours to do with as you please - they're all still owned by their original sender, who has given you an implicit license to read them, and store them for later re-reading. You don't really have rights to datamine, aggregate, train AI on, post stats about, etc. the data in those emails. Its a violation of the rights of the original sender to do it…

I disagree. They relinquished all rights when they hit send.

Re: Mining my mailbox for top email service providers

#104

[Nitpick] Instead of this: ;(async function () { try { // All your code } catch (e) { console.log(e) } })() Just do this: ;(async function () { // All your code })().catch(console.error) Overuse of try/catch is probably the #1 mistake I see when people use async/await.

I don't think you can assume console.error is bound. Also it's good to avoid the possibility of blindly passing through unintended extra arguments (not an issue with catch, but is with many methods such as forEach etc).

    catch(err => console.error(err))

Re: Mining my mailbox for top email service providers

#105

Semi-related: emails can often give away more information than you might intend. At one of my previous employers, it was quite easy to get a general idea of how internal development was progressing “from the outside” by keeping track of who was testing which version of a prerelease OS via proxy of the information it would leave in the emails they sent.

I've identified companies as connected to each other by enumerating domains on an azure tenancy.

Re: Mining my mailbox for top email service providers

#106
post #9

That’s really nice analysis. Mailchimp is the biggest one as I guessed. Don’t know if you count the spam folder since some marketing emails could be automatically sent there.

Not quite sure how you got that from the graphs. Top three: Sendgrid: 30.2% SES: 16.8% Mailchimp: 16.8%

Seeing Amazon's SES with such a large share is no surprise, but it is a little disheartening knowing about this limitation:

"Amazon SES only supports open tracking over HTTP domains."

https://docs.aws.amazon.com/ses/latest/DeveloperGuide/config...

Yes, big webmail providers fetch the tracking pixels for you and serve them to your browser over HTTPS, but not every mail provider does that, sometimes for good reason, leading to problems like this:

https://protonmail.com/support/knowledge-base/connection-not...

Re: Mining my mailbox for top email service providers

#107

It's interesting that this is missing a lot of major enterprise marketing email providers. The author clearly isn't subscribing to things like Best Buy's weekly deal email, or Target cart reminders.

> The author clearly isn't subscribing to things like Best Buy's weekly deal email, or Target cart reminders.

I'm subscribed to some marketing emails, but I delete them after reading them. I save transactional emails.

Re: Mining my mailbox for top email service providers

#108

Earlier quoted context omitted.

Okay, please make a little effort to understand meaning rather than taking things completely literally. Try one of the following: > ({}).foo undefined > var a = {}; undefined > a.foo undefined Now imagine hundreds of lines of code and a bunch of asynchronous callbacks occur between the last two lines, and imagine what that does for your debugging experience. Or watch Wat[1] and see if any of that is what you want you…

({}).foo returning undefined is exactly what I'd expect. That's a basic part of how accessing properties in Javascript works, and wanting it to work differently is like wanting NullPointerException generation in Java to work differently. > Now imagine hundreds of lines of code and a bunch of asynchronous callbacks occur between the last two lines, and imagine what that does for your debugging experience That's what u…

> ({}).foo returning undefined is exactly what I'd expect. That's a basic part of how accessing properties in Javascript works,

This is an excellent and succinct explanation of why JavaScript is a badly-designed language, and why I use better designed languages when possible.

If the basic properties "work" when it makes no sense for them to work, your language is broken.

> That's what using typed signatures for your objects is for.

Explain more?

Re: Mining my mailbox for top email service providers

#109

Earlier quoted context omitted.

({}).foo returning undefined is exactly what I'd expect. That's a basic part of how accessing properties in Javascript works, and wanting it to work differently is like wanting NullPointerException generation in Java to work differently. > Now imagine hundreds of lines of code and a bunch of asynchronous callbacks occur between the last two lines, and imagine what that does for your debugging experience That's what u…

> ({}).foo returning undefined is exactly what I'd expect. That's a basic part of how accessing properties in Javascript works, This is an excellent and succinct explanation of why JavaScript is a badly-designed language, and why I use better designed languages when possible. If the basic properties "work" when it makes no sense for them to work, your language is broken. > That's what using typed signatures for your…

> Explain more?

With Typescript or even just JSdoc and a good IDE, you can do:

    const a: {propertyA?: true; propertyB?: 'cats';} = {};

    // or

    /**
     * @type {object}
     * @property {true=} propertyA
     * @property {'cats'=} propertyB
     */
    const a = {};
...and get warnings later when you attempt to access anything that's not propertyA, propertyB, or a JS builtin, as well as warnings if you attempt to use either without verifying whether it's undefined or not, as well as warnings if you then try to use them in places restricted to non-matching types.

With Typescript, you can turn on full strictness and make these build-rejecting compile-time errors, too.

Re: Mining my mailbox for top email service providers

#110

Earlier quoted context omitted.

I'm not sure I could count the number of 100-line long throwaway scripts that I wrote that are still being used in production systems before I realized how dangerous that idea is and stopped treating any code as throwaway code. If I show my code to another human, there's a chance it will end up in production. The Pragmatic Programmer says to throw away prototypes, but in practice it always seems easier to click the m…

Reverse-survivor bias. You aren't seeing the non-existence all the well engineered stuff you never had time to build "properly".

So what ? You care too much about these things.
Post reply on HN