LINUX.ORG.RU

Сообщения kvpfs_2

 

На чем написать клиент/сервер

 ,

Приветствую. Обрисую примерную задачу: планируется отправлять покупателям девайс (ну если дойдет до этого, конечно), сердце которового - МК. Есть веб приложуха для телефона.

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

Вопросы:

  1. Почему широковещательный адрес? Чтобы девайс и прложение друг друга находили, пердолинг неподкованных людей со статическими адресами - боюсь слишком высокий порог. Но! А можно ли полагаться на широковещательные адреса? Не уверен точно, но краем уха слышал, что маршрутизаторы дефолтно их не пропускают, или это не так (другими словами - пропускают ли они их между хостами внутри локальной сети, про внешнюю сеть речь не идет, конечно)?

  2. Веб приложения - вообще для меня неизвестное. Подозреваю, что раз клиент имеет управление девайсом в режиме нон-стоп (ну тот же счетчик инкрементить), то там должно быть обмазано джаваскриптом каким-нибудь. В общем - как проще/дешевле по ресурсам/на чем реализовать подобный клиент-сервер? По МК, думаю, каких-то проблем быть не должно (тупо отдать данные и открыть сокет для общения с приложением), а вот на чем сейчас просто написать клиент подходящий для меня под все виды мобилок? Смущают только динамические элементы, хочется спихнуть все задачи по формированию страницы клиенту (ну не на МК же это делать) и открыть сокет для общения с девайсом

PS: хочется написать клиент максимально просто (при сохранении необходимого функционала), а не какое-нибудь rocket science хай энд веб дерьмо с полным комплектом свистелок написанного на монструозном фреймворке

kvpfs_2
()

Сечение объекта на 2д ролике

 ,

Привет, не знаю как назвать это правильно, попробую набросать демонстрационный, аналогичный пример: имеем статичный снимок, где две комнаты с очень сильно разной интенсивностью освещения, между комнатами дверной проём, камера «смотрит» на проём, т.е. видит обе комнаты сразу. Имеется отснятое движение объекта (пусть это будет прямоугольный брусок для простоты). Хотим наложить движение бруска на снимок с комнатами, брусок перемещается через проём перпендикулярно дверной стене, камера видит сразу две грани прямоугольника.

Тут встаём логичный вопрос, а что делать с освещением? Надо как-то учесть разную его интенсивность при переходе. В реальности фигура сложнее, и не получится (сложно) перенести её в 3д пространство и там смоделировать процесс.

Мне на ум приходит что нужно как-то сделать сечение каждого кадра по плоскости проёма, далее подкорректировать одну часть и наложить их друг на друга, на выходе будет световой переход. Очевидно, что делать это руками для каждого кадра - не вариант совсем. Что можно придумать? Возможно есть какая-то тулза, в которой можно «раскрасить» грани фигуры на ключевых кадрах, т.е. указать руками что является вертикальной гранью, а что горизонтальной? Но как-то хлопотно будет, конечно, а если это человек проходящий через проём + активно жестикулирует, запариться можно грани красить.

Есть ли какие-то разумные инструменты и варианты? Пусть я отсеку руками на 1% проценте кадров, куда дальше это скормить можно, что сделает сечение на оставшихся кадрах?

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

kvpfs_2
()

Настроить wireguard на роутере

 , ,

Приветствую. Запарился, не знаю в чем дело, при аналогичных настройках десктоп работает как шлюз для других устройств.

Настроил на роутере wireguard, туннуль, разрешен forwarding echo "1" > /proc/sys/net/ipv4/ip_forward, nat. Далее на роутере меняю дефолтный путь с wan на wireguard:

# ip route delete default
# ip route add ${server_ip} dev wan
# ip route add default via ${wg_ip} dev wg0

На роутере все хорошо, условный 1.1.1.1 пингуется через сервер (это видно по времени пинга), но с других девайсов, которые используют роутер как шлюз - доступа к инету нет.

В чем может быть дело? Повторю, что при подобных настройках десктоп работал шлюзом для других устройств, а тут никак не удается завести

kvpfs_2
()

Имеется ли в ip пакетах что-то, что может идентифицировать девайс?

 ,

Привет. В контексте блокировок, помню видел, что мол кто-то юзал телефон как модем для ПК, и последнему блочили доступ на условный ютуб, хотя для телефона блоков нет. Следовательно гипотеза - в пакетах что-то укаывает на девайс и можно отличить один от другого, пусть даже грубо.

