LINUX.ORG.RU

Сообщения question4

 

Как это работает?

 ,

Пытаюсь качать книги из Z-library. Там ограничение по числу скачиваний в сутки на IP. Попытка засчитывается вне зависимости от успешности скачивания. Поэтому на 30-мегабайтный PDF можно потратить все попытки.

Попробовал через Tor Browser по адресу в *.onion. Получаю сообщение

Daily limit reached
There are more than 5 downloads from your IP 127.0.0.1 during last 24 hours.

Получается, 5 файлов в сутки на всех пользователей ТОР-а?

Или что-то можно изменить в настройках браузера?

question4
()

gitlab.io заблокирован

 

Основание — постановление Генпрокуратуры 27-31-2020/Ид2145-22 от 24.02.2022. О недостоверной информации об СВО.

P.S. gitlab.com доступен.

question4
()

Floor796 не приносили?

 

Наткнулся на «залипательную гифку»: https://floor796.com/ Состоит из отсылок к известным фильмам, играм, мультфильмам и мемам.

На самом деле, это оказалось не GIF-ом. Сайт использует оригинальный формат для сжатия изображений: https://habr.com/ru/company/floor796/blog/673318/ С учётом специфики анимации такой вариант 254-цветного RLE по объёму близок к WebM и MP4, но выглядит лучше.

Объём всех кусков — более гигабайта, кто за трафик платит — будьте осторожны.

question4
()

Автоматизация LibreOffice

 , , ,

Имеется большой текст с несложным форматированием, разбитый на 100 ~1000 глав. Нужно каждую главу сохранить в отдельный файл docx (формат MS Office). В текст будут вноситься правки. Нужно будет сохранять исправленные главы.

Можно ли как-то автоматизировать это разбиение на много мелких файлов?

question4
()

Clang не смог собрать Фаерфокс

 , , , ,

https://bugs.gentoo.org/838373

Решил обновить мир, а там такой клубок зависимостей, что давно не обновлявшиеся браузеры мешают что-либо обновлять. Удалил их, начал обновление, и остался на выходные без браузера на десктопе. Потому что Clang не может собрать Firefox, если процессор недостаточно поддерживает SSE4. Надо принудительно отключать Clang и пользоваться GCC, который в полтора раза медленнее.

question4
()

Поиск похожих картинок

 

Недавно всплывал вопрос о поиске одинаковых картинок. Я хотел применить ImageMagick, но сломал голову его инструкцией и решил начать с решения попримитивнее. Питон 3.10 с установленными пакетами NumPy, Pillow и python-magic. Каждая картинка конвертируется в 24-битную 20x20, затем считается евклидово расстояние между каждой парой картинок (как корень из суммы квадратов разностей для каждого байта). Дефолтное MAX_IMAGE_PIXELS оказалось недостаточным для крупных сканов. Для простоты ограничился типами PNG, JPEG и GIF и файлами только в текущей директории — если нужно что-то сложнее, os.listdir() нужно заменить на соответствующий список или генератор, например, [os.path.join(root, file) for root, dirs, files in os.walk(os.getcwd()) for file in files] или [r + '/' + f for r, _, files in os.walk('.') for f in files].

import os, magic
import numpy as np
from PIL import Image

thumb_size = 20
max_distance = ( 256**2 * thumb_size**2 * 3 )**0.5  
allow_magic = {'PNG image ', 'JPEG image', 'GIF image '}
Image.MAX_IMAGE_PIXELS = 400_000_000

names = sorted( name for name in os.listdir() if os.path.isfile(name) and magic.from_file(name)[:10] in allow_magic )
thumbs = [ Image.open(name).convert(mode='RGB').resize((thumb_size, thumb_size)) for name in names ]
td = [ np.frombuffer(thumb.tobytes(), dtype=np.int8) for thumb in thumbs ]

table = np.full((len(names), len(names)), max_distance, dtype=np.float64)
for nout, hout in enumerate(td):
    for nin, hin in enumerate(td[nout+1:]): 
        table[nout, nin + nout + 1] = np.linalg.norm(hout - hin)

Для идентичных картинок расстояние равно нулю. Для отличающихся размером и артефактами сжатия — существенно меньше 100. Пока ни разу не видел расстояния больше 3500.

Дальше нужно просматривать похожие пары. Дефолтный просмотрщик меня не устроил, поэтому nomacs. Для нулей я вызывал

m = table.min(); r = np.where(table == m); print(m, r);
for x, y in zip(r[0], r[1]): print(names[x], names[y]); os.system( f'nomacs "{names[x]}" & nomacs "{names[y]}"' )

А разобравшись с файлами, заменил все нули на недостижимо большую величину:

