LINUX.ORG.RU

Сообщения olegd

 

Всем пока!

 

Много лет назад завёл для себя правило: не писать на ЛОР из дома, только с работы. Иначе бы с него не вылезал.

И вот через столько лет организация закрывается. Выходное пособие получено, резюме разосланы, помещения освобождают сегодня. Будет ли на новом месте возможность столько бакланить и нецелевым образом использовать оборудование и время – не знаю. Поэтому до свидания!

Пароль не выкладываю, банить не надо.

olegd
()

Идея по интерфейсу

 , ,

В веб-интерфейсе есть длинный список. Разработчик решил, что если загружать его в listbox целиком, это сильно замедлит отзывчивость интерфейса, поэтому список показывается постранично. Можно по 25 строк, можно по 100, можно по 1000, и листать страницы кнопками.

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

olegd
()

Вопрос по OpenAPI

 , ,

Можете сказать, соответствует ли POST-запрос схеме из спецификации?

В спецификации есть раздел:

    data.status.request:
      description: To modify file DB
      type: object
      required: [files]
      properties:
        files:
          type: array
          items:
            type: object
            required: [key, status]
            properties:
              key:
                type: string
                description: File name
              status:
                type: string
                enum: [success, error]
                description: Processing status

Посылаю JSON:

{ "files": [
  {
    "key": "1.txt",
    "status": "error"
  }
  ]
}

Получаю ошибку 400.

Можете сказать, соответствует ли такой JSON этой схеме?

Ответ: вроде, соответствует.

А причина ошибки, как выяснилось, в том, что curl --data ставит Content-type: application/x-www-form-urlencoded. Некоторым программам нужно явное -H 'Content-Type: application/json' или --json.

olegd
()

Где взять документацию для старого Keycloak?

 keycloak

На официальном сайте – версии от 21 до 26. В Wayback Machine – 18.0.2. А мне нужна 19.0.2 или что-то рядом. Где её взять?

Заранее спасибо.

olegd
()

Жаба ест память

 , ,

Есть сервер. На нём крутятся PostgreSQL, Mongo, самописные числодробильные микросервисы, Keycloak и ActiveMQ, через который они все координируются. Когда пользователей много, запускается много экземпляров микросервисов. Память подходит к концу.

Вопрос: угадайте, кого прибьют первым по OOM?

Ответ: ActiveMQ (1G), затем Keycloak (500M). Все остальные потребляют меньше памяти.

olegd
()

Скачать всю очередь ActiveMQ Classic

 

Есть сервер ActiveMQ Classic. На нём висит очередь из 1000 сообщений. Требуется просмотреть их и вдумчиво разобраться, отчего некоторые вводят сервер приложений в ступор.

Но одновременно нужно продолжать работать. Для этого надо срочно всё удалить.

Можно руками скопировать каждое сообщение из веб-интерфейса. Можно вдумчиво прочитать всю тысячу (в веб-интерфейсе они выглядят как длиииннная строка JSON) и скопировать только нужные. Можно слепить скрипт, чтобы скопировать все эти сообщения.

А существует ли готовый инструмент для этой цели? Прочитать все сообщения в заданной очереди (не отмечая их как доставленные, либо наоборот, отмечая) и сохранить в текстовый файл.

olegd
()

Посоветуйте читалку

 ,

Чем вы пользуетесь для чтения книг со смартфона? Требуется масштабирование в широких пределах и поддержка основных форматов: FB2, EPUB, DJVU, PDF, CBZ. Совсем хорошо, если есть CBR, MOBI, AWX3 и reflow в PDF.

Ebook Droid ограничивает увеличение шрифта.

FBReader имеет неотключаемую фичу – добавляет дефис при переносе строк. Очень коварная вещь в математических формулах и текстах программ.

Что ещё знаете?

olegd
()

grep и кеширование

 ,

Есть программа, которая иногда ест много памяти. Потребление памяти ею можно отслеживать командой top -b -d60 -o +%MEM -c | grep memory_eater | grep -v grep > memory.log & disown Но иногда она быстро отрабатывает – за несколько минут, и файл остаётся пустой. В чём проблема? Слишком малый объём текста зависает в кеше и не сбрасывается? Можно ли как-то ускорить сбрасывание?

P.S. Если увеличить частоту опроса top до -d1 или -d0.1, всё важное фиксируется, но лог увеличивается на 2-3 порядка. Реально достаточно писать раз в минуту. Вопрос не в том, как отслеживать память, а как записать этот лог в файл.

