LINUX.ORG.RU

Сообщения dimgel

 

Ищу работу: teamlead / senior, java/scala / C++ / web fullstack

 , , ,

dimgel
()

Я тут программу написал, но она почему-то не работает, не подскажете где у меня ошибка? - ...

Шучу (1е апреля всё-таки), всё работает.

Кому делать нечего, зацените презенташку сайта на плюсях (ролик 1 минута):

 ,

dimgel
()

Чё там у гентушников?

Я тут подумываю, а не вернуться ли мне на генту. Правда, от этих мыслей меня существенно подташнивает. Тем не менее, не поделитесь ли, товарищи гентушники,

  1. чё у вас там новенького, кроме бинарных пакетов?

  2. Насколько runit юзабелен как полная замена OpenRC? Поддерживается ли он для всех сервисов?

2a. К слову, а почему они вообще до сих пор от этого громоздкого говна мамонта не отказались? (Гы, на всякий случай уточню, что я про OpenRC.)

  1. Недопонял я, что там с ускорением портежа. Вижу USE=native-extensions, но недопонял, много ли он на данный момент даёт и какие дальнейшие планы?

 , ,

dimgel
()

Value ":A1_ROOT" cannot be set as name. Reason: Not POSIX compatible.

После обновления mdadm 4.2 —> 4.3, массивы не собираются с вышеуказанной ошибкой. WTF?!

Не из-за двоеточия ли это в начале имени? У меня в заметках записано, это чтобы оно не добавляло homehost. Видимо, чтобы при загрузке с флешки не ругалось, что хост неправильный. Возможно вместо этого можно вписать в /etc/mdadm.conf HOMEHOST=<ignore> (глобально для всех массивов), но прежде чем пердолиться с переименованием массивов и подкручиванием конфигов, мечтается получить подтверждение, что причина действительно в этом. Чёт не гуглится ничего, кроме аналогичного багрепорта без обсуждения.

 ,

dimgel
()

Как узнать, кто непрерывно пишет на диск, если никто не пишет?

У меня artix linux на компе и на загрузочном portable ssd, почти идентичные системы. После где-то полугодичного перерыва грузанулся в ssd чтобы его обновить. Обновил, перегрузился – всё работает, но идёт непрерывная запись на ssd на максимальной скорости, почти без остановки: gkrellm показывает, и светодиод на ssd непрерывно моргает. И сдаётся мне, редкие паузы там только потому что SSD отказывается принимать новые данные пока старые не раскидает.

iotop -a показывает с гулькин хрен – только jdb2 немного, несопоставимо по объёмам.
UPD: Вернее, в строке заголовка он показывает большой общий объём записи (Actual DISK WRITE:), а в разбивке по процессам – хрен.

Грузился в runlevel 1 без графики и сети – всё равно моргает непрерывно.

Насколько я себе представляю, если бы только сам SSD внутри себя освежал давно не перезаписывавшиеся данные, он бы сильно грелся, но gkrellm запись не показывал бы.

Думал, может драйвер ядра форсирует освежение, но пока я копировал конфиги с основной системы на ssd, непрерывная запись на него не шла.

Как искать виноватого?

 

dimgel
()

core dump & dynamically loaded .so

nginx динамически грузит мой .so-модуль, который прилинкован к lucene++.so.

Изредка сегфолтится, и я склонен полагать, что это баг lucene++, но хочется быть уверенным, прежде чем скомпилять и заюзать его последний снапшот, где этот баг пофиксен. И пока я жду очередного сегфолта,

Вопрос: как объяснить gdb -c /tmp/core-xxx, чтобы он подцепил мою .so, или он сам это из дампа увидит?

Моя .so с отладочной инфой, nginx и lucene++ без (лень: они установлены тупо из пакетов).

 ,

dimgel
()

Не работает ссылка «Показать ответ» в одной теме

На этом своём каменте или через-следующем жму – в адресной строке появляется https://www.linux.org.ru/forum/development/17495702?cid=17520734#comment-er=show&cid=17521254 (на втором каменте последнее число другое) и всё, дальше ничего не происходит. В других выборочно проверенных темах всё работает.

UPD. Вот дьявол, а когда открываю второй камент по прямой второй ссылке выше, ссылка «показать ответ» из него работает.

UPD2. Похоже дело в том, что второй камент открывается в режиме «игнорируемые скрыты», а мой камент – в режиме «игнорируемые видны», а там навигация давно известно что подглюкивает, и давно смирился как с платой за возможность пол-ЛОРа игнорить. В общем, ложная тревога.

 

