Skip to content

Commit ac4c8cd

Browse files
committed
Init project
0 parents  commit ac4c8cd

6 files changed

Lines changed: 195 additions & 0 deletions

File tree

LICENSE

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
MIT License
2+
3+
Copyright (c) 2023 Mihail Preis
4+
5+
Permission is hereby granted, free of charge, to any person obtaining a copy
6+
of this software and associated documentation files (the "Software"), to deal
7+
in the Software without restriction, including without limitation the rights
8+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
copies of the Software, and to permit persons to whom the Software is
10+
furnished to do so, subject to the following conditions:
11+
12+
The above copyright notice and this permission notice shall be included in all
13+
copies or substantial portions of the Software.
14+
15+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
SOFTWARE.

README.md

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# gitdraw
2+
3+
![](image.jpg)
4+
5+
рисуем монохромные картинки с разрешением 54x7 на плашке коммитов гитхуба.
6+
7+
для работы необходим `imagemagick`!
8+
9+
для создания монохромной картинки с нужным разрешением есть скрипт `miki.sh` (монохромизация и кукож изображения точка ш) - но выглядеть это будет не айс, намного лучше будет самому собрать пихельарт в фотошопе и не парится.
10+
11+
непосредственно всё запускает `launcher.sh`, он отматывает от текущей даты 378 дней и начинает запускать скрипт для каждого дня доходя до текущей даты.
12+
13+
ядром же является `gitdraw.sh`. он принимает дату в параметрах (или ставит текущую) и:
14+
15+
- если не смог найти конфиг `.data`, выжидает до первого дня недели (на гитхубе это воскресенье) и создавая конфиг дает первую порцию коммитов в этот день
16+
17+
- для последующих запусков с существующим конфигом он инкриминирует недели (при их смене в дате) относительно года и с помощью дня недели (Y) и номера недели в году (X) (двигаясь по остатку от инкремента % 54 (ширина плашки)) берет пиксель и с помощью черной магии (обратное среднее значение rgb 0-255 приведенное биекцией в количество коммитов 1-10) вычисляет количество коммитов, которое нужно сделать в этот день.
18+
19+
всё
20+
21+
## А как?
22+
23+
1. Создаём новую репу на гитхубе.
24+
2. Берем этот код и инитим гит.
25+
3. Подсовываем свое монохромное изображение (54x7) и создаем первый коммит.
26+
4. Запускаем `launcher.sh`.
27+
5. После завершение работы скрипта пушим всё в репу.
28+
6. ![](https://cs12.pikabu.ru/post_img/big/2021/08/29/6/16302240641440345.jpg) Наслаждаемся проделанной работой как этот мужик.

gitdraw.sh

Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
#!/usr/bin/env bash
2+
export LC_NUMERIC="en_US.UTF-8"
3+
4+
CURRENT_DATE_TS=${1:-$(date +%s)}
5+
6+
IMAGE_FILE="image.jpg"
7+
CONF_FILE=".data"
8+
9+
MIN_COMMIT_COUNT=1
10+
MAX_COMMIT_COUNT=10
11+
12+
MIN_RGB=0
13+
MAX_RGB=255
14+
15+
if [ ! -f $IMAGE_FILE ]; then
16+
echo "image not be found. please create monochrome image with 54x7 size"
17+
exit 1
18+
fi
19+
20+
if ! command -v magick &> /dev/null; then
21+
echo "magick could not be found"
22+
exit 1
23+
fi
24+
25+
function _readimagepixel {
26+
PIXEL_RAW=$(magick $IMAGE_FILE -format "%[pixel:p{$1,$2}]" info:)
27+
re='srgb\(([0-9]+),([0-9]+),([0-9]+)\)'
28+
29+
if [[ $PIXEL_RAW =~ $re ]]; then
30+
RED="${BASH_REMATCH[1]}"
31+
GREEN="${BASH_REMATCH[2]}"
32+
BLUE="${BASH_REMATCH[3]}"
33+
34+
result=$(( ($RED + $GREEN + $BLUE) / 3 ))
35+
result=$(bc <<< "scale=4; ($result - $MIN_RGB) / ($MAX_RGB - $MIN_RGB) * ($MAX_COMMIT_COUNT - $MIN_COMMIT_COUNT) + $MIN_COMMIT_COUNT")
36+
result=$(printf "%.0f\n" $result)
37+
result=$(( (10 - $result) + 1 ))
38+
39+
echo "$result"
40+
else
41+
echo "$MIN_COMMIT_COUNT"
42+
fi
43+
}
44+
45+
function _flush {
46+
echo "$1" > $CONF_FILE
47+
echo "$2" >> $CONF_FILE
48+
echo "$3" >> $CONF_FILE
49+
echo "$RANDOM" >> $CONF_FILE
50+
51+
git add $CONF_FILE &> /dev/null
52+
git commit -m "$2" --date "$2" &> /dev/null
53+
}
54+
55+
if [ -f $CONF_FILE ]; then
56+
echo "conf file is exist. go go go"
57+
58+
_START_DATE=$(sed -n '1p' $CONF_FILE)
59+
_LAST_DATE=$(sed -n '2p' $CONF_FILE)
60+
_WEEK_COUNT=$(sed -n '3p' $CONF_FILE)
61+
62+
_LAST_WOY=$(date -r $_LAST_DATE +%U)
63+
_LAST_WOY=$((10#$_LAST_WOY))
64+
65+
_CURRENT_DOW=$(date -r $CURRENT_DATE_TS +%u)
66+
_CURRENT_WOY=$(date -r $CURRENT_DATE_TS +%U)
67+
_CURRENT_WOY=$((10#$_CURRENT_WOY))
68+
69+
if [ $(date -r $CURRENT_DATE_TS +%F) == $(date -r $_LAST_DATE +%F) ]; then
70+
echo "already draw today. skip."
71+
exit 0
72+
fi
73+
74+
if [[ $_CURRENT_WOY -gt $_LAST_WOY ]]; then
75+
echo "_CURRENT_WOY=$_CURRENT_WOY _LAST_WOY=$_LAST_WOY"
76+
_WEEK_COUNT=$(( $_WEEK_COUNT + ($_CURRENT_WOY - $_LAST_WOY) ))
77+
elif [[ $_CURRENT_WOY -lt $_LAST_WOY ]]; then
78+
_WEEK_COUNT=$(( $_WEEK_COUNT + 1 ))
79+
fi
80+
81+
week_count=$(( $_WEEK_COUNT % 54 ))
82+
83+
cur_dow=$_CURRENT_DOW
84+
if [[ $_CURRENT_DOW -eq 7 ]]; then
85+
cur_dow=0
86+
fi
87+
88+
commit_count=$(_readimagepixel $week_count $cur_dow)
89+
for i in $(seq 1 $commit_count); do
90+
_flush "$_START_DATE" "$(date -r $CURRENT_DATE_TS +%s)" "$_WEEK_COUNT"
91+
done
92+
echo "$commit_count"
93+
else
94+
echo "conf file not exist. check if do start"
95+
96+
if [ $(date -r $CURRENT_DATE_TS +%u) -ne 1 ]; then
97+
echo "now is not the time to start"
98+
exit 0
99+
fi
100+
101+
echo "IT'S TIME BEGIN!!1"
102+
103+
commit_count=$(_readimagepixel 0 0)
104+
for i in $(seq 1 $commit_count); do
105+
_flush "$(date -r $CURRENT_DATE_TS +%s)" "$(date -r $CURRENT_DATE_TS +%s)" 0
106+
done
107+
echo "$commit_count"
108+
fi

image.jpg

797 Bytes
Loading

launcher.sh

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
#!/usr/bin/env bash
2+
3+
_date=$(date -v -378d +%s)
4+
5+
for i in $(seq 0 377); do
6+
if [[ $i > 0 ]]; then
7+
_d=$(./gitdraw.sh $(date -r $_date -v +${i}d +%s))
8+
echo $(echo $_d | tail -n 1)
9+
else
10+
_d=$(./gitdraw.sh $(date -r $_date +%s))
11+
echo $(echo $_d | tail -n 1)
12+
fi
13+
done

miki.sh

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
#!/usr/bin/env bash
2+
3+
set -e
4+
5+
INPUT_IMAGE_FILE=$1
6+
SCRIPT_DIR=$(cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd)
7+
IMAGE_FILE="$SCRIPT_DIR/image.jpg"
8+
9+
if [ ! -f $INPUT_IMAGE_FILE ]; then
10+
echo "image not be found."
11+
exit 1
12+
fi
13+
14+
if ! command -v magick &> /dev/null; then
15+
echo "magick could not be found"
16+
exit 1
17+
fi
18+
19+
if [ -f $IMAGE_FILE ]; then
20+
rm "$IMAGE_FILE"
21+
fi
22+
23+
convert $INPUT_IMAGE_FILE -resize 54x7\! -colorspace GRAY "$IMAGE_FILE"
24+
25+
echo "done"

0 commit comments

Comments
 (0)