Ответ:

top -b -d60 -o +%MEM -c | grep --line-buffered memory_eater | grep -v --line-buffered grep > memory.log & disown

или

top -b -d60 -o +%MEM -c | stdbuf -o0 -i0 grep memory_eater | stdbuf -o0 -i0 grep -v grep > memory.log & disown
olegd
()

Etc/GMT+3 и Etc/GMT-3

 

Менял часовые пояса под RedHat, столкнулся со странным обозначением часовых поясов. Etc/GMT+3 соответствует времени GMT - 3 часа (восток Бразилии), а Etc/GMT-3 соответствует GMT + 3 ч (Москва, Минск, Стамбул):
https://utctime.info/timezone/Etc--GMT-3/
https://utctime.info/timezone/Etc--GMT+3/

Откуда взялись такие обозначения?

Ответ: из AIX.

olegd
()

Как убрать предупреждения о загрузке директории?

 

Гружу большой архив файлов (копившийся лет 30) в веб-форму. Всё сразу нельзя – слишком большой, бэкэнд захлебнётся и упадёт (пробовали). Нужно по одной директории, которых десятки. После каждой приходит предупреждение:

Are you sure you want to upload all files from “<директория>”? Only do this if you trust the site.

Не то, чтобы мешает, но надоело. Как-то убрать это предупреждение можно? Firefox 129.

olegd
()

Как положено обрабатывать статус 301?

 

Сабж. Есть самописный клиент для работы с облаком Амазона, использующий рекомендованную Амазоном библиотеку. Когда пользователь прописал неверный сервер в клиенте, сервер возвращает статус 301. Обязан ли клиент автоматически перейти по указанному адресу?

olegd
()

Windows отказывается подключать KRDC с /media

 ,

При подключении к виндовой машине по RDP с использованием KRDC можно расшарить директорию на линуксовой машине (по умолчанию – /media) для обмена файлами через неё. Но с последними апдейтами Windows 11 и Server 2022 новым пользователям это по умолчанию запретили. Соединение устанавливается и тут же отваливается. (Без /media работает нормально.) Чтобы обмениваться файлами с линуксом, нужно включить какие-то политики.

Что именно нужно включить? Или хотя бы по каким словам гуглить?

olegd
()

Даты в Питоне

 ,

Есть набор текстовых дат вида «14.05.24 17:22:40.653». Нужно вычислить разности по времени между ними и вывести в наглядном виде «сутки:часы:минуты:секунды.доли».

Преобразовать текст в дату несложно: datetime.datetime.strptime(date_time_string, '%d.%m.%y %H:%M:%S.%f')
В секунды с начала эпохи аналогично: datetime.datetime.strptime(date_time_string, '%d.%m.%y %H:%M:%S.%f').timestamp()

Но есть ли готовая функция, чтобы преобразовать разность в секундах в сутки-часы-минуты?

Что разность двух datetime.datetime имеет тип datetime.timedelta – знаю. Но datetime.timedelta не имеет готовых методов для выделения часов и минут.

Ответ: datetime.timedelta имеет метод __str__():

>>> str(datetime.timedelta(days=4, seconds=3729, microseconds=823089))
'4 days, 1:02:09.823089'

Но учитывая, что для 0 суток ползёт форматирование, для единообразия таблицы придётся брать
f'{d.days:02}:{d.seconds // 3600:02}:{d.seconds % 3600 // 60:02}:{d.seconds % 60:02}.{d.microseconds:06}'

olegd
()

Сортировка текстовых строк в SQL

 , ,

Есть список файлов в таблице в PostgreSQL или SQLite. Команда select file,status from files order by file; выводит в таком порядке:

   file       | status
--------------+--------
 scan/79.txt  |      0
 scan/8.txt   |      0
 scan/80.txt  |      0
 scan/88.txt  |      0
 scan/89.txt  |      0
 scan/9.txt   |      0
 scan/90.txt  |      0
 scan/91.txt  |      0

А мне надо сортировать числа в середине строк по возрастанию: 8-9-79-80-… Можно ли это сделать средствами SQL? Как такая сортировка называется?

Ответ: «natural sort order» – «естественная». Для Postgre нашлось готовое решение:

CREATE COLLATION numeric (provider = icu, locale = 'en-u-kn-true');
SELECT * FROM files ORDER BY file COLLATE numeric;

