From be3d61e0a36e366e3985e20c58ef51225aebf976 Mon Sep 17 00:00:00 2001 From: "M. Taylor Saotome-Westlake" Date: Sat, 7 Jan 2023 10:51:52 -0800 Subject: [PATCH] memoir wordcount automation MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit This doesn't count as an accomplishment today, the second day of the new year (that I'm willing to admit to), but it's—warming up my typing fingers. Now to make the line go up! --- notes/memoir_wordcounts.csv | 52 ++++++++++++++++++++----- notes/memoir_wordcounts.py | 76 +++++++++++++++++++++++++++---------- 2 files changed, 98 insertions(+), 30 deletions(-) diff --git a/notes/memoir_wordcounts.csv b/notes/memoir_wordcounts.csv index 5aa77e6..222b03c 100644 --- a/notes/memoir_wordcounts.csv +++ b/notes/memoir_wordcounts.csv @@ -1,9 +1,43 @@ -04/30/22,6746 -05/30/22,10305 -06/30/22,13313 -07/31/22,20391 -08/28/22,36784 -09/30/22,49533 -10/30/22,66302 -11/30/22,74002 -12/22/22,74043 +03/13/2022,5961 +04/09/2022,5965 +04/21/2022,5990 +04/29/2022,6141 +05/08/2022,7392 +05/14/2022,7412 +05/15/2022,7757 +05/20/2022,8783 +05/22/2022,8682 +05/29/2022,9785 +06/04/2022,10655 +06/05/2022,11437 +06/10/2022,11537 +06/16/2022,13076 +06/26/2022,13285 +07/08/2022,13341 +07/17/2022,16167 +07/23/2022,15642 +07/23/2022,19852 +07/29/2022,18832 +08/03/2022,20388 +08/07/2022,23247 +08/14/2022,25009 +08/20/2022,26132 +08/25/2022,35059 +08/28/2022,36784 +09/03/2022,39599 +09/09/2022,41815 +09/15/2022,44858 +09/18/2022,45706 +09/25/2022,47740 +09/30/2022,49533 +10/07/2022,51922 +10/14/2022,53472 +10/20/2022,58146 +10/25/2022,62922 +10/29/2022,64086 +11/04/2022,66317 +11/06/2022,68083 +11/12/2022,69792 +11/20/2022,71859 +11/27/2022,74002 +12/16/2022,74039 diff --git a/notes/memoir_wordcounts.py b/notes/memoir_wordcounts.py index 6d2e0f9..eeb297a 100755 --- a/notes/memoir_wordcounts.py +++ b/notes/memoir_wordcounts.py @@ -1,25 +1,59 @@ #!/usr/bin/env python3 +import csv +import datetime +import re import subprocess -shas = [ - '347fe081c6', - '4681a3764a', - '867b6583c7', - 'a8b07bd83a', - 'cfdc07319c', - 'bbb4315cfe' -] - -for sha in shas: - subprocess.run(["git", "checkout", sha]) - subprocess.run("wc content/drafts/blanchards-dangerous-idea-and-the-plight-of-the-lucid-crossdreamer.md content/drafts/a-hill-of-validity-in-defense-of-meaning.md content/drafts/agreeing-with-stalin-in-ways-that-exhibit-generally-rationalist-principles.md".split()) - -# 30 Apr 347fe081c6 6746 -# 30 May 4681a3764a 10308 +3562 -# 30 Jun 867b6583c7 13313 +3005 -# 31 Jul a8b07bd83a 20391 +7078 -# 28 Aug cfdc07319c 36784 +16393 -# 30 Sep bbb4315cfe 49533 +12749 -# 30 Oct c9b6c312d1 66302 +16769 -# 30 Nov (projected) 83302?? +MONTHS = { + "Jan": 1, + "Feb": 2, + "Mar": 3, + "Apr": 4, + "May": 5, + "Jun": 6, + "Jul": 7, + "Aug": 8, + "Sep": 9, + "Oct": 10, + "Nov": 11, + "Dec": 12, +} + +def wordcount_at_this_sha(): + result = subprocess.run("wc -w content/drafts/blanchards-dangerous-idea-and-the-plight-of-the-lucid-crossdreamer.md content/drafts/a-hill-of-validity-in-defense-of-meaning.md content/drafts/if-clarity-seems-like-death-to-them.md content/drafts/agreeing-with-stalin-in-ways-that-exhibit-generally-rationalist-principles.md".split(), stdout=subprocess.PIPE) + wc_lines = result.stdout.decode('utf8').split('\n') + total_line = wc_lines[-2] # last line is empty + return int(total_line.split()[0]) + +def date_at_this_sha(): + result = subprocess.run("git show HEAD".split(), stdout=subprocess.PIPE) + show_lines = result.stdout.decode('utf8').split('\n') + dateline = show_lines[2] + match_groups = re.search("(?P\w{3}) (?P\d{1,2}) \d{2}:\d{2}:\d{2} (?P\d{4})", dateline).groupdict() + return datetime.date(int(match_groups['year']), MONTHS[match_groups['month']], int(match_groups['day'])) + + +def look_back(): + wordcounts = [] + keep_going = True + while keep_going: + subprocess.run(["git", "checkout", "HEAD~10"]) + wordcount = wordcount_at_this_sha() + date = date_at_this_sha() + if date < datetime.date(2022, 4, 1): + keep_going = False + wordcounts.append((date, wordcount)) + return sorted(wordcounts) + + +def write_csv(wordcounts): + with open("memoir_wordcounts.csv", 'w') as f: + writer = csv.writer(f) + for date, wordcount in wordcounts: + writer.writerow([date.strftime("%m/%d/%Y"), wordcount]) + + +if __name__ in "__main__": + wordcounts = look_back() + write_csv(wordcounts) -- 2.17.1