table[r] = max_distance

Для расстояний больше 0 вручную повторял однострочник

table[r] = max_distance; m = table.min(); r = np.where(table == m); print(m, r); x, y = r[0]; names[x], names[y]; os.system( f'nomacs "{names[x]}" & nomacs "{names[y]}"'

пока не надоело. В принципе, в таблице могут найтись одинаковые расстояния, поэтому вручную контролировал, что в r вернуло только 1 пару номеров, но этого не произошло.

Для 20 000 картинок, из которых большинство размером 100-1000 пикселов, и которые прочлись в кеш, время вычисления на 1,8 ГГц ядре:
name (определяется magic.from_file) — 10 с,
thumbs (Image.open + Image.convert + Image.resize) — 272 c,
td (np.frombuffer + thumb.tobytes) — 0,3 с,
table — 3276 c.

Как-то улучшить можно? Ускорить?

question4
()

xbuild не собирает проект

 

Пытаюсь собрать uTinyRipperConsole из https://github.com/mafaca/UtinyRipper . По команде xbuild uTinyRipperConsole.csproj получаю ошибку: The default XML namespace of the project must be the MSBuild XML namespace. If the project is authored in the MSBuild 2003 format, please add xmlns="http://schemas.microsoft.com/developer/msbuild/2003" to the <Project> element. Но эта строка в конфиге есть.

То же с ключом /verbosity:diagnostic: https://pastebin.com/T1RF7Cqq

В чём проблема?

Заодно ещё пара вопросов:

В каком пакете в Gentoo находится msbuild?

Почему встроенная подсказка xbuild показывает ключи, начинающиеся с -, но работают только ключи с / ?

question4
()

Absoft Fortran-ом кто-нибудь ещё пользуется? Закрылись.

 

Сабж. https://www.absoft.com

Рылся на старых дисках, нашёл старую лицензию, полез по ссылке, и вспомнил, что пользовался им 15 лет назад.

question4
()

Поддержка JPEG2000 в Qt

 , ,

Кто-нибудь может объяснить, как с этим сейчас дела? Нашёл только плагин https://code.qt.io/cgit/qt/qtimageformats.git/tree/src/plugins/imageformats/jp2/qjp2handler.cpp , который зависит от Jasper, который в том же 2016 году начали выкидывать из всех дистрибутивов, вроде бы из-за падучести 64-битного порта, который никто не хотел допиливать.

https://github.com/jasper-software/jasper/tree/master/src/libjasper/include/jasper и https://gpo.zugaina.org/AJAX/Ebuild/53708060/View пригодны к использованию? Если да, как пересобрать Qt? Gentoo.

Или есть другой способ получить поддержку JPEG2000 во всех Qt-приложениях?

question4
()

Postgres Professional набирает технических консультантов из бывших работников Oracle

 ,

Группа Linux в России

Марк Ривкин — известный эксперт по СУБД Oraсle, который стоял у истоков создания представительства Oracle в России, работал там с 1996 года и дошёл до должности директора отдела технического консалтинга. Теперь он и его команда экспертов-консультантов займутся продвижением и развитием СУБД Postgres Pro.

Ривкин сказал, что они будут концентрироваться на импортозамещении в условиях санкций. Имея в виду миграцию с Oracle на Postgres Pro.

Новость на сайте CNews

>>> Новость на сайте Postgres Pro (postgrespro.ru)

question4
()

Как Remmina, но Qt/KDE

 , , , тулкитосрач

Долго пользовался KRDC. Потом перепробовал несколько клиентов RDP, и самым удобным оказался Remmina. Захват клавиатуры, смена разрешения — всё сделано самым удобным образом.

А нет ли такого же, но на Qt? :) Можно с привязкой к KDE, можно без.

question4
()

Управлять GSM/EDGE/3G/4G из скрипта в Termux

 , ,

Есть скрипт на Питоне, который качает текстовые файлы с сайта. После 300 файлов IP блокируется на сутки и новых файлов читать не может. Поэтому я поставил этот скрипт на смартфон (терминал Termux, рута нет) и после каждых 300 файлов вручную выключаю-включаю мобильный интернет. Из пула берётся другой адрес и можно качать дальше.

Вопрос: как автоматизировать это переподключение? В Termux:API ничего подходящего не нашёл.

question4
()

