Skip to content

imitron/rms-analytics

Repository files navigation

ΠšΡ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΊΡ‚ΠΎ Π² ΠΊΠ°ΠΌΠΏΠ°Π½ΠΈΠΈ Π·Π° ΠΎΡ‚ΠΌΠ΅Π½Ρƒ Π‘Ρ‚ΠΎΠ»Π»ΠΌΠ°Π½Π°

Кампания "Π·Π° ΠΎΡ‚ΠΌΠ΅Π½Ρƒ Π‘Ρ‚ΠΎΠ»Π»ΠΌΠ°Π½Π°", Π½Π°Ρ‡Π°Π²ΡˆΠ°ΡΡΡ с ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π² Medium (https://selamjie.medium.com/remove-richard-stallman-fec6ec210794) прСдоставляСт Π½Π°ΠΌ мноТСство интСрСсных Π΄Π°Π½Π½Ρ‹Ρ…. Π’Π°ΠΊ ΠΊΠ°ΠΊ подписаниС ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… писСм Π·Π° ΠΎΡ‚ΠΌΠ΅Π½Ρƒ (https://rms-support-letter.github.io/) ΠΈ Π² ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ Π‘Ρ‚ΠΎΠ»Π»ΠΌΠ°Π½Π° (https://rms-support-letter.github.io/) осущСствляСтся Π½Π° Π³ΠΈΡ‚Ρ…Π°Π±Π΅, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ характСристики ΠΎΠ±Π΅ΠΈΡ… сторон, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ статистичСскиС Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ доступны Ρ‡Π΅Ρ€Π΅Π· API.

Π­Ρ‚ΠΎΠΌΡƒ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π½Π° Π³ΠΈΡ‚Ρ…Π°Π±Π΅ Π·Π°Ρ‚Ρ€ΡƒΠ΄Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ "Π·Π°Π΄Π½ΠΈΠΌ числом" Π±Π΅Π· ΠΏΠΎΡ‚Π΅Ρ€ΠΈ Π½ΠΎΠ²Ρ‹Ρ… подписСй.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ прСдполоТСния ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ("X" ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π‘Ρ‚ΠΎΠ»Π»ΠΌΠ°Π½Π°, Ρ‚Π°ΠΊ ΠΈ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π΅Π³ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ):

  • ΠŸΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊΠΈ X Ρ‡Π°Ρ‰Π΅ ассоциированы с ΠΊΡ€ΡƒΠΏΠ½Ρ‹ΠΌΠΈ компаниями Ρ‡Π΅ΠΌ сторонники
  • Π‘Ρ‚ΠΎΡ€ΠΎΠ½Π½ΠΈΠΊΠΈ X Ρ‡Π°Ρ‰Π΅ ΠΈ большС коммитят ΠΊΠΎΠ΄ ΠΈ этим Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ сообщСству БПО.
  • ΠŸΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊΠΈ X Π·Π½Π°Ρ‡ΠΈΠΌΠΎ Ρ€Π΅ΠΆΠ΅ коммитят Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ со свободными лицСнзиями.
  • ΠŸΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊΠΈ X ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΡŽΡ‚ Rust (ΠΈΠ»ΠΈ JS), сторонники ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΡŽΡ‚ C (ΠΈΠ»ΠΈ C++, Python)
  • ΠŸΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊΠΈ X Π² большСй стСпСни ΡΠΎΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎ Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹, Ρƒ Π½ΠΈΡ… Π΅ΡΡ‚ΡŒ Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Ρ‹ Π² соц. сСтях, Ρ‚Π²ΠΈΡ‚Ρ‚Π΅Ρ€Π΅, ΠΎΠ½ΠΈ часто ΠΏΠΈΡˆΡƒΡ‚.
  • ΠŸΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊΠΈ X Π½Π΅ коммитят ΠΊΠΎΠ΄ ΠΏΠΎ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹ΠΌ (Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ€Π°Π±ΠΎΡ‡Π΅Π΅ врСмя, Π½Π΅ энтузиасты)
  • Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊΠΎΠ² X зарСгистрированы Π½Π° Π³ΠΈΡ‚Ρ…Π°Π±Π΅ ΠΌΠ΅Π½Π΅Π΅ ΠΏΠΎΠ»ΡƒΠ³ΠΎΠ΄Π° Π½Π°Π·Π°Π΄

ΠœΡ‹ ΠΏΠΎΠΏΡ‹Ρ‚Π°Π»ΠΈΡΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· этих ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈ ΠΏΡ€ΠΈΠ³Π»Π°ΡˆΠ°Π΅ΠΌ всСх, ΠΊΡ‚ΠΎ заинтСрСсовался, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ прСдполоТСния ΠΈ Π²Π½ΠΎΡΠΈΡ‚ΡŒ (ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ) Π»ΡŽΠ±Ρ‹Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅.

ΠœΡ‹ создали Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ (https://github.com/imitron/rms-analytics/), Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°. Π’ Π½Π΅ΠΌ ΠΆΠ΅ Π»Π΅ΠΆΠΈΡ‚ эта ΡΡ‚Π°Ρ‚ΡŒΡ, Π΅Π΅ копия Π½Π° Ρ…Π°Π±Ρ€Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ добавлСния ΠΏΡƒΠ»Π»-рСквСстов. ΠŸΡ€ΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΡΠΉΡ‚Π΅ΡΡŒ ΠΊ исслСдованию!

Π”Π°Π»Π΅Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π΄Π΅Ρ‚Π°Π»ΠΈ.

Π—Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅ ΠΎ Π½Π°ΡƒΡ‡Π½ΠΎΠΉ чСстности

Π›ΡŽΠ±Ρ‹Π΅ Π³ΠΈΠΏΠΎΡ‚Π΅Π·Ρ‹ ΠΈ Π»ΡŽΠ±Ρ‹Π΅ провСряСмыС подтвСрТдСния Π±ΡƒΠ΄ΡƒΡ‚ приняты ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π² ΡΡ‚Π°Ρ‚ΡŒΡŽ. ΠœΡ‹ Π½Π΅ считаСм Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ ΡΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΡ€Π΅Ρ‡Π°Ρ‚ нашСй ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ. ВсС ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹. ΠœΡ‹ ΠΏΡ€ΠΈΠ³Π»Π°ΡˆΠ°Π΅ΠΌ ΠΊ совмСстной Ρ€Π°Π±ΠΎΡ‚Π΅ сторонников ΠΎΠ±ΠΎΠΈΡ… ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΉ (Π΄Π°, это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ)

О ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ…

API ΠΈ докумСнтация github: https://docs.github.com/en/rest

Кампания Π·Π° ΠΎΡ‚ΠΌΠ΅Π½Ρƒ Π‘Ρ‚ΠΎΠ»Π»ΠΌΠ°Π½Π° управляСтся ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ†Π΅Π½Ρ‚Ρ€Π°

Π Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊΠΎΠ² Π‘Ρ‚ΠΎΠ»Π»ΠΌΠ°Π½Π° Π±Ρ‹Π» создан Tue 23 Mar 2021 10:42:36 AM PDT, сторонников - Tue 23 Mar 2021 01:23:39 PM PDT. Π’ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊΠΎΠ² практичСски сразу Π½Π°Ρ‡Π°Π» Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ Π½Π°Π±ΠΈΡ€Π°Ρ‚ΡŒ Π·Π²Π΅Π·Π΄Ρ‹. Π£ рСпозитория сторонников Π±Ρ‹Π» Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄, ΠΊΠΎΠ³Π΄Π° Π·Π²Π΅Π·Π΄Ρ‹ Π½Π°Π±ΠΈΡ€Π°Π»ΠΈΡΡŒ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ, Π½ΠΎ ΠΏΠΎΡ‚ΠΎΠΌ (Π²ΠΈΠ΄ΠΈΠΌΠΎ послС ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π² соц сСтях) процСсс пошСл ΠΌΠ½ΠΎΠ³ΠΎ быстрСС ΠΈ количСство Π·Π²Π΅Π·Π΄ быстро ΠΎΠ±ΠΎΠ³Π½Π°Π»ΠΎ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊΠΎΠ².

$ cat get-stars.sh
#!/bin/bash

set -ue

page=1

owner_repo=$1

while true; do
    curl -s -H "Authorization: token $GITHUB_OAUTH_" \\
        -H "Accept: application/vnd.github.v3.star+json" \\
        "<https://api.github.com/repos/$owner_repo/stargazers?per_page=100&page=$page>"| \\
        jq -r .[].starred_at_ | grep . || break
    ((page++)) || true
done

$ echo "epoch,con" >con.stars.csv
$ ./get-stars.sh 'rms-open-letter/rms-open-letter.github.io'|while read a; do date -d $a +%s; done|sort -n|cat -n|awk '{print $2","$1}' >>con.stars.csv
$ echo "epoch,pro" >pro.stars.csv
$ ./get-stars.sh 'rms-support-letter/rms-support-letter.github.io'|while read a; do date -d $a +%s; done|sort -n|cat -n|awk '{print $2","$1}' >>pro.stars.csv
$ join -t, -e '' -o auto -a1 -a2 con.stars.csv pro.stars.csv >joined.stars.csv

ΠŸΡ€ΠΈ этом спустя ΠΌΠ½ΠΎΠ³ΠΎ Π΄Π½Π΅ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ сторонников ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ Π½Π°Π±ΠΈΡ€Π°Ρ‚ΡŒ Π·Π²Π΅Π·Π΄Ρ‹, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ Ρƒ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊΠΎΠ² процСсс сильно замСдлился. Из этого ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ процСсс раскрутки ΠΈΠ½ΠΈΡ†ΠΈΠ°Ρ‚ΠΈΠ²Ρ‹ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊΠΎΠ² Π±Ρ‹Π» Π·Π°Ρ€Π°Π½Π΅Π΅ интСнсифицирован рассылкой писСм ΠΈ сообщСний Π² ΡΠΎΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… сСтях, ΠΈ замСдлился ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ доступная аудитория Π±Ρ‹Π»Π° Π²Ρ‹Π±Ρ€Π°Π½Π° ΠΈ/ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠΌΠΎΡƒΡˆΠ½ прСкратился.

Π˜Π½ΠΈΡ†ΠΈΠ°Ρ‚ΠΈΠ²Π° сторонников, ΠΏΠΎ-Π²ΠΈΠ΄ΠΈΠΌΠΎΠΌΡƒ, Π΄Π΅Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π°. Π­Ρ‚ΠΈΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΉ Ρ‚Π΅ΠΌΠΏ Π½Π°Π±ΠΎΡ€Π° Π·Π²Π΅Π·Π΄ Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΈ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π·Π²Π΅Π·Π΄Ρ‹ Π΄ΠΎ сих ΠΏΠΎΡ€ Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ - новости расходятся ΠΎΡ‚ свСТих Π²ΠΎΠ²Π»Π΅Ρ‡Π΅Π½Π½Ρ‹Ρ… участников.

ΠΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ Π² рСпозиториях сторонников ΠΈ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊΠΎΠ² Π‘Ρ‚ΠΎΠ»Π»ΠΌΠ°Π½Π°

На ΠΌΠΎΠΌΠ΅Π½Ρ‚ написания этой ΡΡ‚Π°Ρ‚ΡŒΠΈ Π±Ρ‹Π»ΠΎ 1345 ΠΊΠΎΠΌΠΈΡ‚Ρ‚Π΅Ρ€ΠΎΠ² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊΠΎΠ² ΠΈ 5000+ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‚Π΅Ρ€ΠΎΠ² сторонников. Π‘ΠΊΠ°Ρ‡ΠΈΠ²Π°Π΅ΠΌ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ²:

$ cat get-commits.py
#!/usr/bin/env python

import os
import requests
import json
import sys

repo = sys.argv[1]

headers = {'Authorization': 'token {}'.format(os.environ["GITHUB_OAUTH"])}
commits = []
page = 0
while page < 300:
    page += 1
    data = requests.get('https://api.github.com/repos/{}/commits?per_page=100&page={}'.format(repo, page), headers=headers).json()
    if len(data) == 0:
        break
    commits += data

print(json.dumps(commits, indent=4))

$ ./get-commits.py 'rms-open-letter/rms-open-letter.github.io' >con.commits.json
$ ./get-commits.py 'rms-support-letter/rms-support-letter.github.io' >pro.commits.json

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ Π½Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ количСства ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² ΠΎΡ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ с Π½Π°Ρ‡Π°Π»Π° ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΉ:

$ jq -r .[].commit.author.date pro.commits.json|sort -u|cat -n|awk '{print $2","$1}'|sed -e 's/T/ *' -e 's/Z/*' >pro.commits.csv
$ jq -r .[].commit.author.date con.commits.json|sort -u|cat -n|awk '{print $2","$1}'|sed -e 's/T/ *' -e 's/Z/*' >con.commits.csv
$ join -t, -e '' -o auto -a1 -a2 con.commits.csv pro.commits.csv >joined.commits.csv

Π’ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ сторонников Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π°ΠΊΡ‚ΠΈΠ²Π½Π΅Π΅. ΠšΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊΠΎΠ² Π·Π° послСднСС врСмя практичСски Π½Π΅ Π±Ρ‹Π»ΠΎ. Π Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ сторонников ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒΡΡ.

ΠŸΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊΠΈ Π‘Ρ‚ΠΎΠ»Π»ΠΌΠ°Π½Π° Π²Π΅Π΄ΡƒΡ‚ компанию Π² основном Π² Ρ€Π°Π±ΠΎΡ‡ΠΈΠ΅ Π΄Π½ΠΈ

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ Π½Π° распрСдСлСниС ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² ΠΏΠΎ дням Π½Π΅Π΄Π΅Π»ΠΈ.

$ jq -r .[].commit.author.date con.commits.json |./weekday-from-date.py >con.rms_commits.csv
$ jq -r .[].commit.author.date pro.commits.json |./weekday-from-date.py >pro.rms_commits.csv
$ join -t, con.rms_commits.csv pro.rms_commits.csv >joined.rms_commits.csv

AΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊΠΎΠ² Π‘Ρ‚ΠΎΠ»Π»ΠΌΠ°Π½Π° сильно сниТаСтся Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Ρ…, Π·Π°Ρ‚ΠΎ Π² срСду ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ ΠΏΠΈΠΊ. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… компаниях срСда это no meeting day.

ΠΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ сторонников Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΌΠ΅Π½Π΅Π΅ вариативная. ΠšΠΎΠΌΠΌΠΈΡ‚Ρ‹ ΡΠΎΠ²Π΅Ρ€ΡˆΠ°ΡŽΡ‚ΡΡ Π²ΠΎ всС Π΄Π½ΠΈ Π½Π΅Π΄Π΅Π»ΠΈ.

ΠŸΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊΠΈ Π‘Ρ‚ΠΎΠ»Π»ΠΌΠ°Π½Π° Ρ‡Π°Ρ‰Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈ ΡΠΎΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… сСтСй

Π‘ΠΊΠ°Ρ‡ΠΈΠ²Π°Π΅ΠΌ ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡŽΠ·Π΅Ρ€Π°, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π΅Π³ΠΎ послСдниС 100 дСйствий:

$ jq -r .[].author.login con.commits.json|sort -u >con.logins
$ jq -r .[].author.login pro.commits.json|sort -u >pro.logins
$ cat get-user-events-data.sh
#!/bin/bash

set -ue

script_dir=$(dirname $(realpath $0))

get_data() {
    local data_dir=$script_dir/$1 userdata events
    for x in $(cat $1.logins); do
        userdata=$data_dir/$x.userdata
        [ -r $userdata ] && continue
        curl -s -H "Authorization: token $GITHUB_OAUTH" "<https://api.github.com/users/$x>" >$userdata
        sleep 1
        events=$data_dir/$x.events
        [ -r $events ] && continue
        curl -s -H "Authorization: token $GITHUB_OAUTH" "<https://api.github.com/users/$x/events?per_page=100>" >$events
        sleep 1
    done
}

get_data $1

$ ./get-user-events-data.sh con
$ ./get-user-events-data.sh pro

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π΄Π°Π½Π½Ρ‹Ρ… ΡŽΠ·Π΅Ρ€Π°, Π²Ρ‹Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Ρ… ΠΈΠ· Π³ΠΈΡ‚Ρ…Π°Π±Π°:

{
  "login": "zyxw59",
  "id": 3157093,
  "node_id": "MDQ6VXNlcjMxNTcwOTM=",
  "avatar_url": "https://avatars.githubusercontent.com/u/3157093?v=4",
  "gravatar_id": "",
  "url": "https://api.github.com/users/zyxw59",
  "html_url": "https://github.com/zyxw59",
  "followers_url": "https://api.github.com/users/zyxw59/followers",
  "following_url": "https://api.github.com/users/zyxw59/following{/other_user}",
  "gists_url": "https://api.github.com/users/zyxw59/gists{/gist_id}",
  "starred_url": "https://api.github.com/users/zyxw59/starred{/owner}{/repo}",
  "subscriptions_url": "https://api.github.com/users/zyxw59/subscriptions",
  "organizations_url": "https://api.github.com/users/zyxw59/orgs",
  "repos_url": "https://api.github.com/users/zyxw59/repos",
  "events_url": "https://api.github.com/users/zyxw59/events{/privacy}",
  "received_events_url": "https://api.github.com/users/zyxw59/received_events",
  "type": "User",
  "site_admin": false,
  "name": "Emily Crandall Fleischman",
  "company": "Commure",
  "blog": "",
  "location": null,
  "email": "emilycf@mit.edu",
  "hireable": null,
  "bio": null,
  "twitter_username": null,
  "public_repos": 24,
  "public_gists": 0,
  "followers": 2,
  "following": 12,
  "created_at": "2012-12-31T05:33:30Z",
  "updated_at": "2021-03-14T01:53:51Z"
}

Π’ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π½ΠΈΠΆΠ΅ приводится ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Ρ‹ поля twitter_username>, company, bio ΠΈ blog:

ΠΏΠΎΠ»Π΅ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊ сторонник
twitter_username 31% 8%
company 48% 20%
bio 53% 31%
blog 63% 31%

ΠŸΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊΠΈ Π‘Ρ‚ΠΎΠ»Π»ΠΌΠ°Π½Π° каТутся Π±ΠΎΠ»Π΅Π΅ ΡΠΎΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎ Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌΠΈ. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ сторонники Π‘Ρ‚ΠΎΠ»Π»ΠΌΠ°Π½Π° Ρ€Π΅ΠΆΠ΅ ΡƒΡ‡Π°ΡΡ‚Π²ΡƒΡŽΡ‚ Π² ΡΠΎΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ активности (Π²Π΅Π΄ΡƒΡ‚ Π±Π»ΠΎΠ³, Ρ‚Π²ΠΈΡ‚Ρ‚Π΅Ρ€, страничку Π² ΡΠΎΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… сСтях.

ΠŸΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊΠΈ Π‘Ρ‚ΠΎΠ»Π»ΠΌΠ°Π½Π° Π°ΠΊΡ‚ΠΈΠ²Π½Π΅Π΅ Π½Π° Π³ΠΈΡ‚Ρ…Π°Π±Π΅

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ Π½Π° поля public_repos, public_gists, followers ΠΈ following:

ΠΏΠΎΠ»Π΅ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊ сторонникпротивник
average median average median
public_repos 62 34 21 9
public_gists 18 4 4 0
followers 105 23 16 2
following 308 14 1

ΠŸΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊΠΈ Π‘Ρ‚ΠΎΠ»Π»ΠΌΠ°Π½Π° Π°ΠΊΡ‚ΠΈΠ²Π½Π΅Π΅ сторонников Π½Π° Π³ΠΈΡ‚Ρ…Π°Π±Π΅. Π£ Π½ΠΈΡ… Π² срСднСм большС followers, ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅Π², ΠΎΠ½ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ Ρ‡Π°Ρ‰Π΅ фолловят Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ. Π’Π°ΠΊΠΆΠ΅ Ρƒ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊΠΎΠ² ΡΠΎΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ followers / following большС 3, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ Ρƒ сторонников ΠΎΠ½ΠΎ составляСт 1.1.

ΠŸΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊΠΈ Π‘Ρ‚ΠΎΠ»Π»ΠΌΠ°Π½Π° Π½Π΅ коммитят Π² Π³ΠΈΡ‚Ρ…Π°Π± Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Ρ…

Π’ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ ΠΏΠΎΠ»Π΅ΠΌ events_url, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ дСйствий ΡŽΠ·Π΅Ρ€ΠΎΠ².

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° дСйствия ΡŽΠ·Π΅Ρ€ΠΎΠ². Π”Π°Π½Π½Ρ‹Ρ… скачано ΠΌΠ½ΠΎΠ³ΠΎ ΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ мноТСством способов. МоТно ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ ΡŽΠ·Π΅Ρ€ΠΎΠ² ΠΏΠΎ дням Π½Π΅Π΄Π΅Π»ΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ эти Π΄Π°Π½Π½Ρ‹Π΅ ΠΊΠΎΡ€Ρ€Π΅Π»ΠΈΡ€ΡƒΡŽΡ‚ с Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒΡŽ, спСцифичной для Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅Π² "Π·Π°" ΠΈ "ΠΏΡ€ΠΎΡ‚ΠΈΠ²" Π‘Ρ‚ΠΎΠ»Π»ΠΌΠ°Π½Π°.

cat weekday-from-date.py
#!/usr/bin/env python                                                                                                                                  
                                                                                                                                                        
import datetime                                                                                                                                         
import sys                                                                                                                                              
                                                                                                                                                        
out = [0] \* 7                                                                                                                                          
total = 0                                                                                                                                               
                                                                                                                                                        
for line in sys.stdin.readlines():                                                                                                                      
    weekday = datetime.datetime.strptime(line.strip(), '%Y-%m-%dT%H:%M:%SZ').weekday()                                                                  
    out[weekday] += 1                                                                                                                                   
    total += 1                                                                                                                                          
                                                                                                                                                        
for day, count in enumerate(out):                                                                                                                       
    print("{},{}".format(day, count / total))                                                                                                           
                                                                                                                                                        
$ jq -r .[].created<sub>at</sub> con/\*.events|./weekday-from-date.py >con.event<sub>day.normalized.csv</sub>                                             
$ jq -r .[].created<sub>at</sub> pro/\*.events|./weekday-from-date.py >pro.event<sub>day.normalized.csv</sub>                                             
$ join -t, con.event<sub>day.normalized.csv</sub> pro.event<sub>day.normalized.csv</sub>  

Π’ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ Ρ‚Ρ€Π΅Π½Π΄ сохранился: Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊΠΎΠ² Ρ€Π΅Π·ΠΊΠΎ сниТаСтся Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Ρ…. МоТно ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π³ΠΈΡ‚Ρ…Π°Π± Π½Π° Ρ€Π°Π±ΠΎΡ‚Π΅ ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π½Π°Π΄ open source ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°ΠΌΠΈ Π·Π° Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Ρƒ. Если это ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²Π΅Ρ€Π½ΠΎ, ΠΈΡ… ΠΌΠ½Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ обусловлСно ΠΎΡ‚Π±ΠΎΡ€ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ проводят ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ, Π½Π°Π½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΠ΅ программистов для Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π°Π΄ open source ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°ΠΌΠΈ.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published