LINUX.ORG.RU

Сообщения question4

 

О зоологии и программировании

Форум — Talks

https://habr.com/ru/post/254473/

Вы неправильно пишете животных

Животные – это платформы с очень ограниченной памятью, вычислительными способностями и возможностями модификаций. Разработчикам энимал-сцены приходится выдавать практически гениальные низкоуровневые алгоритмы. Правда, большое количество хардкода вызывает характерные проблемы с отсутствием проверки в экзотических условиях. Та же фильтрация входных данных делается очень и очень криво.

Не знаю, кто писал большую часть птиц, но я хочу обратить внимание на особенность, позволяющую провести инъекцию произвольного яйца в гнездо. Дело в том, что птица проверяет только расположение и количество яиц, но не их хэши. В 20% случаев кукушка, эксплуатирующая этот баг, может внести яйцо с сохранением контрольной суммы, чего вполне достаточно для повышения прав в гнезде.

Но пойдём далее. Я не знаю, кто разрабатывал архитектуру ящериц, но они бегают в одном процессе, а дышат в другом. При этом платформа не поддерживает многозадачность, поэтому костыль с максимальной длиной бега в 4-6 секунд просто эпичен.

Да, ещё о птицах, чтобы два раза не вставать. У них насквозь кривой модуль распознавания «свой-чужой». Что позволяет провести animal-in-the-middle-атаку с помощью подстановки звука птенца. Всё, что примерно совпадает по размерам и при этом передаёт открытую часть ключа, нужно покормить. Похожий баг есть у некоторых грызунов, что позволяет предположить проблемы с общей библиотечной функцией.

Теперь муравьи. Муравьёв довольно легко зациклить. Навигационный блок у них совмещён с системой приоритетов ОС, поэтому при построении циклического маршрута образуется «спираль смерти», затягивающая всё больше и больше ресурсов муравейника – и всё это зависает на 3-4 дня, пока муравьи не погибнут от истощения или что-то снаружи не поменяет навигацию.

Спираль будет забирать всё больше муравьёв из доступных источников, пока приоритеты не поменяет внешнее событие или муравьи не умрут

А вот страус – вершина оптимизации. То, как именно в него впихнули пищеварение, вообще достойно войти в «Жемчужины программирования». Чтобы эта птичка нормально переваривала пищу, разработчик придумал заставить его натурально жрать камни. При беге камни трясутся и перемалывают зёрна. Теперь самое весёлое. Чтобы не писать отдельный код для поедания камней, страусу просто взяли и отключили центральный сектор зрения (как зайцу, но там это известный минорный баг). Поэтому когда страус целится в зерно, он попадает только в 30-50% случаев. Что легко позволяет набирать нужное количество камней, да ещё и с запасом. Именно поэтому страусы, запущенные на чистой виртуальной машине в зоопарке, испытывали проблемы с пищеварением до появления поддержки камней на уровне гипервизора. Кстати, коровы тоже жрут гвозди и иногда гравий, но это не в архитектуре, а просто техническая ошибка обратной совместимости.

Да, и ещё. Очень хорошая вещь – повторное использование кода. Часть функционала с камнями потом накатили на крокодила – чтобы ему нырялось лучше. Ныряется действительно лучше.

Проблемы энергопотребления решаются не менее гениально. С рептильной платформой всё ещё более-менее нормально (там просто нет долгих высокоуровневых процессов), и крокодил может сидеть сутки без движения до поимки мяса. А вот с теми же крупными хищниками всё пожёстче мобильных ОС. На 20 часов в сутки лев снимает все активные процессы и уходит в спящий режим. Примерно 4 часа он находится в активном режиме – рычит, размножается, сёрфит по саванне и находит новую зарядку в антилопе или зебре.

Дельфину вообще не всегда удаётся включать оба ядра мозга – только тогда, когда нужно делать что-то важное. Если вам встретился тормозящий дельфин – проверяйте, оба ли глаза открыты. Только один? Значит, он в спящем режиме и работает на одном ядре с пониженной тактовой частотой.

Медведь не всегда корректно выходит из hibernate-режима. Это же, кстати, касается некоторых растений, но там баг не так опасен. Растения легко перезапустить. И да, учитесь у тех, кто писал альбатроса. Альбатрос вообще спит в воздухе.

Теперь черепаха. Ей вместо того, чтобы прописать нормальный алгоритм обхода препятствий, захардкодили рефлекс убирания головы в панцирь. Теперь даже если она натыкается на крокодила, тот со своим молниеносным броском не успевает откусить ей голову. Побочный эффект – черепаха легко уворачивается от ножа мясника. Скорость обработки инструкций процессора не сравнится со скоростью работы интерпретируемого высокоуровневого кода у повара. Черепаху не обгонишь, критичные функции переписаны на ассемблере.

Белый медведь – отличный пример работы с солнечной энергией. Медведь прозрачный в УФ по меху и чёрный на коже. Это уже торжество инженера.

