GitHub 잔디밭에 풀글씨를 그려주세요.
GitHub 잔디밭에 풀글씨를 그려주세요.
입문
GitHub의 contribution graph, 즉 잔디밭에 그림을 그리고 글씨를 쓰는 유명한 게임이다.
나는 각양각색의 도구와 서비스 등을 가지고 싶다. 나도 한번 해 보고 싶다.
그때 알아본 거 적어놓을게요.
참고로 일반적인 일본어에서'초문자'는'초자'라고 불리며 초서체를 가리키는 문자로 여기서 잔디밭에 묘사된 문자, 즉 꽃문자(banner)의 초판본은'초문자'라고 불린다.
어떻게 풀을 심는가
GitHub의 contribution graph는 GitHub의 간단한 화면에 표시된 달력과 유사합니다. 기본 지점, github-pages 지점 제출, pull request 또는 issue 창설 등 이벤트를 진행할 때 그날 색깔이 짙어집니다.
On your profile page, certain actions count as contributions:
Commits will appear on your contributions graph if they meet all of the following conditions:
또한 다음 중 하나는 반드시 부합되어야 한다.
In addition, at least one of the following must be true:
Commit was made less than 24 hours ago
또한 제출 후 (push가 서버에 도착한 후?)최대 24시간을 기다려야 할 것 같습니다.시도할 때 거의 바로 반영되지만 상황에 따라 느려질 수 있다.
On your profile page, the author date is used to calculate when a commit was made.
2019-09-01T00:00:00+0900
과2019-08-31T15:00:00+0000
는 시간대만 다르고 같은 시기이지만 contribution graph에서 전자의 제출은 2019-09-01, 후자의 제출은 2019-08-31로 처리된다.git 명령을 사용하여 제출할 때
--date
author 날짜를 지정할 수 있을 것 같습니다.git commit --date 2010-01-01 -m "message"
날짜의 지정은 몇 가지가 있는 것 같다.$ 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
$ 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
$ 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/YYYY
및 DD.MM.YYYY
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 명령을 실행할 때 함께 제출합니다.
나는 기본적으로 새로운 자료 파일 라이브러리를 만들어서 거기서 놀고 싶다. 끝난 후에 자료 파일 라이브러리와 함께 삭제하는 것은 번거롭지 않다.
Reference
이 문제에 관하여(GitHub 잔디밭에 풀글씨를 그려주세요.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yoshi389111/items/8cdb84100507f0ed168c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)