LINUX.ORG.RU

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

Что нужно для его появления? Нужно вкрутить еще это костыль? Может другой? А может я вообще зря взял 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
()

Дисторсии, что происходит?

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

Доказательство того, что фреймы разогнуты. Я провел линии вдоль верхней кромки дома и в центре столба, видно, что объекты негнутые. Не буду делать 100500 фото полосатого и шахмат, поверьте, все ровно.

Теперь непонятное: есть два фрейма - раз, два. Внимание на цветочный горшок на земле. Съемка производилась из одной точки лишь вращением (да, там есть незначительное изменение высоты, но оно очень мало, можно пренебречь). Чего я ожидал? Я ведь все разогнул, значит проекция горшка в разные области матрицы должна иметь одинаковый размер на итоговом записанном в память фрейме. Но это не так. Размеры отличаются. На снимке образ горшка с одного фрейма (темная тень с дырками) наложена горшок из другого фрейма.

Что происходит? Почему?

 , ,

kvpfs_2
()

Заюзать lensfun

Привет. Через что конкретно ты пользуешься lensfun’ом? Есть видик, вытащил png фреймы, настроил Hugin’ом коэффициенты для камеры, думаю - сейчас заюзаю фильтр ffmpeg’a, надо только ffmpeg пересобрать с его поддержкой. И хрен там, не бывает так просто, build error )), короче надо ставить старую версию и пытаться собрать.

Какие альтернативы есть для прогнать несколько тысяч фреймов через lensfun? Что-то с реп, без лишней боли, поставил-запустил-готово. Иначе буду с ffmpeg пердолиться в попытке собрать его с поддержкой lensfun.

 , , , ,

kvpfs_2
()

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