dimgel
()

Рой беспилотников, общающихся в чате с помощью большой языковой модели.

 ,

dimgel
()

Позиция окон qt-приложений восстанавливается некорректно: top на несколько пикселей ниже.

В смысле, при перезапуске приложения. Уже с полгода имеет место быть, созрел пожаловаться. У меня окна не maximized, справа ~=200px отступ чтобы кусок десктопа был виден (а точнее gkrellm). А при перезапуске ещё и сверху отступ 5-10px образуется, каждый раз приходится ресайзить. QtCreator, QBitTorrent (этот ещё на 1px вправо сдвигает окно), не помню что ещё.

Никто не сталкивался? Как лечили?

 ,

dimgel
()

Нужна маленькая C++ либа, чтобы HTML diff-ы хранить и показывать типа как на ЛОРе

Либа должна:

  1. (при редактировании HTML – WYSIWYG) Генерить diff: минималистичный, но достаточный для восстановления предыдущей версии по текущей, как в VCS.

  2. Применять diff к текущей версии для получения предыдущей.

  3. Выводить diff с раскраской, или лучше подготавливать какие-то структуры для вывода, по которым я сам быстренько-простенько раскрашу.

Загвоздка в том, что у меня HTML, и надо как-то типа как на ЛОРе: если отличие не в тексте, а в HTML тегах/атрибутах, оно должно сохраняться (для восстановления предыдущей версии), но не показываться.

В крайнем случае п.3 попробую сам запилить. Но уж для п.1+2 что-то наверняка да есть.

 , ,

dimgel
()

Помогите найти старый плач в частном бложике, во что превратилось программирование

Несколько лет назад по форумам пробежала ссылка на сабж, где чел плакался, что мол из инженерной дисциплины программирование превратилось в гадание на койфейной гуще: тупо и бессмысленно бродишь-ищешь, где забыл аннотацию воткнуть. Не помнит ли кто?

 

dimgel
()

Ошибка «database is locked» не пропадает даже когда выхожу из второго приложения.

В моём приложении создаю коннекты и prepared statements по запросу, и в описываемом сценарии считаем что кеширую их вечно. Все обновления базы – внутри транзакций.

Во время работы приложения в консоли запускаю sqlite3 mydb и там что-нибудь модифицирую (create table aaa(id int);, drop table aaa;) в auto-commit режиме. После чего моё приложение естественно начинает ругаться «database is locked» (SQLITE_BUSY). (А может и не естественно, если консоль в auto-commit отпускает лок после каждой команды.)

Проблема в том, что даже после того, как я выйду из sqlite3 в консоли, моё приложение продолжает ругаться.

Причём там непонятная хрень какая-то творится. Prepared statements, которые были созданы ПОСЛЕ того, как я вышел из консоли, работают. Решил убедиться, запустил консоль, сделал create/drop table, а потом, НЕ выходя из консоли, запустил приложение – всё работает. Но стоит ещё раз повторить в этой же консоли create/drop table – начинает ругаться.

SQLite 3.43.2, база на локальной ФС, режим журналирования WAL, по коннекту на поток, sqlite3_open_v2(...SQLITE_OPEN_NOMUTEX...), pragma locking_mode = normal.

Куда копать, кроме постгреса и кладбища? Ну и кроме очевидного, но чересчур грубого pragma locking_mode = exclusive. Что там вообще происходит?

 ,

dimgel
()

Найти следующий/предыдущий text node за заданным в порядке документа.

Т.е. независимо от того, сколько между ними разновсяческих открывающих и закрывающих тегов. Надо на голом js, покомпактнее и побыстрее; рекурсивно сканировать DOM я и сам догадаюсь.

Например, в <p><b>Hello</b> <i>world</i>!</p> – следующий текстовый узел после «Hello» – пробел, а после пробела – «world».

 ,

dimgel
()

Всем хороша разработка снизу вверх:

И архитектура красивая и минималистичная (не надо подгонять свои высокоуровневые фантазии под – surprise! – совершенно по-другому работающие базовые технологии), и с самого начала тестируешь-дебажишь всю логику настоящую с самого низу (а не заглушки, заменив которые вдруг обнаруживаешь, что работает оно через раз, и тестировать всё надо снова), и писать много лишнего соответственно не приходится, но…

