From: M. Taylor Saotome-Westlake Date: Sat, 7 Jan 2023 18:51:52 +0000 (-0800) Subject: memoir wordcount automation X-Git-Url: http://534655.efjtl6rk.asia/source?a=commitdiff_plain;h=be3d61e0a36e366e3985e20c58ef51225aebf976;p=Ultimately_Untrue_Thought.git memoir wordcount automation 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! --- 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)