Ноутбук «Гравитон Н15И-К2»

 ,

  • Процессор i5 8259U с возможностью замены на i3 или i7 8 или 10 поколений.
  • Интегрированное видео Intel Iris Plus Graphics 655.
  • Память 8 Гб DDR4 с возможностью расширения до 32 Гб.
  • Диск 256 Гб SSD, M.2. Опционально до 2 Тб.
  • Экран 15.6" (39,62 см) 1920х1080.
  • WiFi, HDMI, D-Sub, USB 3, Ethernet, наушники + микрофон, SDXC, BlueTooth.
  • ОС: Alt Linux, AlterOS, Astra Linux, Calculate Linux, РЕД ОС, Windows 10.
  • Обещают наличие всех драйверов в апстриме.
  • Размер 25х37х2,5 см. Масса 1,7 кг. Блок питания около 1 кг(?).
  • Питание 19 В, 2,1 А. Энергопотребление от сети 40 Вт. Аккумуляторы: 6000 мА-ч, 45,6 Вт-ч, 7,6 В. Что бы это ни значило.
  • Цена от 65 000 р.

https://zen.yandex.ru/media/vilianov_com/obzor-rossiiskogo-noutbuka-graviton-n15i-tak-vot-ty-kakoe-importozamescenie-62b192ce90520a31876b570a

https://www.computermarket.ru/main/catalog/catid/1880324.aspx

https://www.kns.ru/product/noutbuk-graviton-n15i-k2/

https://graviton.ru/podderzhka/dokumentatsiya-i-marketingovye-materialy/klientskie-sistemy/

https://graviton.ru/attachments/get/61/broshyura_noutbuk_n15i_k2_web.pdf

https://graviton.ru/attachments/get/73/tekhnicheskiy-pasport-noutbuk-graviton.pdf

https://graviton.ru/attachments/get/86/rukovodstvo-po-ekspluatatsii-noutbuk-graviton-.pdf

Кто-нибудь пробовал?

question4
()

Как превратить линейный список в список списков (таблицу)?

 

Есть список строк:

list1 = '''1
первое название
2:23
автор такой-то
2
следующее название
1:09
автор сякой-то'''.split('\n')

(Разумеется, строк гораздо больше.) Нужно превратить его в «таблицу»:

[['1', 'первое название',   '2:23', 'автор такой-то'],
 ['2', 'следующее название', '1:09', 'автор сякой-то']]

Желательно список списков, а не список кортежей, чтобы было проще менять элементы. Число строк кратно 4, либо можно отбросить лишние.

Почти сразу нашёл в сети красивое решение:

list2 = list( zip( * [iter(list1)] * 4 ) )

которое даёт именно список кортежей. Можно сделать

list2 = [ list(_) for _ in zip( * [iter(list1)] * 4 ) ]

Но как-то некрасиво.

Более правильные решения есть?

Ответ-однострочник:

list2 = list( map( list, zip( * [iter(list1)] * 4 ) ) )
question4
()

Глюки при создании списка

 list comprehension,

Запускаю такую последовательность команд:

import os

stoplist = [os.path.expanduser('~') + '/.cache/', os.path.expanduser('~') + '/.mozilla/']

def is_in_stoplist(a):
    for e in stoplist:
        if a.startswith(e): return True
    return False

filelist = [ os.path.join(r, f) for r, d, files in os.walk(os.path.expanduser('~')) for f in files if not is_in_stoplist(f) ]

Она должна составить список всех файлов в домашней директории вне ~/.cache и ~/.mozilla

Затем делаю len([f for f in filelist if f.startswith(stoplist[1])]) и получаю ~3000.

Повторное filelist = [f for f in filelist if not is_in_stoplist(f)] убирает все вхождения ~/.mozilla и ~/.cache.

Почему при первом прогоне не срабатывает?

Ответ: потому что в этой точке f — только часть имени. Или нужно вызывать is_in_stoplist(os.path.join(r, f)), или вообще фильтровать сразу root:

import os

stoplist = [os.path.expanduser('~') + '/.cache', os.path.expanduser('~') + '/.mozilla']

def is_in_stoplist(a):
    for e in stoplist:
        if a.startswith(e): return True
    return False

filelist = [ os.path.join(root, f) for root, d, files in os.walk(os.path.expanduser('~')) if not is_in_stoplist(root) for f in files ]
question4
()

OCR в браузере

 ,

В связи с распространением практики постить скриншоты текста возник вопрос. Сохранять сотни килобайт вместо десятков байт расточительно. Есть ли удобное дополнение к браузеру, которое бы распознавало текст и сохраняло текстовый файл? Или копировало текст в буфер обмена. Или, ещё лучше, сыпало весь текст в один текстовый файл с пометками дата-время-URL. Есть такое?

Желательно, чтобы оно было доступно и на десктопном Firefox (который у меня основной), и на андроидном Firefox, и на десктопном Chrome. Но можно 3 разных.

Пока перебираю, что нашёл поиском…

