LINUX.ORG.RU

Сообщения 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
()

Как 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
()

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

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

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 ]

 list comprehension,

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
()

Неожиданная проблема КОИ-7

https://youtu.be/dKf35M_-G7k?t=1416

В советском портативном компьютере МК-90, как оказалось, использовали кодировку КОИ-7 и переключались между русской и английской кодовыми таблицами, посылая спецсимвол для смены языка. Это приводило к забавному багу, когда русские кавычки в программе переключали на русский шрифт всю ОС.

 ,

question4
()

Неожиданная фича

Только что обнаружил, что если в Konsole навести курсор мыши на английское слово, обозначающее цвет, покажет большой квадрат этого цвета. Регистр значения не имеет. Если слово не влазит в строку и переносится, то тоже опознаётся. Из сотен цветов на https://en.wikipedia.org/wiki/List_of_colors_(compact) поддерживаются всего 54 — только в 1 слово, и то не все:

Aqua Aquamarine Azure Beige Bisque Black Blue Brown Burlywood Chartreuse Chocolate Coral Cornsilk Crimson Cyan Firebrick Fuchsia Gainsboro Gold Goldenrod Gray Green Honeydew Indigo Ivory Khaki Lavender Lime Linen Magenta Maroon Moccasin Olive Orange Orchid Peru Pink Plum Purple Red Salmon Seashell Sienna Silver Snow Tan Teal Thistle Tomato Turquoise Violet Wheat White Yellow

Поискав в сети, узнал, что это работает и в Yakuake. Кроме того, работает для 16-ричных обозначений цветов вида #123456.

P.S. Написание «Grey» тоже поддерживается. Итого 55.

P.P.S. KivApple подсказывает, что цвета взяты из стандарта CSS. Итого 147 слов (1 не поддерживается) для 138 цветов (7 — варианты написания gray-grey, плюс синонимы aqua-cyan, fuchsia-magenta):

AliceBlue AntiqueWhite Aqua Aquamarine Azure Beige Bisque Black BlanchedAlmond Blue BlueViolet Brown BurlyWood CadetBlue Chartreuse Chocolate Coral CornflowerBlue Cornsilk Crimson Cyan DarkBlue DarkCyan DarkGoldenRod DarkGray DarkGrey DarkGreen DarkKhaki DarkMagenta DarkOliveGreen DarkOrange DarkOrchid DarkRed DarkSalmon DarkSeaGreen DarkSlateBlue DarkSlateGray DarkSlateGrey DarkTurquoise DarkViolet DeepPink DeepSkyBlue DimGray DimGrey DodgerBlue FireBrick FloralWhite ForestGreen Fuchsia Gainsboro GhostWhite Gold GoldenRod Gray Grey Green GreenYellow HoneyDew HotPink IndianRed Indigo Ivory Khaki Lavender LavenderBlush LawnGreen LemonChiffon LightBlue LightCoral LightCyan LightGoldenRodYellow LightGray LightGrey LightGreen LightPink LightSalmon LightSeaGreen LightSkyBlue LightSlateGray LightSlateGrey LightSteelBlue LightYellow Lime LimeGreen Linen Magenta Maroon MediumAquaMarine MediumBlue MediumOrchid MediumPurple MediumSeaGreen MediumSlateBlue MediumSpringGreen MediumTurquoise MediumVioletRed MidnightBlue MintCream MistyRose Moccasin NavajoWhite Navy OldLace Olive OliveDrab Orange OrangeRed Orchid PaleGoldenRod PaleGreen PaleTurquoise PaleVioletRed PapayaWhip PeachPuff Peru Pink Plum PowderBlue Purple Red RosyBrown RoyalBlue SaddleBrown Salmon SandyBrown SeaGreen SeaShell Sienna Silver SkyBlue SlateBlue SlateGray SlateGrey Snow SpringGreen SteelBlue Tan Teal Thistle Tomato Turquoise Violet Wheat White WhiteSmoke Yellow YellowGreen

 , , ,

question4
()

MS Teams падает при входящих звонках

Включаю «Make a test call», начинается сигнал входящего звонка от Echo, и через долю секунды программа перезапускается, даже не успеваю нажать кнопку ответа на звонок. При запуске из консоли ничего не пишет, в dmesg иногда появляется строка traps: teams[23357] general protection fault ip:7f2a5aad5da4 sp:7f2a818e9298 error:0 in slimcore.node[7f2a581b1000+3357000] (адреса варьируются). Аналогично при подключениях к групповым митингам. Gentoo, ALSA, net-im/teams-1.5.00.10453, USE=«-swiftshader -system-ffmpeg».

Решаемо? Куда копать?

 ,

question4
()

Ubuntu 22.04

В нормальных дистрибутивах есть фича, что после 5 минут неактивности лочит скрин и запрашивает пароль.

В Ubuntu 22.04 лочит и запрашивает пароль каждые 5 минут вне зависимости от активности пользователя.

А, нет. Это DE падает. Каждые 5 минут. С закрытием всех программ.

По крайней мере, в VirtualBox.

P.S. Как выяснилось, по умолчанию VirtualBox выделяет на 64-битную Убунту 1 гигабайт памяти. Поднял память до 4, и уже полчаса ни единого перезапуска.

 ,

question4
()

RSS подписка на новые темы