Для sqlite3 пока нашёл только советы, как писать расширение на Си.

Или можно вычленить числа, преобразовать в числовой формат и сортировать по ним:
SELECT * FROM files ORDER BY CAST(REPLACE(SUBSTR(file, 6), '.txt', '') AS int);

olegd
()

curl, HTTP POST и Content-Type

 , ,

Есть закрыто-несвободная программа, которой можно управлять через REST API. Пробовал curl – POST не работал. Попробовал Insomnia (https://github.com/Kong/insomnia) – часть вариантов заработала. Судя по всему, принимает только если Content-Type установлен в «application/json», «application/xml», «text/plain». Проблема в том, что curl --data и curl --data-ascii задают «Content-Type: application/x-www-form-urlencoded», даже в случае curl --data-ascii @file.txt. То же для --data-binary, --data-raw и --data-urlencode.

Переопределять MIME-тип данных при помощи -H можно, но неудобно. Есть ли у curl команда, чтобы постить текстовые данные?

Или это похоже на баг в curl, и --data-ascii должно задавать другой тип?

Ответ: пока предложили --json, который подставляет в хедер "Content-Type: application/json" и "Accept: application/json"

olegd
()

Как вести лог потребления памяти программой?

 ,

На удалённой машине (подключаюсь по ssh, сессия часто рвётся) выполняется несколько экземпляров программы memory_eater. Требуется записать в файл, сколько какой потребляет памяти. Пока я пользуюсь командой:

top -b -d60 -c | grep memory_eater > memory.log & disown

Главный недостаток – в лог попадает команда grep. top -b -d60 -c | grep memory_eater | grep -v grep > memory.log & disown выглядит громоздко.

Кроме того, хотелось бы, чтобы каждая запись или каждая строка имела дату и время.

Если будете предлагать другие программы – желательно то, что обычно стоит в системах по умолчанию.

olegd
()

Машина с OpenSuse постоянно меняет адреса

 , ,

Есть удалённая машина на сервере виртуальных машин VMWare. OpenSUSE Leap 15.5. Подключаюсь к ней через ssh, но соединение часто виснет и рвётся с ошибкой «client_loop: send disconnect: Broken pipe». Насколько я могу судить, это происходит от того, что сам собой меняется IP-адрес, каждые минут 5. Как это прекратить?

Погуглил – увидел упоминание увеличения DHCP lease. Дело в нём? Как увеличить это время? GUI отсутствует, yast только консольный, Wicked без NetworkManager.

И почему другие линуксы с DHCP в той же сети постоянно берут одинаковые IP?

Дополнение: Проблема возникает только когда в локальной сети более одной виртуальной машины из этого темплейта. MAC-адреса различаются. Имена машин различаются.

olegd
()

sh или bash?

 , ,

Есть ли где-нибудь простой и понятный список вещей, которые можно писать в скриптах на bash, но нельзя на голом sh? Помимо двойных скобок.

Ответ: Проверяется скриптами checkbashisms (пакет devscripts) или shellcheck.

В данную секунду интересует скрипт:

for f in somedir/*
do
    echo $f
    ./a.out -Q"$f"
    wait $!
done

Особенно интересует строка wait $!. Вроде, в документации dash такого нет, но скрипт работает.

Ответ: Есть. Просто мануал не предназначен для поиска по ключевым словам. Его положено запоминать целиком.

Перемещено hobbit из general

olegd
()

Как можно подключаться к виндовой шаре?

 ,

На сервере Windows Server 2022 открыта для всеобщего доступа без логина и пароля директория. \\192.168.3.4\shared Всё принадлежит пользователю Everyone с правами на чтение и запись.

Вопрос: как можно проверить её доступность из-под Линукса помимо sudo mount.cifs //192.168.3.4/shared/ ~/mountpoint/ ? С curl и mc ничего не получилось.

Ответ: Пока предложили smbclient (samba-client в RHEL, net-fs/samba[client] в Gentoo). Жду ответов от знатоков MC и cURL.

olegd
()

Часы в Midnight Commander

 

Понадобилось работать в консоли по ssh и время от времени проверять, что время на удалённой машине не глючит. Хотел включить в MC часы, но не нашёл.

В нортоне были, в ФАРе есть, для MC нашёл кучу описаний, как ставить патчи, а в основной ветке MC есть?

Для определённости – mc-4.8.26-5 под RHEL9.

olegd
()

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