Merge branch 'master' of git.a2s.su:iiiypuk/Blog
This commit is contained in:
commit
d5b29eafb3
2
.gitignore
vendored
2
.gitignore
vendored
@ -1,3 +1,3 @@
|
|||||||
public/
|
public/
|
||||||
|
public.tar.xz
|
||||||
.hugo_build.lock
|
.hugo_build.lock
|
||||||
ftp.txt
|
|
||||||
|
23
content/posts/2022/git-remove-remote-branch.md
Normal file
23
content/posts/2022/git-remove-remote-branch.md
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
---
|
||||||
|
title: "Git: Удалить ветку на сервере"
|
||||||
|
date: 2022-09-16T03:48:34+03:00
|
||||||
|
draft: false
|
||||||
|
tags: [git, tips]
|
||||||
|
---
|
||||||
|
|
||||||
|
Для удаления определённой ветки на сервере Git, необходимо выполнить команду:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
git push <remote_name> --delete <branch_name>
|
||||||
|
```
|
||||||
|
|
||||||
|
Например:
|
||||||
|
|
||||||
|
```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
|
||||||
|
```
|
78
content/posts/2022/portable-imagemagick.md
Normal file
78
content/posts/2022/portable-imagemagick.md
Normal file
@ -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 ;)
|
51
content/posts/2022/update-stanis-tits-scrap.md
Normal file
51
content/posts/2022/update-stanis-tits-scrap.md
Normal file
@ -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).
|
||||||
|
|
||||||
|
Сборки будут выложены в ближайшем будующем.
|
116
content/posts/python/request-file-size.md
Normal file
116
content/posts/python/request-file-size.md
Normal file
@ -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 (<class 'int'>)
|
||||||
|
```
|
||||||
|
|
||||||
|
Однако не стоит забывать, что файла может и не быть.
|
||||||
|
По этому лучше проверять такие ситуации.
|
||||||
|
|
||||||
|
```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)
|
||||||
|
```
|
BIN
ftp.txt.gpg
BIN
ftp.txt.gpg
Binary file not shown.
@ -127,7 +127,7 @@
|
|||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
<a class="btn btn-sm btn-outline-primary" href="https://git.a2s.su/iiiypuk/minecraft-libs-parser" target="_blank">🔗</a>
|
<a class="btn btn-sm btn-outline-primary" href="https://git.a2s.su/iiiypuk/minecraft-launcher-libs" target="_blank">🔗</a>
|
||||||
<span class="align-end lh-lg mx-2">Library parser from <span class="font-monospace rounded p-1 bg-dark text-white">version.json</span> on Minecraft JE</span>
|
<span class="align-end lh-lg mx-2">Library parser from <span class="font-monospace rounded p-1 bg-dark text-white">version.json</span> on Minecraft JE</span>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
@ -142,7 +142,7 @@
|
|||||||
<h2>📫 How to reach me</h2>
|
<h2>📫 How to reach me</h2>
|
||||||
|
|
||||||
<div class="lh-lg">
|
<div class="lh-lg">
|
||||||
<a class="text-decoration-none rounded px-2 py-1 bg-primary text-white" target="_blank" href="https://twitter.com/_iiiypuk">Twitter</a>
|
<!-- <a class="text-decoration-none rounded px-2 py-1 bg-primary text-white" target="_blank" href="https://twitter.com/_iiiypuk">Twitter</a> -->
|
||||||
<a class="text-decoration-none rounded px-2 py-1 bg-primary text-white" target="_blank" href="mailto:iiiypuk@fastmail.fm">EMail</a>
|
<a class="text-decoration-none rounded px-2 py-1 bg-primary text-white" target="_blank" href="mailto:iiiypuk@fastmail.fm">EMail</a>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
Loading…
Reference in New Issue
Block a user