現在絶賛転職活動中で、SIerからWeb系への転向も視野に入れているのですが、Web系ではGitHubの内容、なかでも通称"草"と呼ばれるcontribution履歴が重視されるようです。ということは--スクリプトなどでGitHubに草を生やしまくれば、あたかもスーパーハッカーであるかのように偽装でき、いろいろな企業から引く手あまたなのでは??? (← そんなことはありません)
というわけで「GitHubに草をはやしまくるシェルスクリプト」を書いてみました。要件としては以下の通りです。
- 実行すると
fake-project
というプロジェクトが作成され、2017-01-01から2018-12-31までの2年間、そのプロジェクトに毎日コミットしたかのように見せかける。 - コミット回数は1日1回から5回まで。ただし単純なランダムではなく、コミット回数が多い日ほど少なく、逆にコミット回数が少ない日ほど多くする。
- 単純な一様分布ではなく、大きい数字ほど出づらくするような傾斜をかけるイメージ
- コミットメッセージはコミット日付をそのまま使いまわす。
以上をみたすシェルスクリプトfake.sh
は以下の通りです。
#!/bin/bash mkdir fake-project cd fake-project git init start="2017-01-01" seq 0 $(( ($(date -d "${start}+2years" +%s) - $(date -d ${start} +%s)) / (60*60*24) )) | while read day; do seq 1 $(seq 5 | tac | awk '{for(i=0;i<NR;i++) print $0}' | shuf | head -n 1) | while read hour; do timestamp="$(date -R -d ${start}+${day}days+${hour}hours)" date -d ${start}+${day}days+${hour}hours echo ${timestamp} >> fakefile git add -A git commit -m "${timestamp}" git commit --amend --date="${timestamp}" -m "${timestamp}" done done
簡単な技術解説:
date
コマンドはGNU版を利用しています。- GitHubの草はGitのAuthor Dateを見ているようなので、
git commit --amend --date=timestamp
で直前のコミットを偽装しています。 - 傾斜のかかった乱数ですが、まず注目すべきは
seq 5 | tac | awk '{for(i=0;i<NR;i++) print $0}'
。この一連のコマンドは1を5個、2を4個、… 5を1個、それぞれ標準出力に出力します。あとはこの出力をshuf
でシャッフルしているわけですね。
さてfake.sh
を実行後(完了までは数分かかります)、カレントディレクトリに作成されたfake-project
をGitHub上に作成したレポジトリにpushすると、偽装は完了。偽装前の2017年と2018年の"草"の状態は以下のようにたいへんみすぼらしいものでした。
それがなんということでしょう! fake.sh
により作成したプロジェクトをGitHubにpushするだけで、あっというまにスーパーハッカー風の草原ができあがったではありませんか!!! これで君もスーパーハッカ―だ!!! (← 違います)
作成したプロジェクト、ならびにfake.sh
は以下のリンクに設置しています。御笑覧ください(´・ω・`)