Столкнулся с ситуацией, когда разные девайсы имели разную скорость доступа к инету, буд-то бы одному из них резали скорость, через некоторое время всё восстановилось. Прикидываю все варианты, есть ли в пакетах что-то вроде session id? И девайс маркирует им весь исходящий от себя трафик. Т.е. id различает не просто телефон от пк, а пк1 от пк2

kvpfs_2
()

Порядок событий нескольких relaxed atomic'ов

 ,

Привет. Сперва код, затем пояснение и вопрос:

#include <cassert>
#include <thread>
#include <atomic>
#include <vector>
#include <iostream>
using namespace std;

enum mtx_state {
   e_free,
   e_busy,
   e_block
};
std::atomic<mtx_state> mtx = e_free;
std::atomic_int cnt = 0;
std::atomic_flag barrier;
int result;

void t0() {
   while (! barrier.test(memory_order_relaxed));

   mtx_state expected = e_free;
   while (! atomic_compare_exchange_strong_explicit(&mtx, &expected, e_busy,
            memory_order_relaxed, memory_order_relaxed))
      if (expected == e_block)
         return;
      else
         expected = e_free;

   cnt.fetch_add(1, memory_order_relaxed);

   expected = e_busy;
   if (! atomic_compare_exchange_strong_explicit(&mtx, &expected, e_free,
         memory_order_relaxed, memory_order_relaxed))
      terminate();
}

void t1() {
   while (! barrier.test(memory_order_relaxed));

   mtx_state expected = e_free;
   while (! atomic_compare_exchange_strong_explicit(&mtx, &expected, e_block,
            memory_order_relaxed, memory_order_relaxed))
      expected = e_free;
   result = cnt.load(memory_order_relaxed);
}

int main() {
   if (true) {
      vector<jthread> th;
      for (int i = 0;  i != 30;  ++i)
         th.emplace_back(t0);

      th.emplace_back(t1);

      barrier.test_and_set();
   }

   assert(cnt.load(memory_order_relaxed) == result);
   cout << result << endl;
}

Идея примера - стартует 30 потоков, на входе долбятся о барьер для одновременного запуска. Задача каждого из них - взять «мьютекс» (атомик с несколькими состояниями - {свободно, занято, блокировка}, если блокировка, то поток завершается без выполнения работы) и инкрементировать счетчик. Также вместе с этими 30 стартует 1, который блокирует «мьютекс» и читает значение из счетчика в итоговый result.

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

Если счетчик не атомик, то вопроса бы не было, но он атомик. Возможна ли ситуация, когда последнее (блокирующее) взятие мьютекса увидит непоследнее состояние счетчика? Т.е. блокирующий поток читает счетчик, 10 например, кладет его в result, блокирует мьютекс, дальше каким-то чудом счетчик инкрементится, срабатывает assert, это возможно?

kvpfs_2
()

Посоветуйте маршрутизатор

 ,

Привет. Нужен роутер в дом, нормальный. Нормальный это - достаточно шустрый, иметь интерфейс не для дебилов, 5Ггц вафля.

Есть у меня 2 девайса, один тормозит сильно, скорость с ним низкая, у другого интерфейс для идиотов, мастера и всякий подобный шлак

wan - 100 Мбит/c, lan - хотелось бы 1000 Мбит/c. Первый мой девайс тормозит заметно даже на WAN со скоростью 100, девайс не старый, вроде как.

Можете что-нибудь достойное посоветовать по таким критериям?

kvpfs_2
()

Визуальные метки на полях

 ,

Привет. Пользуюсь консольным nvim, на полях показывается номер строк. Есть такая хотелка: неким сочетанием подкрашивать background цифры на полях в цвет, который отличается от нормального, например в красный. Тем самым создавать визуальную метку подчеркивая некоторое важное место во время штудирования исходников. Я знаю про метки, на которые можно прыгать, но мне нужна именно визуальная метка, а не такая.

Можно ли вкрутить какой-то плагин?

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

kvpfs_2
()

neovim + clangd

 , , ,

Привет. Решил посмотреть как там дела с данной связкой (ранне снес clangd из-за глючности, моет сейчас лучше). Слышал, что neovim начал нативно поддерживать LSP клиента. Ну ок, переписал свой конфиг на луа (боже, насколько же луа приятней vimscripta). Сначала настроил клиента напряму - вроде все норм, но нет signature help’a (подсказка с доступными перегрузками при написании вызова функции). Ладно думаю, что-то не докрутил. Настроил через рекомендованный самим clang’ом nvim-lspconfig - к моему удивлению опять нет нет signature help’a.