…Но сука пишешь-пишешь, пишешь-пишешь, пишешь-пишешь, ПИШЕШЬ-ПИШЕШЬ – и конца-края мать его не видно!!! Тошнит уже. :(

Хотя тут конечно фактор новизны ещё. Если последние 10 лет сидел на JVM, а плюсы последний раз ещё в яслях видел, то нарабатывать себе тулзы под практически новую для меня платформу – и libtooling изучать (и фасады под свой cake к нему клепать – многопоточность чтобы, и хелперы всякие, в т.ч. обход багов), и nginx (в котором для проксирования до хрена всего, а для бакенда – нихрена), и весь квадриллион граблей пока соберёшь

 

dimgel
()

pragma optimize: почему рекомендуют вызывать в конце а не в начале? а если из отдельного коннекта?

Здрасьти.

Имеем сайт, т.е. приложение с очень большим аптаймом. База – SQLite. Нужно чтобы всё работало быстро, и стартовало / завершалось тоже.

Если вызывать pragma optimize при закрытии каждого соединения, как рекомендуют по ссылке выше, то есть шанс, что рано или поздно – и как положено, в самый неподходящий момент – оно задумается. А вместе с ним и админ: с чего это вдруг nginx не хочет завершаться? kill -9 его.

Понятно, что перед pragma optimize я ещё выдам pragma analysis_limit = 1000, чтобы оно совсем уж неприлично не задумывалось. Но внутренний перфекционист всё равно недоволен.

Для долгоиграющих приложений, по первой ссылке рекомендуют запускать pragma optimize раз в несколько часов. Делать это в рабочих коннектах – нехорошо, юзеры также будут время от времени ни с того ни с сего задумываться.

Отсюда вопросы:

  • Много ли выгоды я потеряю, если буду вызывать optimize из-под отдельного коннекта в фоновом потоке? Не спроста ж они рекомендуют вызывать его перед закрытием коннектов – небось накопленную коннектом статистику используют. Впрочем, бит 8 в MASK я в любом случае буду отключать – ещё блин какая-то сраная железка за меня не решала, какие индексы ей нужны. Но хотя бы тупой analyze-то отработает?

  • Если я буду запускать optimize в фоновом потоке при старте, и оно решит задуматься, оно не заблокирует DML в других коннектах? Если нет, то это был бы идеальный вариант: шустрая работа сайта с первых секунд, даже если админ кильнул предыдущую оптимизацию, задумавшуюся при завершении. Ну а дальше также фоном раз в несколько часов, а оптимизации при закрытии коннектов тогда с гораздо большей вероятностью отработают мгновенно.

 ,

dimgel
()

ОС «Стрелец» получила сертификат соответствия Минобороны

Тыц. Мне пофиг, но может кому-то интересно.

 , ,

dimgel
()

Нужен лёгкий fulltext search engine: для C++ приложения, чтобы умел в en/ru, бесплатный.

Посоветуйте сабж?

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

Я в курсе, что индустриальный стандарт де факто - elasticsearch, но это чёртова зверюга.

Lucene тоже на жаве. Жаву тащить в дистрибутив приложения категорически не хочется.

 

dimgel
()

Как сказать ядру удалить shm, если ВСЕ замапившие его процессы сдохли (SIGKILL)?

…причём сдохли ДО того как вызвали shm_unlink(). В этом случае мне нужно чтобы вновь запущенная куча процессов получила новую чистую память, а не старое состояние.

НЯП вызывать shm_unlink() сразу после mmap() нельзя: если после shm_unlink() другой процесс вызовет shm_open() с этим же именем, он получит другую область памяти.

Пишут, что в старом API (shmget(), …) это делается через shmctl(). Причём по дефолту там как раз нужное мне поведение, что есть правильно с т.з. защиты от race: SIGKILL может прилететь до shmctl(). …Хотя как-то мутно, в соседнем же каменте пишут наоборот, а по man shmctl вообще ни хрена не понятно.

А в новом API походу никак?

 ,

dimgel
()

Смарите какой шик. :)

Захотелось мне проверить, будет ли вызываться memcmp() для невыровненных адресов. Или может оно там какой-нибудь instrinsic впаяет. Сижу ржу:

https://godbolt.org/z/6dWbP687e

Первый раз tail call optimization на сях-плюсях вижу, и как-то не задумывался, что оно не только к рекурсии применимо.

 , ,

dimgel
()

Кто-нить тестил, насколько Эльбрусы медленнее обращаются по невыровненным адресам?

То, что обращение в принципе возможно, я нагуглил. Интересует просад по скорости при чтении/записи 64-битных слов. У amd64 он исчезающе мал, так что вопрос «упаковывать данные или нет» вообще не стоИт.

 

dimgel
()

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