1_math
2_ps
3_charts
5_bash
7_js
9_prog_short
Neocities 01scrip_v1.0.1
# ATTENTION!!! switching is dangerous! see "up"
# ---------------------------------------- составляем список файлов
echo "исключена проверка 'nu'"
bd_former() { stat -c '%Y %n' `find ./* -type f`|sort| sed 's!./!!;/bd_old/d;/PP/d;/ bd$/d;/01scrip*/d;/Sub\/nu/d' > bd; };
#bd_former() { stat -c '%Y %n' `find ./* -type f`|sort| sed 's!./!!;/bd_old/d;/PP/d;/ bd$/d;/01scrip*/d' > bd; };
mv bd bd_old # защищает от дописывания новых строк в конец старого файла
rm -f up # век живи - век учись: ключ -f подавляет сообщение, если там нет up.
bd_former
# ---------------------------------------- определяем характер изменения
pirs() {
var=''
for i in `echo $1|grep html|sed -r 's!\/[^/]*\.html!\n!'|tr \ \\n| sort -u` # составляем списки директорий, в которых изменились хтмл
do
var+=$'\n'$(echo ${i/%Sub/index.html} `find $i -maxdepth 1 -name "*.html"`)
done
echo "$var" # не выводится на экран, но используется для подстановки за пределами функции
}
of=`comm -23 bd_old bd|awk '{print $2}'|sort` #удалить 2,3 поля
djof=`pirs $of`
nf=`comm -13 bd_old bd|awk '{print $2}'|sort` #удалить 1,3 поля
djnf=`pirs $nf`
for i in $nf # удаляем из старых то, что есть и в новых
do of=`echo ${of/$i/}`
done
#---------------------------------------------------
if [[ $djof != $djnf ]]
then
bash PP/nav_paster* # если есть уникальные html, то обновляем навигацию
bash PP/lin_paster*
nf=$(echo "$nf" "$djof" "$djnf"|tr \ \\n| sort -u)
rm -f bd
touch `find` # трогаем ВСЕ файлы
bd_former # обновляем bd. теперь везде - новое время.
echo "--- some navigation changes !!!----"
fi
# ---------------------------------------- формируем аплоадный скрипт
echo "`echo $of |wc -w` for deleting"
for i in $of
do
echo " $i"
echo "curl -d filenames[]=$i https://a-notes:********@neocities.org/api/delete" >> up
done
echo "`echo $nf |wc -w` for uploading"
for i in $nf
do
echo " $i"
echo "curl -sS -F $i=@$i https://a-notes:********@neocities.org/api/upload" >> up
done
echo "rm up" >> up
rm bd_old
Neocities lin_paster_v0.3
second_string_paster () {
d=${file%.html} # определяем имя файла: отрезаем .html
d=${d##*/} # и отрезаем путь
a=${file#.} # определяем путь к файлу, нaчиная с /, но без начальной точки
a=${a%/*} # и отрезаем имя
if [ $d != "index" ];
then a=${a%/*} # отрезаем последний 'Sub'
fi
c='' # будущая серединка
for i in `echo $a|grep -o "Sub"` # цикл по количеству Sub
do
b=${a##*/} # находим имя последней папки, отрезая начало пути
c="/<a href="$a">"$b$c # </a>пришиваем href=, формируем ссылку, ставим ее в начало строки
a=${a%/*/*} # отбрасываем последнюю папку и последний Sub
done
if [ $d = "index" ] # пришиваем гриву и ХВОСТИК.
then str2="<h1><a href=/>Notes"$c"</a></h1>"
else str2="<h1><a href=/>Notes"$c"/<a href=$d.html>$d</a></h1>"
fi
echo $file
sed -i "2d;1a$str2" $file # вписываем результат в файл
}
for file in `find|grep html`
do second_string_paster
done
Neocities nav_paster_v1.1
root=`pwd`
pastin() {
sed -i "3,/<hr>/c$nav <hr>" $1 # выкидываем старую навигацию ДО <hr> !!!!! --- вставляем новую (и харю)
sed -i '3{s/<a/ <a/g;s/> />\n/g}' $1 # вставляем красивые отступы и режем строку навигации на ссылки отдельными строками
}
nav_former() {
ar=`find Sub -mindepth $1 -maxdepth $1 -name '*.html' -printf '%P\n'|sort -g`
for i in $ar
do nam=${i%.html} # 'nam'- имя файла без расширения
nam=${nam%/index} # это - только для индексов!
nav+=" <a href=Sub/$i>$nam</a>" # 'nav'- уже навигация, все в одну строку
done
}
for dir in `find -name index.html` # поиск директорий, в которых лежат индексы
do # вставка идет в индекс и в файлы, лежащие в 'Sub' данной директории
cd ${dir%/index.html} # переходим в выбранную директорию (index.html отрезан!)
#echo $_ # отладка: '$_' - это последний аргумент (директория)
nav=''
nav_former 1
list=$ar
nav_former 2
pastin index.html # вставляем в индекс
nav=${nav//'Sub/'/} # модифицируем навигацию для файлов: срезаем в начале 'Sub/'
for f in $list # вставляем в файлы, лежащие в 'Sub'
do pastin Sub/$f
done
cd $root # возврат в корень. поиск директорий идет от корня.
done
Neocities gallery creator (dir must contain some '.jpg')
# this shit:
# 1) renames *.jpg in current dir and replace them into dir 'q'
# 2) resizes *.jpg dir 'q' to 100px along minimal side length and places them into dir 'q/thumbs'
# 3) forms sprite of 4 by row 'q/0.jpg' and 'index.html' with map of hrefs
#==============================================================================
if [[ ! $1 ]]; then echo "Enter the N of the gallery!"; exit; fi
picdir=$1 # the name of pics dir is its number N
rm -rf $picdir; mkdir $picdir
i=1
for f in `find -name '*.jpg'`
do mv $f ./$picdir/$i.jpg
i=$(($i+1))
done
cd $picdir
rm -rf thumbs; mkdir thumbs # thumbnails creation
mogrify -path thumbs -thumbnail 100^ -crop 100x100+0+0 -gravity Center -bordercolor Darkgrey -border 3 *.jpg
cd thumbs
N=`find -name '*.jpg' |wc -w` # count of pics and grey squares addition
n_add=$(( (4-$N%4)%4 )) # empty squares addition
for i in `seq $n_add`; do convert -size 106x106 xc:Darkgrey $(($N+$i)).jpg; done
N_new=$(($N+$n_add))
echo "добавлено файлов: $n_add, стало: $N_new"
rm -rf temp; mkdir temp # rows by 4 pics creation
for i in `seq $(($N_new/4))`
do
i0=$((4*($i-1)+1))
i1=$((4*($i-1)+2))
i2=$((4*($i-1)+3))
i3=$((4*($i-1)+4))
convert $i0.jpg $i1.jpg $i2.jpg $i3.jpg +append ./temp/$i.jpg
done
cd temp # entire sprite creation
convert `ls -tr` -append ../../0.jpg
cd ..
rm -r temp
cd ..
rm -r thumbs
cd .. # !!! index in current!
rm -f index.html # webpage creiation
echo "<!DOCTYPE html><html><meta charset=utf-8><link rel=stylesheet href=1.css>
<h1><a href=/>Notes/<a href=/Sub/nu>nu/<a href=$picdir.html>$picdir</a></h1>
<hr>
<img src=$picdir/0.jpg usemap=#map><map name=map>" >> $picdir.html
map() { # link creation function
y1=$(( $1*106+3 ))
y2=$(( $y1+100 ))
for j in `seq $2`
do
x1=$(( ($j-1)*106+3 ))
x2=$(( $x1+100 ))
hre=$(( $1*4+$j ))
echo "<area shape=rect coords='$x1,$y1, $x2,$y2' href=#1 onclick=v($N,$picdir,$hre)>" >> $picdir.html
done
}
for i in `seq $(($N/4))`; do map $(($i-1)) 4; done # links creation for full rows
map $(($N/4)) $(($N%4)) # links creation for incomplete rows
echo "</map><script src=pics.js></script>" >> $picdir.html
echo "
function u() {document.querySelector('#divan').remove()}
function v(N_pics,dir,obj) {
if (document.getElementById('divan')){u()}
const divan = document.createElement('div')
divan.setAttribute('id','divan')
function p(kuda,chto,skolko) {
const hz = document.createElement('div')
hz.setAttribute('id',kuda)
hz.setAttribute('onclick','v('+N_pics+','+dir+','+skolko+')')
hz.innerHTML = chto
divan.appendChild(hz)
}
if (obj > 1) {p('suda','‹',obj-1)}
const image = document.createElement('img')
image.src = dir+'/'+obj+'.jpg'
image.setAttribute('onclick','u()')
document.querySelector('body').appendChild(divan)
divan.appendChild(image)
if (obj < N_pics) {p('tuda','›',obj+1)}
}
" > pics.js
echo "
html {
height: 100%;
min-height: 100%;
background: #222;
}
body{ text-align: center;font: 15px Sans;}
hr {display:none}
[usemap] {
display: block;
margin: 15px auto;
border: 3px solid Darkgrey;
}
a{color: #b96; text-decoration: none;}
#divan {
width: 90%;
height: 100%;
margin: 0 5%;
position: fixed;
top: 0;
text-align: center;
background: #222;
}
#divan img {height: 100%}
#tuda, #suda {
position:absolute;
top: 40%;
font: 80px Serif;
font-weight: 100;
color: #777;
text-shadow: 0 0 5px black;
width: 30%;
height: 30%;
cursor: pointer;
}
#tuda:hover, #suda:hover {color: white; transition: 1s ease}
#tuda {right: 0}
#suda {left: 0}
" >> 1.css
Parsers
https://www.toptal.com/designers/subtlepatterns/
rm urls *.html
for i in `seq 45`
do
wget https://www.toptal.com/designers/subtlepatterns/page/$i/
sed -n '/patternpreview/p' index.html | `
`sed -e 's/^.*desi/https:\/\/www.toptal.com\/desidesi/;s/png.*/png/'>>urls
rm index.html
done
Short utilities
Timer "mimer" (without sha-bang & comments)
if ! [[ `pidof zenity` == '' ]]; then exit; fi
time="_______________"`date +%H:%M`"_______________"
str=`DISPLAY=:0 zenity --text-info --editable --title=$time --height=200 --filename note_bene`
if ! [[ $str == '' ]]; then echo $str > note_bene; fi
Random jpg demonstrator "ti-timer"
pic_dir=~/Dropbox/back_light/SITES/Notes/Sub/nu/
font=.local/share/fonts/Arial_Black.ttf
DISPLAY=:0 feh -zqrZF -e "$font/24" --info "echo `date +%H:%M`" --draw-tinted $pic_dir &
sleep 3
kill -SIGKILL %1
JPG-renamer
# this shit renames *.jpg to CORRECT names 'N.jpg' where 'N' is a number and replaces them into new dir 'q'
mkdir q
i=1
for f in `find -name '*.jpg'`
do mv $f ./q/$i.jpg
i=$(($i+1))
done
Neocities picscript
rm *.png.jpeg
picdir=~/Pictures/lili
n=1
for i in `ls $picdir | shuf -n 5`
do convert $picdir/$i -resize 200 $n.png.jpeg
((n++))
done
bash 01scrip*
bash up
Neocities diascript
input=~/Dia_2023
output=Sub/Diary/Sub/00_dia.html
sed -i '//,$d' $output
echo "" >> $output
cat $input >> $output
echo "" >> $output
bash 01scrip_v*
Neocities badw_script
a=$(echo `curl -s http://fucking-great-advice.ru/api/random`|awk -F \" '{print $6}' )
sed -i "/Совет дня: /s/дня: .*/дня: `echo ${a}`/g" index.html # подстановка переменной в сед!
head -n 20 index.html