IT already feels like "hot summer" over here; this past spring the founder of the Free Software Foundation came under a lousy attack by mostly misled people, commandeered by front groups of monopolies. They've been defaming the founder of the Free Software Foundation for a number of decades (the GNOME Foundation tried 12 years ago), but this time there seems to be some urgency in removing him. We spent many days explaining the who and the why. This isn't the subject of this post and video.
"For those who want to reproduce the charts, detailing nearly 10,000 people who signed petitions in Microsoft’s proprietary software monopoly (GitHub), the video above explains the basic steps."For those who want to reproduce the charts, detailing nearly 10,000 people who signed petitions in Microsoft's proprietary software monopoly (GitHub), the video above explains the basic steps. Here are the basic commands from the video above:
cd /tmp
rm -rf rms-open-letter.github.io
rm -rf rms-support-letter.github.io
or just
rm -rf rms-open-letter.github.io rms-support-letter.github.io
Get the latest data:
git clone https://github.com/rms-open-letter/rms-open-letter.github.io.git
git clone https://github.com/rms-support-letter/rms-support-letter.github.io.git
Now run python3 count.py
There may be missing python libraries (depending on the system), but they can be added/installed from repositories. They're widely available and used.
Here's the code from count.py
:
# author: Kezi # license: gplv3
import time import os import subprocess from threading import Thread
from datetime import datetime
start_time = 1616522054+60*60*4 stop_time = int(time.time())
path_open = "/tmp/rms-open-letter.github.io" # https://github.com/rms-open-letter/rms-open-letter.github.io.git path_support = "/tmp/rms-support-letter.github.io" # https://github.com/rms-support-letter/rms-support-letter.github.io.git
cwd = os.getcwd()
def count_open(): lol=subprocess.check_output(['sh', '-c', f"cd {path_open}; cat index.md | grep -e \"^1.\" -e \"^- \" | wc -l"]) return int(lol)
def count_support(): lol=subprocess.check_output(['sh', '-c', f"cd {path_support}; ls _data/signed/ | wc -l"]) return int(lol)
def checkout_open(date): try: subprocess.check_output(['sh', '-c', f"cd {path_open}; git checkout -f `git rev-list -n 1 --before=\"{date}\" main`"]) except: pass
def checkout_support(date): try: subprocess.check_output(['sh', '-c', f"cd {path_support}; git checkout -f `git rev-list -n 1 --before=\"{date}\" master`"]) except: pass
def time_machine(timestamp): print("time machine", datetime.fromtimestamp(timestamp), timestamp)
date=datetime.utcfromtimestamp(timestamp).strftime('%Y-%m-%d %H:%M') thread1 = Thread(target = checkout_open, args = (date, )) thread1.start() thread2 = Thread(target = checkout_support, args = (date, )) thread2.start()
thread1.join() thread2.join()
dates=[] points_open=[] points_support=[]
for i in range(start_time, stop_time, 60*5): time_machine(i)
dates.append(datetime.fromtimestamp(i)) points_open.append(count_open()) points_support.append(count_support())
import matplotlib.pyplot as plt import matplotlib.dates as md
plt.subplots_adjust(bottom=0.2) plt.xticks(rotation=25) ax = plt.gca() xfmt = md.DateFormatter('%Y-%m-%d') ax.xaxis.set_major_formatter(xfmt) plt.plot(dates, points_open, label="rms hate letter")
plt.subplots_adjust(bottom=0.2) plt.xticks(rotation=25) ax = plt.gca() xfmt = md.DateFormatter('%Y-%m-%d') ax.xaxis.set_major_formatter(xfmt) plt.plot(dates, points_support, label="rms support letter")
plt.legend() plt.show()