--- title: "2024 Emails" date: 2025-01-01T17:10:13-08:00 draft: true extraHeadContent: - - - - tags: - dataviz - gtd - productivity --- On a whim, I started tracking my email volume during my morning startup routine during 2024. Specifically, for each of my email accounts (gmail and proton), I recorded the number of unread emails I had at the start of the morning, and how many remained unread at the end of the routine. The _ideal_ would be for the latter number to [always be 0](https://clean.email/blog/productivity/what-is-zero-inbox). Practically speaking, I tended to aim for ensuring that I had one fewer unread email in each account than I'd ended the previous day with - acknowledging that, since I wouldn't be checking my email every day (life gets in the way!), there would be regular spikes. Anyway, here's ~~wonderwall~~ the graph[^chart-js]: {{< rawhtml >}} {{< /rawhtml >}} And filtered views of just each account {{< rawhtml >}} {{< /rawhtml >}} {{< rawhtml >}} {{< /rawhtml >}} I'm not sure what conclusions to draw from this, other than: * I didn't check my email very much (or, at least, didn't track my checking) during May and June (unsurprising, as this was the time I was dealing with my Mum's passing-away) * I received a _lot_ of emails in early July (again - unsurprising. This was mostly syncing up with interaction with the solicitors, funeral home, etc.) * I'm receiving more email on my Gmail Account than my Proton. Unsurprising once again, as I've had that account for decades (as opposed to a year or so for Protonmail) and am probably on way more mailing lists that I should probably unsubscribe from, as well as being the account associated with various accounts and ecommerce sites. I can't think why anyone _would_ - but if you want to see the code that generated this, it's here: ```python #!/usr/bin/env python3 import os import pathlib import yaml counts = {} def main(): should_hide_gmail = os.environ.get('SHOULD_HIDE_GMAIL') == 'TRUE' if not should_hide_gmail: counts['gmail-start'] = [] counts['gmail-end'] = [] should_hide_proton = os.environ.get('SHOULD_HIDE_PROTON') == 'TRUE' if not should_hide_proton: counts['proton-start'] = [] counts['proton-end'] = [] d = pathlib.Path('/Users/scubbo/Dropbox/Obsidian/scubbo-vault/GTD/Daily TODOs') for f_path in d.iterdir(): if f_path.is_dir(): continue if not f_path.name.startswith('Todo - 2024'): continue with f_path.open('r') as f: date = f_path.name[7:-3] content = f.read() data_index = content.index('# Data') start_of_data_block = data_index+content[data_index:].index('```') + 3 length_of_data_block = content[start_of_data_block:].index('```') data = yaml.safe_load(content[start_of_data_block:start_of_data_block+length_of_data_block]) if not should_hide_gmail: if gs_count := data['gmail']['start-count']: counts['gmail-start'].append({'date': date, 'count': gs_count}) if ge_count := data['gmail']['end-count']: counts['gmail-end'].append({'date': date, 'count': ge_count}) if not should_hide_proton: if ps_count := data['protonmail']['start-count']: counts['proton-start'].append({'date': date, 'count': ps_count}) if pe_count := data['protonmail']['end-count']: counts['proton-end'].append({'date': date, 'count': pe_count}) print([{'label': key, 'data': sorted(value, key=lambda x: x['date'])} for key, value in counts.items()]) if __name__ == '__main__': main() ``` Output was piped to `pbcopy`, and then hard-coded into the JS that serves this page. [^chart-js]: made with [Chart.js](https://www.chartjs.org/), which I'd already used in my [EDH ELO tracker](https://gitea.scubbo.org/scubbo/edh-elo).