Что нужно для его появления? Нужно вкрутить еще (github.com) это костыль? Может другой? А может я вообще зря взял nvim-lspconfig?

Как сейчас нынче модно получить нормально работающий nvim + clangd? Чтобы сходить туда, сюда, к определению, сигнатур хелп, больше в общем ничего и не требуется

kvpfs_2
()

Wireguard

 , ,

Привет, wireguard внутри РФ блокируется? Те когда другой хост не зарубежом, а оба внутри. Без применения туннеля поверх wireguard протокола. Наверняка кто-то сети из разных офисов строит и должен знать. А то мне для проверки сервер брать надо

kvpfs_2
()

Ремонт ноутбуков

 ,

Привет. Решил поковырять ноут (починить), если схему я ещё нашёл, то с board view - полный ужас. Данная инфа охраняется серьезней гос тайны, мало зарегаться на профильных ресурсах, так ещё нужно выслужиться, стать проверенным, ну или просто перевести деньги) чтобы скачать что-то.

Какое же питорское сообщество мастеров. Тут же есть наверняка спецы по ремонту, вы где берете схемы? Ходите по всяким подобным помойкам с мудаками? Они же ведь должны от производителя идти, как доки в конечном итоге доходят до ширмасс?

kvpfs_2
()

FLTK, многопоточность

 , ,

Привет. Хочу уточнить, чтобы потом не переделывать: как известно, рисовать гуйню - прерогатива главного потока. FLTK доки - не очень ясно излагают

A worker thread may update the state of an existing widget, but it may not do any rendering directly, nor create or destroy a window.

Что понимается под create or destroy? Нельзя вызывать конструктор виджетов или нельзя вызывать show() из worker’ов? Если ответ отрицательный, до будет проблемно передавать функтор для создания окна в главный поток, т.к. функтор из плагина, значит нужно будет ещё костылить инкремент юзеров модуля, решаемо, но не хочется.

Ну и ещё небольшая непонятка - нужно ли брать Fl::lock() во время создания виджета из другого потока (без вызова show(), если это допустимо)?

kvpfs_2
()

Цифровая подпись в РФ

 

Привет. Мне простую вроде штуку надо понять - вот есть лицо/организация, получило она электронную подпись у соответствующего УЦ. Значит где-то должна быть общая база публичных ключей всех подпись получивших. Далее мне эта контора отправляет документ с подписью, где мне этот документ проверять? Какие официальные точки входа в эту базу? Только без всяких госуслуг, или копропро, этот документ должны проверить зарубежом. Есть ли какой-то сервис эцп.ru?

kvpfs_2
()

Универсальная таблица

 , ,

Привет. Поразмыслив на досуге, пришел к выводу, что 95% процентов моих гуй задач покроет табличный интерфейс. Хочу некоторый шаблонный класс-таблицу на fltk (предпочтительно, но на крайняк возможны варианты, но не на QT), задается количество колонок подписи и тп, принимает Х колбэков на попытку редактирования соответствующей колонки, принимает Z колбэков (с подписями для соответствующего пункта меню) на какие-то действия с этими данными (удалить, добавить и т.п). Shortcuts, мультивыбор.

В общем-то задача на 1К строк примерно, но разбираться в gui toolkit’ах мне вообще неохота. Мне пофиг на внешний вид, функциональность в приоритете. Мож встречали что-то подобное готовое к заюзыванию? Ну не хочется мне клепать формочки с виджетами, ещё и поддерживать это дерьмо, хочу дать пачку колбэков и делать из них своих основные действия

kvpfs_2
()

Друг из другого namespace

 

Соррян, если плохо гуглил, да и запарился уже сильно, голов не варит. Как сделать друга? По-всякому пробовал писать

namespace Ns {
   class S {
      friend int ::main(); // error
      int i;
   };
}

int main() {
   Ns::S{};
   ++ s.i;
}
kvpfs_2
()

Криво устанавливаются либы

 ,

Привет. Нужна подсказка. Решил собрать свежую FLTK с гита, упаковать в пакет (создать PKGBUILD для makepkg) и установить менеджером. PKGBUILD:

pkgname=my_fltk
pkgver=1.4
pkgrel=1
pkgdesc="my build of fltk library from git"
arch=('x86_64' 'i686')
conflicts=(fltk)

build() {
  cd $srcdir
  mkdir -p builddir
  cd builddir
  cmake -DFLTK_OPTION_STD=ON -DFLTK_BACKEND_WAYLAND=OFF -DFLTK_BUILD_EXAMPLES=ON -DFLTK_BUILD_FLUID=OFF -DCMAKE_INSTALL_PREFIX=/usr ..
  make
}