Жираф – сплошной костыль. Нет, в целом, понятно, что требования заказчика по высоте кроны несколько раз повышались по мере развития проекта. Но вот то, что вошло в релиз по водопоям и было пропущено на приёмке – это нонсенс. Жираф тупо не достаёт головой до воды(!) в обычном режиме. Ему приходится жутко вывернуться и почти сесть на шпагат, чтобы попить. Ясное дело, анонимусы-хищники этим нагло пользуются. Детёныша вообще пришлось укреплять – он в стабильном релизе падает с полутора метров при рождении.

Морской свинке и ряду рыб косо прописали задержки на прерываниях. Если обычное животное по очереди опрашивает прерывания вроде «нет ли опасности», «не надо ли попить», «не надо ли поесть», «не надо ли начать размножаться», «не надо ли лечь спать» и «не надо ли выполнять нестандартную процедуру» — и всё это без видимого переключения — то морские свинки делают sleep(1000); после каждой операции. Видимо, осталось с отладки и вошло в релиз.

Хорошей идеей было накатить код сборщика мусора в ОЗУ от золотой рыбки на белку – garbage collector с высокой вероятностью очищает и неиспользуемые указатели на места размеченных орехов и семечек. В результате благодаря белке вырастает много новых деревьев.

Вот индийскую кобру точно писал фанат Starcraft. Потому что, задумайтесь, где ещё можно встретить юнита, плюющегося ядом на два с половиной метра точно в глаз террану.

Ну и раз начали о нерациональности – вспомним того же осьминога. Километры нервной ткани просто потому, что кому-то было интересно написать его на brainfuck. Да если использовать эти отдельные модули управления присосками, ту же ткань – может получиться вообще ЦОД на колёсиках.

Или вот взять того же пингвина – летать не умеет, зато плавает и весело прыгает на полметра в высоту. Написали его в качестве учебного примера для объяснения принципов полиморфизма, а потом почему-то забыли закомментировать подключение библиотек с ним в основном релизе.

Тлей и других насекомых, а также ряд животных точно писал бешеный фанат рекурсии. Светлая мысль рождать некоторых уже беременными – просто вынос мозга для тестеров. Зато слонёнок деплоится 22 месяца — вот что значит не влезть в кэш процессора.

Кстати, пасхалка с бегемотом получилась смешная. Люди боятся львов, носорогов, змей – но только этот обаятельный толстяк целенаправленно бегает за человеком. И, внезапно, со скоростью до 30 км/ч. То есть догоняет даже велосипедистов.

У некоторых кошек не убрали аппаратный байпасс в районе шкирки. Стоит взять взрослую систему за это место, так сразу отключается двигательная активность. Что породило опасный баг с прищепкой, которым часто пользуются скрипткидди.

У курицы расслабленная лапа «защёлкнута», поэтому если поставить курицу на ветку, дождаться, пока она уснёт, а потом легко и быстро перевернуть, сработает рефлекс – и у вас будет курица, спящая вниз головой на дереве. Главное – подготовить почву и рассказать всей деревне про вампиров за день до зрелища такого курятника.

У собак и ряда других хищников и падальщиков косо прописано распознавание добычи. В одном из условий AND случайно заменили на OR, и вот результат — известный баг с запуском приоритетного процесса с атакой на пятно лазерной указки.

В общем, вы наверняка и сами можете продолжить.

P.S. Обратите внимание, что большая часть описанных уязвимостей до сих пор не исправлена.

 

question4
()

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

Форум — General

Пытаюсь качать книги из 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 заблокирован

Форум — Talks

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

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

 

question4
()

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

Форум — Talks

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

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

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

 

question4
()

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

Форум — General

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

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

 , , ,

question4
()

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

Форум — Talks

https://bugs.gentoo.org/838373

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

 , , , ,

question4
()

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

Форум — Development

Недавно всплывал вопрос о поиске одинаковых картинок. Я хотел применить 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 не собирает проект

Форум — Development

Пытаюсь собрать 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-ом кто-нибудь ещё пользуется? Закрылись.

Форум — Talks

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

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

 

question4
()

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

Форум — General

Кто-нибудь может объяснить, как с этим сейчас дела? Нашёл только плагин 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 в России
Группа Linux в России

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

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

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

>>> Новость на сайте Postgres Pro

 ,

question4
()

Как Remmina, но Qt/KDE

Форум — Desktop

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

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

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

question4
()

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

Форум — Mobile

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

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

 , ,

question4
()

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

Форум — Linux-hardware
  • Процессор 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
()

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

Форум — Development

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

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

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

Форум — Development

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

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 в браузере

Форум — Desktop

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

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

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

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

 ,

question4
()

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

Форум — Development

Есть заблокированный сайт. Есть прокси, который быстрый и доступный, потому что делает что-то нехорошее с 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

Форум — General

Есть роутер 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

Форум — Multimedia

Сконвертировал пачку 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
()

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