P.S. Важное дополнительное требование. Сохранение фоновой картинки в десктопных браузерах делается через задницу, а в мобильных ещё сложнее. Но такой способ вёрстки сайтов почему-то набирает популярность. Поэтому дополнение должно уметь распознавать текст в фоновых изображениях.

question4
()

Как работают python -W и PYTHONWARNINGS?

 

Есть заблокированный сайт. Есть прокси, который быстрый и доступный, потому что делает что-то нехорошее с HTTPS-трафиком. Есть программа gallery-dl, которая может скачать с сайта всё, интересующее меня. Но когда прокси подсовывает самоподписанный сертификат вместо настоящего, она сыпет предупреждениями InsecureRequestWarning, среди которых теряются реальные ошибки. Но и первое появление InsecureRequestWarning тоже желательно видеть.

Как я понял https://docs.python.org/3/using/cmdline.html#cmdoption-w , такую проблему можно исправить, запуская питон с ключом -W и параметром once::InsecureRequestWarning. А https://docs.python.org/3/using/cmdline.html#envvar-PYTHONWARNINGS говорит, что можно эти параметры перечислить через запятую в переменной PYTHONWARNINGS. Попробовал:

$ export PYTHONWARNINGS='once::InsecureRequestWarning'
$ gallery-dl --cookies ... --proxy ... --no-check-certificate --download-archive ... <URLы>
Invalid -W option ignored: unknown warning category: 'InsecureRequestWarning'
[1/22] https://...
[modulename][info] no username given; using modulename.org
/usr/lib/python3.9/site-packages/urllib3/connectionpool.py:1043: InsecureRequestWarning: Unverified HTTPS request is being made to host 'qwertyu.lkjhgfdsamnb.zxcv.network'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html#ssl-warnings
  warnings.warn(

Вопрос: почему не опознаётся категория? Как отключить эти предупреждения? Помимо голого «once».

P.S. Запустить python -m gallery-dl нельзя, так как там отсутствует __main__, поэтому оно запускается скриптом-обёрткой.

Ответ: для обработки проблем в библиотеках ничего лучше фильтрования по началу текста ошибки не предложили: $ export PYTHONWARNINGS='once:Unverified HTTPS request'

question4
()

Подключение к VPN через Mikrotik

 , ,

Есть роутер Mikrotik, RouterOS v6.49.6 (stable). Требуется подключиться к серверу sstp.oshkontora.ru и через него работать с серверами в доменах oshkontora.ru и oshkontora.uk. Это 2 диапазона по 255 адресов: a.b.c.0/24 и d.e.f.0/24. Как это сделать?

В интерфейсе роутера создал «SSTP Client», в Connect To прописал IP от sstp.oshkontora.ru, ввёл логин и пароль, в Allow отключил mschap1, chap и pap, нажал Apply, убедился, что подключилось. Где прописать маршруты?

Что даёт чекбокс Add Default Route?

Что означает строка Local Address? Шлюз, через который доступен SSTP? Там сейчас 192.168.30.11 (роутер на 192.168.88.1, сам компьютер 192.168.88.254).

После этого FTP и RDP не заработали. Тогда я и обратил внимание на Local Address. Попробовал вручную прописать route add -net a.b.c.0 netmask 255.255.255.0 gw 192.168.30.11 Не помогло — ошибка SIOCADDRT: Network is unreachable.

Как настроить?

question4
()

ImageMagick и WebP

 , ,

Сконвертировал пачку PNG в WebP:

for f in *.png; do convert $f subdir/$f.webp; done

Результат не понравился — хорошо видны прямоугольные артефакты. Попробовал варьировать качество:

for f in *.png; do convert $f -quality 50 subdir/$f.webp; done
for f in *.png; do convert $f -quality 90 subdir/$f.webp; done
for f in *.png; do convert $f -quality 99 subdir/$f.webp; done
for f in *.png; do convert $f -quality 10 subdir/$f.webp; done
for f in *.png; do convert $f -define webp:lossless=true subdir/$f.webp; done

Во всех случаях получаются идентичные файлы. В чём проблема? Как задать качество?

Ответ: В Gentoo по умолчанию media-gfx/imagemagick собирается с USE="-webp". Но это означает не полное отсутствие поддержки, а использование каких-то захардкоженых параметров. Пересборка с USE="webp" помогла.

question4
()

Новые ограничения на редактирование стартового поста?

 

Узнал кое-какие детали по вопросу, который задавал на форуме в апреле. Хотел добавить информацию в стартовый пост и не обнаружил ссылку на редактирование. Как за 4 года изменилась работа со startx и ~/.xinitrc? Какое сейчас сделали ограничение по времени?

question4
()