GitHub 잔디밭에 풀글씨를 그려주세요.

16414 단어 Python3GitHubPython

GitHub 잔디밭에 풀글씨를 그려주세요.


입문


GitHub의 contribution graph, 즉 잔디밭에 그림을 그리고 글씨를 쓰는 유명한 게임이다.

나는 각양각색의 도구와 서비스 등을 가지고 싶다. 나도 한번 해 보고 싶다.
그때 알아본 거 적어놓을게요.
참고로 일반적인 일본어에서'초문자'는'초자'라고 불리며 초서체를 가리키는 문자로 여기서 잔디밭에 묘사된 문자, 즉 꽃문자(banner)의 초판본은'초문자'라고 불린다.

어떻게 풀을 심는가


GitHub의 contribution graph는 GitHub의 간단한 화면에 표시된 달력과 유사합니다. 기본 지점, github-pages 지점 제출, pull request 또는 issue 창설 등 이벤트를 진행할 때 그날 색깔이 짙어집니다.
On your profile page, certain actions count as contributions:
  • Committing to a repository's default branch or gh-pages branch
  • Opening an issue
  • Proposing a pull request
  • Submitting a pull request review
  • GitHub Help: Viewing contributions on your profile
  • 또한 모든 제출은 다음 조건이 아닌 다음 조건을 충족해야 할 것 같습니다.
    Commits will appear on your contributions graph if they meet all of the following conditions:
  • The email address used for the commits is associated with your GitHub account.
  • The commits were made in a standalone repository, not a fork.
  • The commits were made:
  • In the repository's default branch (usually master)
  • In the gh-pages branch (for repositories with Project Pages sites)
  • GitHub 계정과 메일 주소가 일치해야 합니까?
    또한 다음 중 하나는 반드시 부합되어야 한다.
    In addition, at least one of the following must be true:
  • You are a collaborator on the repository or are a member of the organization that owns the repository.
  • You have forked the repository.
  • You have opened a pull request or issue in the repository.
  • You have starred the repository.
  • 보통 자신의 자료 창고를 대상으로 하기 때문에 문제가 없습니까?
    Commit was made less than 24 hours ago
    또한 제출 후 (push가 서버에 도착한 후?)최대 24시간을 기다려야 할 것 같습니다.시도할 때 거의 바로 반영되지만 상황에 따라 느려질 수 있다.
  • GitHub Help: Why are my contributions not showing up on my profile?
  • 참고로 자신의 메일 주소를 공개하기 싫은 경우 제출용 가상 메일 주소를 설정할 수 있다.어쨌든 서버 측의 전자 우편 주소 설정은 제출할 때의 전자 우편 주소와 일치해야 한다.
  • GitHub Help: Setting your commit email address
  • 또한 제출에 관해서는commitdate와authordate가 있지만contributiongraph는authordate를 사용하여 반영하는 것 같습니다.
    On your profile page, the author date is used to calculate when a commit was made.
  • GitHub Help: Troubleshooting commits on your timeline
  • 또한git의 제출 날짜는 정보로 유닉스의 총 초와 시간대가 있는데 날짜는 이 제출 시간대에 따라 판단되는 것 같다.
  • Commits use the time zone information in the commit timestamp.
  • GitHub Help: Viewing contributions on your profile
  • 즉, 2019-09-01T00:00:00+09002019-08-31T15:00:00+0000는 시간대만 다르고 같은 시기이지만 contribution graph에서 전자의 제출은 2019-09-01, 후자의 제출은 2019-08-31로 처리된다.
    git 명령을 사용하여 제출할 때 --date author 날짜를 지정할 수 있을 것 같습니다.
    git commit --date 2010-01-01 -m "message"
    
    날짜의 지정은 몇 가지가 있는 것 같다.
  • git 내부 형식의 지정.UNIX 총 초 및 시간대 지정
  • $ date -d 2018-01-01 '+%s'
    1514732400
    $ git commit --date '@1514732400+0900' --allow-empty -m "message"
    [master (root-commit) 52cb391] message
     Date: Mon Jan 1 00:00:00 2018 +0900
    
  • 는 RFC2822 형식으로 지정됩니다.
  • $ date --rfc-email -d 2018-01-02
    Tue, 02 Jan 2018 00:00:00 +0900
    $ git commit --date 'Tue, 02 Jan 2018 00:00:00 +0900' --allow-empty -m "message2"
    [master 50882e4] message2
     Date: Tue Jan 2 00:00:00 2018 +0900
    
  • ISO8601 형식을 지정합니다.이 경우 시간대를 지정하지 않고 로컬 시간대를 사용하는 것 같습니다.시간을 지정하지 않은 상태에서 현재 시간을 사용한 것 같습니다.
  • $ git commit --date '2018-01-03T00:00:00' --allow-empty -m "message3"
    [master 42cc61d] message3
     Date: Wed Jan 3 00:00:00 2018 +0900
    
  • 기타 사용 가능YYYY.MM.DD, MM/DD/YYYYDD.MM.YYYY
  • Git 공식git-commit
  • python에서 호출하면 다음과 같은 느낌이 들겠죠.import에도 앞으로 사용할 물건이 기재되어 있습니다.
    import subprocess
    from datetime import date, datetime, time, timedelta
    from typing import Dict, Iterable
    
    def do_commit(commit_datetime: datetime) -> None:
        command = [
            "git",
            "commit",
            "-qm",
            "_",
            "--allow-empty",
            "--date={}".format(commit_datetime.isoformat()),
        ]
        subprocess.check_call(command)
    

    텍스트 데이터 형식 시험


    contribution graph에서 문자를 묘사하는 데 사용되는 문자 데이터 (글꼴, 격자) 의 보유 방법을 고려합니다.
    contribution graph는 일요일부터 일주일이 세로 1열이기 때문에 세로 1열을 1byte로 설정합니다.
    예를 들어, 다음 글꼴을 준비합니다.
    fonts = {
        "H": bytes.fromhex("7f0808087f00"),
        "e": bytes.fromhex("3854541800"),
        "l": bytes.fromhex("017f00"),
        "o": bytes.fromhex("3844443800")
    }
    
    이를 바탕으로 메시지를 바이트 열로 변환합니다
    def convert_bitmap(fonts: Dict[str, bytes], message: str) -> bytes:
        bitmap = bytearray()
        for ch in message:
            if ch in fonts:
                bitmap += fonts[ch]
        return bytes(bitmap)
    
    화면에 표시하려면 다음 함수를 만들어서 호출합니다.
    def show_bitmap(bitmap: bytes) -> None:
        for i in range(7):
            mask = 1 << i
            for b in bitmap:
                ch = "#" if b & mask else " "
                print(ch, end="")
            print()
    
    >>> bitmap = convert_bitmap(fonts, "Hello")
    >>> show_bitmap(bitmap)
    #   #      ## ##
    #   #       #  #
    #   #  ##   #  #  ##
    ##### #  #  #  # #  #
    #   # ####  #  # #  #
    #   # #     #  # #  #
    #   #  ##   #  #  ##
    
    제출 시 종횡으로 순서를 바꿀 수 있습니다. 아래와 같습니다.
    def target_days(bitmap: bytes) -> Iterable[int]:
        days = 0
        for b in bitmap:
            for i in range(7):
                if b & (1 << i):
                    yield days
                days += 1
    
    
    def commit_message(start_datetime: datetime, bitmap: bytes) -> None:
        for days in target_days(bitmap):
            commit_datetime = start_datetime + timedelta(days=days)
            do_commit(commit_datetime)
    
    이번에는 사용하지 않았지만 진행 상황을 표시하려면 tqdmtarget_days(bitmap)tqdm(list(target_days(bitmap)))를 추가하면 되나요?

    텍스트 데이터 만들기


    모든 문자 데이터를 만들 힘이 없기 때문에 선인들의 성과를 빌린다.
    contribution graph의 길이는 1주일이기 때문에 7시의 자형이 필요합니다.
    일반적인 글꼴은 배열해도 문자가 붙지 않도록 설계되어 있어 세로 8점의 글꼴을 사용할 수 있다.
    찾아보니 다음의'미쿠라 글씨체'의'미쿠라 고딕'이 좋지 않나 싶어요.
    포켓몬용 글씨체로 디자인된 것 같은데 이것 좀 빌려 주세요.
    실제로 이 글씨체 데이터를 변환하여 상술한 문자 데이터를 만들어 본 곳은 이른바'전각문자'에 문제가 없다.
    이른바'반각문자'는 너무 깨진 것 같아서'미쿠라 글씨체'와 관련된 글씨체인'k6x8 글씨체'를 바탕으로 가공했다.
    이 글씨체는 가로 6점짜리로'미쿠라 글씨체'보다 폭이 더 작은 글씨체입니다. 저는'k6x8 글씨체'라는 이른바'전각문자'로 소위'반각문자'를 대체하고 싶습니다.
    그리고 세로 1열이 모두 공백 열로 채워져 비례 글꼴로 바뀐다.
    참고로 이 글꼴들의 허가증을 확인하니 내용이 상당히 자유로워 보인다.작가님과 관계자분들께 감사드립니다.

    프로그램 작성


    상술한 함수 등을 결합하여 프로그램을 만들었다.
    내 생각에 이름은 github-banner 같은 것 같지만git명령의 자명령으로 사용할 수 있도록 후반부banner에는 동명의 것이 많은 것 같아서 git-turf명령으로 한다.
    $ git turf --date "2015-12-27" "Hello,世界"
    #   #      ## ##          # # #   #####
    #   #       #  #          # # #   # # #
    #   #  ##   #  #  ##     #######  #####
    ##### #  #  #  # #  #     # # #   # # #
    #   # ####  #  # #  # ##  # ###   #####
    #   # #     #  # #  #  #  #      # # # #
    #   #  ##   #  #  ##  #   ######  #  #
    $ git push
    

    위의 예에서 1년에 아무것도 하지 않은 곳에 하루에 한 번만 하겠다는 약속을 쓰면 색깔이 상당히 짙어진다.다른 약속이 있으면 한도값이 올라가고 색깔이 옅어진다.
    물론 저장된 파일이 있으면git-turf 명령을 실행할 때 함께 제출합니다.
    나는 기본적으로 새로운 자료 파일 라이브러리를 만들어서 거기서 놀고 싶다. 끝난 후에 자료 파일 라이브러리와 함께 삭제하는 것은 번거롭지 않다.

    좋은 웹페이지 즐겨찾기