diff --git a/.gitignore b/.gitignore index b3cd03d..d609698 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,3 @@ public/ +public.tar.xz .hugo_build.lock -ftp.txt diff --git a/content/posts/2022/git-remove-remote-branch.md b/content/posts/2022/git-remove-remote-branch.md new file mode 100644 index 0000000..78166a7 --- /dev/null +++ b/content/posts/2022/git-remove-remote-branch.md @@ -0,0 +1,23 @@ +--- +title: "Git: Удалить ветку на сервере" +date: 2022-09-16T03:48:34+03:00 +draft: false +tags: [git, tips] +--- + +Для удаления определённой ветки на сервере Git, необходимо выполнить команду: + +```sh +git push --delete +``` + +Например: + +```text +git push origin --delete gh-pages + +remote: . Processing 1 references +remote: Processed 1 references in total +To git.a2s.su:iiiypuk/minecraft-launcher.git + - [deleted] gh-pages +``` diff --git a/content/posts/2022/portable-imagemagick.md b/content/posts/2022/portable-imagemagick.md new file mode 100644 index 0000000..dfb97a3 --- /dev/null +++ b/content/posts/2022/portable-imagemagick.md @@ -0,0 +1,78 @@ +--- +title: "Портативный ImageMagick в Linux" +date: 2022-09-17T22:23:58+03:00 +draft: false +tags: [guide, linux, imagemagick] +--- + +## ImageMagick +Набор программ для чтения и редактирования файлов множества графических форматов. +Является свободным и кроссплатформенным программным обеспечением. _(с) Википедия_ + +Во многих дистрибутивах продукт поставляется из коробки (скорее всего как зависимость), +однако у меня в [Porteus](http://porteus.org/) (основан на [Slackware](http://www.slackware.com/)) +пакет отсутсвует. + +Более чем начинающий пользователь ОС на базе ядра Linux +знаком с [AppImage](https://appimage.org/). + +**AppImage** - это приложения, которые запускаются в любом месте. + +На странице загрузки [ImageMagick](https://imagemagick.org/script/download.php#linux) +первым в списке представлен вариант AppImage. +Я даже не могу вспомнить, кто из разработчиков ПО +предлагал загрузить их программу в пакете AppImage +по умолчанию. + +В релизах на странице проекта на [GitHub](https://github.com/ImageMagick/ImageMagick/releases) +представлены для загрузки исключительно AppImage пакеты. +Даже в двух вариантах, собранных GCC и Clang. + +На сайте ImageMagick написано, что образ AppImage имеет открытую политику безопасности. +Они также настоятельно рекомендуют настроить политику безопасности. + +Для этого необходимо просто добавить [пользовательскую политику](https://imagemagick.org/script/security-policy.php) +безопасности в свой локальный путь, +например, `~/.config/ImageMagick/policy.xml` и проверьте с помощью этой команды: +```sh +./magick -list policy +``` + +## Использование + +В других дистрибутивах, где ImageMagick собирается из исходных кодов +доступна команда `convert`. +В сети множество примеров обработки изображений посредством этой утилиты. + +В случае использования образа AppImage необходимо запускать `convert` как аргумент. + +```sh +magick convert +``` + +## GCC or Clang + +Несмотря на то, что я загрузил **Clang** версию `ImageMagick--clang-x86_64.AppImage` (7.1.0-48) +со страницы [GitHub](https://github.com/ImageMagick/ImageMagick/releases/tag/7.1.0-48), +запуск утилиты с параметром `--version` говорить мне, что программа собрана **GCC**. + +```text +magick --version +Version: ImageMagick 7.1.0-48 Q16-HDRI x86_64 c1ca24765:20220910 https://imagemagick.org +Copyright: (C) 1999 ImageMagick Studio LLC +License: https://imagemagick.org/script/license.php +Features: Cipher DPC HDRI OpenMP(3.1) +Delegates (built-in): bzlib djvu fontconfig freetype jbig jng jpeg lcms lqr lzma openexr png raqm tiff webp x xml zlib +Compiler: gcc (4.2) +``` + +ХЗ почему так, работает и пофиг. + +## Размеры + +AppImage пакет занимает ~27MB, против ~11MB в том же ArchLinux. + +Да больше, но зато я не буду увеличивать энтропию, +тратить процессорное время и собирать из исходных кодов. + +Use AppImage, Luke ;) diff --git a/content/posts/2022/update-stanis-tits-scrap.md b/content/posts/2022/update-stanis-tits-scrap.md new file mode 100644 index 0000000..efc8792 --- /dev/null +++ b/content/posts/2022/update-stanis-tits-scrap.md @@ -0,0 +1,51 @@ +--- +title: "Обновил граббер сисек с blog.stanis.ru" +date: 2022-09-16T01:39:33+03:00 +draft: false +tags: [pet-projects, updates] +--- + +### О релизе + +[stanis-tits-scrap](https://git.a2s.su/iiiypuk/stanis-tits-scrap) - +скрипт для скачивания голых и не только девушек с блога stanis.ru. + +Из нововведений, это появилась проверка на наличие уже загруженного изображения. +Теперь сиськи не скачиваются снова, либо скачивается, +если ранее файл был загружен не полностью. + +Второе что я сделал, это восстановил работоспособность функционала +прекращения загрузки остальных файлов. +То есть программа прекращает работу, если новый изображених на сайте нет. + +Раньше это тоже как-то работало, но это было давно и не правда. +Плюс сама идея поменялась. Раньше я хотел скачать всю библиотеку сисек, +то сейчас цель просто поддерживать каталог сисек в актуальном состоянии. +Я ещё позже подумаю, как лучше всё это доделать, но пока пусть будет так. + +Добавил в проект модуль `flit`, для генерации дистрибутивов. +Но выкладывать их, пока не доведу всё до ума, я не буду. + +Изменения, которые описаны выше, доступные по тегу +[1.0.2](https://git.a2s.su/iiiypuk/stanis-tits-scrap/src/tag/1.0.2). + +Пока писал, эту заметку, в голову пришла идея, как лучше сделать всё. +Все ближайшие изменения в проекте, я оформлю на этой странице посредством обновления. +Спасибо за внимание! + +### Update 1 + +**Теперь по умолчанию скачиваются все изображения, от текущего момента, до начала.** + +Добавил в программу спиннеры в сообщение о текущем состоянии. + +Добавил аргументы программы: +`--pages` - можно указать, сколько страниц загружать. +`--directory` - изменить директорию загрузки. + +Удалён сомнительный функционал `resume`. + +Новый релиз **1.0.3** доступен +по [этой ссылке](https://git.a2s.su/iiiypuk/stanis-tits-scrap/src/tag/1.0.3). + +Сборки будут выложены в ближайшем будующем. diff --git a/content/posts/python/request-file-size.md b/content/posts/python/request-file-size.md new file mode 100644 index 0000000..d97e0e3 --- /dev/null +++ b/content/posts/python/request-file-size.md @@ -0,0 +1,116 @@ +--- +title: "Получаем размер загружаемого файла на Python" +date: 2022-09-16T01:08:53+03:00 +draft: false +tags: [python, tips] +--- + +### Введение + +Многие пишут грабберы сайтов на Python. +Я вот например [скачиваю](#) сиськи с [blog.stanis.ru](http://blog.stanis.ru/). + +Но иногда, требуется проверить, не загружен ли файл уже, до того как его скачать. + +Способов сравнения файлов существует достаточное количество, +но в рамках этого руководства я рассмотрю способ сравнения файлов по их размеру. + +### Получение размера локального файла + +В стандартной библиотеке Python, есть функция `getsize()` в модуле `os.path`. + +```python +import os.path + +if __name__ == '__main__': + file_size = os.path.getsize("./avatar.png") + + print("Size: {0} ({1})".format(file_size, type(file_size))) +``` + +Программа вернёт следующий результат: + +```text +Size: 14390 () +``` + +Однако не стоит забывать, что файла может и не быть. +По этому лучше проверять такие ситуации. + +```python +os.path.exists("./avatar/png") +``` + +### Получение размера удалённого файла + +Для работы с HTTP, +я использую модуль [requests](https://requests.readthedocs.io/en/latest/index.html). + +Каждый web-сервер, возвращает заголовки, в которых может быть полезная информация. +Для примера, получим заголовки файла [аватара](https://iiiypuk.me/avatar.png) на моём сайте. + +```python +import requests + +response = requests.get("https://iiiypuk.me/avatar.png") +print(response.headers) +``` + +Вывод будет следующий: + +```text +{ + 'Server': 'nginx/1.20.2', + 'Date': 'Thu, 15 Sep 2022 22:14:41 GMT', + 'Content-Type': 'image/png', + 'Content-Length': '14390', + 'Last-Modified': 'Fri, 08 Jul 2022 11:23:06 GMT', + 'Connection': 'keep-alive', + 'Accept-Ranges': 'bytes' +} +``` + +Нас интересует заголовок `Content-Length`. + +```python +print(response.headers['Content-Length']) +# Выхлоп: 14390 +``` + +Сравнение до боли простое: + +```python +import os.path +import requests + +if __name__ == '__main__': + local_size = os.path.getsize("./avatar.png") + + response = requests.get("https://iiiypuk.me/avatar.png") + remote_size = int(response.headers['Content-Length']) + + if local_size != remote_size: + print("Файлы разные") + print("Локальный размер: {0}\nУдалённый размер: {1}".format( + local_size, remote_size)) + else: + print("Файлы одинаковые") + +``` + +Обрати внимание, что `response.headers['Content-Length']` возвращает значение +строкой, а не целым числом. + +### ВСЁ! + +Можно скачивать файл. + +```python +import shutil +import requests + +response = requests.get("https://iiiypuk.me/avatar.png", stream=True) + +with open("./file.png", "wb") as out_image: + shutil.copyfileobj(response.raw, out_image) +``` diff --git a/ftp.txt.gpg b/ftp.txt.gpg deleted file mode 100644 index 0b86a13..0000000 Binary files a/ftp.txt.gpg and /dev/null differ diff --git a/themes/papercut/layouts/index.html b/themes/papercut/layouts/index.html index b97a897..839824a 100644 --- a/themes/papercut/layouts/index.html +++ b/themes/papercut/layouts/index.html @@ -127,7 +127,7 @@

- 🔗 + 🔗 Library parser from version.json on Minecraft JE

@@ -142,7 +142,7 @@

📫 How to reach me