package() {
  cd $srcdir/builddir
  make DESTDIR="$pkgdir" install
}

Дело вот в чем - в builddir после сборки я получаю полноценные либы (с ними собираются тесты и примеры), но в пакет попадают какие-то обрубки (вес многократно ниже, нужных символов внутри нет (искал при помощи nm)), при попытке что-то собрать получаю undefined reference даже на Fl::run(). Я не забыл дать что-то линкеру 100%.

Что происходит с либами при добавлении их в пакет и последующей установке силами makepkg?

Если я захожу в buildir и делаю там make DESTDIR=/tmp/123 install, то в tmp получаю полноценные либы, не обрубки

kvpfs_2
()

Удаление shared_ptr, а нужна ли дополнительная синхронизация?

 ,

Привет. Вопрос из прошлого, тогда я пришел к выводу, что дополнительную синхронизацию лучше делать, но хз, сейчас подошёл к подобному вопросу вновь. Ленюсь копать в сети, в прошлый раз однозначного ответа не нашел, вроде. Пример:

#include <thread>
#include <vector>
#include <memory>
#include <chrono>
#include <iostream>
#include <mutex>
using namespace std;


class Q {
    mutex m;
    int data {0};
public:
    void incr() {
        lock_guard lck(m);
        ++ data;
    }
    ~Q() {
        //lock_guard lck(m);
        cerr << data << endl;
    }
};

void th_fn(shared_ptr<Q> q) {
    q->incr();
    q.reset();
    while (true);
}

int main() {
    auto ob = make_shared<Q>();
    vector<thread> v;
    for (int i = 0;  i < 5;  ++ i)
        v.emplace_back(th_fn, ob);
    this_thread::sleep_for(3s);
    ob.reset();
    for (auto &t : v)
        t.join();
}

Нужно ли брать мьютекс в деструкторе? TSAN не выдает ошибок при отсутсвующем взятие, но вроде как декремент счетчика в shared_ptr - relaxed операция (или нет?). Какие мысли?

kvpfs_2
()

Эффектно вкомпозитить текст в видос

 

Привет. Хочется примерно как в фильмах иногда бывает - меняется сцена и внизу выбегает подпись: «Нижний зажопинск, 12 часов до катастрофы». Вся фишка в способе выкатывания текста, хочется будто бы его печатают и мигает курсор. Очевидно, что можно закостылить самому в голом композитор, ну чувствую, что для таких штук должны быть готовые шаблоны-скрипта в каких-нибудь монтажных kdenlive’ах. Подскажите, пожалуйста, софтину и куда там тыкать.

kvpfs_2
()

Артефакты после рендеринга

 ,

Привет. Подскажите, пожалуйста, что это за хрень такая вокруг товарища, и как это исправить? С мешом всё норм, никаких там вершен уехавших, простое наложение анимации с mixamo на персонажа из сети. В основном кадры норм, но порой получаются такие, естественно, что я не могу допустить наличие такого брака в последовательности.

kvpfs_2
()

Модифицировать модель

 

Привет. Всё что я пробую - получается шлак. Нужно следующее - есть некоторая модель живого существа, нужно увеличить scale определенных плоскостей в центре объекта по двум осям (x и y, но не z). Если быть точнее - то нужно сделать задницу объемней, с плавным переходом в талию и на бедра. Т.е. как-то плавно отмасштабировать плоскости в заданном месте и чем дальше от этого места, тем меньший коэффициент должен применяться. Чем это делается?

У меня с собственными моделями туго, предпочитаю брать готовые + всякая примитивщина - пол, стена, склад кубов)

kvpfs_2
()

Панорамный снимок

 , ,

Привет. Мне нужно определиться со способ решения задачи. Задача - cgi штучки на реальную съёмку. Камера вращается вокруг осей. Motion tracking - говнище, я разочаровался полностью. На данный момент смотрю на два варианта 1. сделать панорамную фотку (градусов 300 вокруг z), или вращать камеру очень предсказуемо шаговыми двигателями вокруг 2 осей.

Хочу определиться по п1 - реально ли сделать качественную фотку без всяких швов видимых даже на мелких деталях, на много градусов и большим разрешением, перемещаясь по которой маленьким фреймом 1280х720 создаётся эффект вращения статично стоящей камеры. На руках ничего волшебного, обычная камера.

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

kvpfs_2
()