LINUX.ORG.RU

Сообщения seryoga

 

Как писать грамматики для языков

Форум — Development

Приветсвую!

запилил тут язык для внутреннего пользования из которого потом собирается json schema. Попросили описать в грамматике, чтоб потом наши яваскриптеры (да и бекендеры тоже) смогли его имплиментировать. А я даже невкурсе как это делается. Кастую доку о том, как писать такие грамматики.

Видел варианты, но не вкурсе, какие их них правильные.

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

 ,

seryoga
()

Андроид. Quick Start

Форум — Development

Доброго дня.

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

Спасибо.

 , ,

seryoga
()

Отредактировать файл .exe под linux

Форум — Development

Товарищи!

Я нашел старые подобные темы на всяких ресурсах. Но может что-то появилось?

Задача: Есть куча бинарей под оффтопик, нужно пройти по ним всем и залить в них определенные ресурсы (иконки, картинки, строки) и подписать (кастомизация, да). Сейчас это делается через вайн, но очень медленно уж очень все и вообще вайн только для этого держать не очень.

Вопрос в том, если ли какая либа для манипуляции файлами .exe для онтопика? Можно конечно и структуру файла раскурить, но вдруг уже кто-то курил.

 , , ,

seryoga
()

C++11 lambda c VariadicTemplate

Форум — Development

Приветствую!

Есть такая задача - протащить некий функтор с переменным количеством аргументов в std::function<void()>. Так же нужно, чтоб сохранились ссылки там, где это нужно.

Изначально все было сделано примерно так

template <typename T, typename ...Args>
std::function<void()> createTask(T call, Args&& ... args)
{
    return std::bind(call, std::forward<decltype(args)>(args)...);
}

Естественно, если у меня есть вот такой вот код:

void inc(int &test, int i)
{
    test += i;
}
...
    int test = 0;
    auto t = createTask(inc, test, 1);
    t();

    std::cout << test << "\n";

то на выходе я получаю 0, ибо байнд теряет ссылку.

Выходом может стать std::ref, но оно не всегда очевидно.

Сделал вот такое вот решение.

template <typename T, typename ...Args>
std::function<void()> createTask(T call, Args&& ... args)
{
    return [call, &args...]() { call(std::forward<decltype(args)>(args)...); };
}

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

В стандарте 11 плюсов нашел вот такое

A capture followed by an ellipsis is a pack expansion (14.5.3). [Example:

template<class... Args>
void f(Args... args) {
    auto lm = [&, args...] { return g(args...); };
    lm();
}

— end example]

но можно ли захватить Args&& ... args по ссылке? И куда эта «ссылка» будет?

cast eao197

 ,

seryoga
()

Linux, Книга про память, процессы и всё всё всё

Форум — Development

Доброго дня, LOR

тут задача у меня переписать один сервис с оффтопика (весь написан на WinAPI) на онтопик. Там много прыжков и ужимок вокруг VirtualAlloc, защиты страниц и тд. Как все это работает я разобрался при помощи Рихтера.

Скажите мне, что сейчас за Линукс можно почитать про работу с памятью, процессы и вообще как система работает. А то у меня тут пробелы в понимании многих вещей. Что-то типа того самого Рихтера есть?

Спасибо.

 , , ,

seryoga
()

Garbage Collector для собственных объектов.

Форум — Development

Доброго дня.

А есть какая-нить книга/дока в которой написано как GC реализовать для своего языка?

Сейчас пишу для саморазвития реализацию интерпретатора из книги http://interpreterbook.com/ Пишу на С++. И вот понял, что нужно писать что-то типа GC. Потому как разрулить времена жизней путем shared/weak указателей я не осилил.

Может делал кто подобное?

 , ,

seryoga
()

Hash для вектора double, int64

Форум — Development

Доброго дня всем.

А подскажите какую-нибудь шуструю функцию для подсчета хеша вектора из double/int64. Для хештаблицы нужно.

Спасибо.

 ,

seryoga
()

Структура файлов БД.

Форум — Development

Доброго дня.

А есть что на тему сабж почитать? Интересует как там хранится дерево индексов, как хранятся данные рядом с индексами и где хранится инфа об удаленных из использования блоках. Интересует в образовательных целях. Читал про хранение данных в Sqlite, то там уже сильно все сложно. Нужен совсем простой вариант какой-либо NoSQL базульки с ключем типа «строка» и данными типа «строка». А еще лучше дока с теорией.

Спасибо.

 , , ,

seryoga
()

Объединить несколько хедеров в один.

Форум — Development

Приветствую!

А чем делают сабж? Вот смотрю, например, catch.hpp. Огромный файл собран из кучи мелких. А какими инструментами подобное делают? Ведь не в рукопашную же?

 , ,

seryoga
()

Множество непересекающихся прямоугольников.

Форум — Development

Всем привет.

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

Куда копать?

 ,

seryoga
()

Интервалы, пересечения, объединения

Форум — Development

Доброго всем дня!

Я тут перед отпуском туплю немного. И так у меня есть интервалы, которые поступают ко мне по очереди. Известно начало и конец. Интервалы могут пересекать друг друга и один может пересечь несколько. Если интервалы пересекаются, то их нужно объединить в один. Например уже есть A[0..100], B[200..300] и при получении С[50..250] остается один интервал [0..300].. Сейчас я это сделал линейно. то есть ищу по началу поступившего интервала куда его «воткнуть» и потом иду до конца, объединяя все попавшиеся.

Вообще вопрос в том, а какие есть алгоритмы на этот счет? интервалов может быть много и линейное решение, чую, не самое хорошее.

Спасибо.

 

seryoga
()

Шаблонная магия С++. Как указать один из дефолтных параметров?

Форум — Development

Доброго дня и новго года.

Камарады, есть вот такой вот, например, код

template <typename K, typename V, 
          typename VTrait = traits::simple<V>,
          typename SizeTrait = traits::default_size,
          typename MutexType = std::mutex
          >
class test {....};

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

Теперь, если я хочу изменить только, например, mutex, то мне придется написать

template <typename K, typename V, typename MutexType>
using my_test = test<K, V, traits::simple<V>, traits::default_size, MutexType>;
Проблема в том, что мне нужно явно указать все параметры по-умолчанию, которые следуют до mutex, что не есть хорошо, поскольку само объявление класса test может поменяться и я хотел бы, чтоб во всех using оно так же поменялось.

Есть какой-то шаблонно-магический способ это решить?

Спасибо.

cast eao197, например...

 ,

seryoga
()

Алгоритм авторизации по паролю.

Форум — Development

И снова здравствуйте.

Написюкал я тут свой VPN агент, который умеет трафик гонять. Вроде разобрался. Файлы льются, видео крутится, прокси работает, даже lua прикрутил для настроек и реакций на всякие события ... Время подумать о душе безопасности.

Сейчас хочу сделать простую авторизацию по паролю с дальнейшим криптованием трафика. У меня есть ChaCha20, например, с которой я могу ксорить поток (все работает по TCP). Вопрос в том, как инициализировать сам генератор?

Просто паролем - плохо ибо всегда будет одинаковое состояние.

Пока придумал так: сгенерить рандомный блок, смешать его с паролем, сделать из этого sha256, например, и вот этим уже инициализировать chacha. Сам изначальный блок потом отдать другой стороне, чтоб оно тоже смешала его с паролем и инициализировала генератор (для расшифровывания данных с другой стороны). Другая сторона должна будет сделать тоже самое.

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

Есть еще OpenSSL. Может из него что взять для выработки начального состояния и авторизации по паролю?

(Tls какой-нить и сертификаты пока пользовать не хочу, думаю потом можно будет прикрутить).

И где про это все почитать можно? Да и с примерами «на пальцах»?

Спасибо.

 , , ,

seryoga
()

Виртуальная сеть и маршруты.

Форум — Admin

Доброго всем дня.

Ситуация такая:

Есть сервер с внешним белым адресом (пусть будет 2.3.4.5). На нем я поднимаю tun интерфейс (пусть будет tunS). Этот интерфейс имеет адрес 10.0.0.1

Подключаются к 2.3.4.5 клиенты и каждому я выдаю ip адрес из заданного интервала (192.168.1.2-192.168.1.100 с маской в 24 бита).

Теперь клиент.

Подключается, регистрируется и получает адрес, например 192.168.0.2/24. У клиента тоже есть tun (пусть будет tunC) интерфейс, которому я назначаю этот адрес и маску. + я добавляю маршрут на 10.0.0.1 на этот девайс «route add -host 10.0.0.1 dev tunC»

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

Но клиенты не видят друг друга.

Если я не сервере добавлю маршрут «route add -net 192.168.1.0/24 dev tunS» то все друг друга начинают видеть, я могу с одного клиента увидеть файлы другого и тд.

Но при пинге я получаю примерно следующее:

$ ping 192.168.1.3
PING 192.168.1.3 (192.168.1.3) 56(84) bytes of data.
64 bytes from 192.168.1.3: icmp_seq=1 ttl=63 time=112 ms
From 10.0.0.1: icmp_seq=2 Redirect Host(New nexthop: 192.168.1.3)
64 bytes from 192.168.1.3: icmp_seq=2 ttl=63 time=101 ms
From 10.0.0.1: icmp_seq=3 Redirect Host(New nexthop: 192.168.1.3)
64 bytes from 192.168.1.3: icmp_seq=3 ttl=63 time=100 ms

Если серверу на tunS повесить адрес из этого же диапазона (например 192.168.1.1), то ситуация не меняется.

Что вполне, мне кажется, логичным. Ошибка пропадает, если я клиентам не прописывают маршрут на 10.0.0.1. Понятно, что при этом я не вижу сервер.

Так вот где б почитать как правильно сделать подобную схему (объединения клиентов в одну сеть), чтоб они и друг друга видели и видели сервер?

 , ,

seryoga
()

sqlite и закпритованая таблица

Форум — Development

Доброго всем дня.

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

Несколько решений нашел, но они или сильно платные (SEE и другие), или криптуют весь файл.

Есть ли у sqlite такая возможность? или пока не поздно стоит глянуть на другие встраиваемые bd? Какие?

 ,

seryoga
()

Простой пример VPN client/server

Форум — Development

Доброго всем дня!

А что посоветуют благородные доны почитать по поводу написания простейшего клиента-сервера VPN? Как понимаю, нужно рыть в сторону /dev/tun. Нашел какие-то примерчики, но с теорией скупо. Кинулся, было, в сорцы OpenVPN, но там черт ногу сломит. Может какие совсем простые примеры есть?

PS: ссылка при постинге www.linux.org.ru/wiki/en/lor-faq ведет на 404

 ,

seryoga
()

Определить TCP порт для удаленного клиента.

Форум — Development

Приветствую!

Название написано довольно ненормально, но как сформулировать задачу в 1 предложении я не знаю.

Ситуация: Есть сервер, который открывает TCP. Открывать он может например 0.0.0.0:12345, 0.0.0.0:0, :::55555, 192.168.1.0:23568, 127.0.0.1:0 и так далее. То есть любой.

Теперь есть клиент, который «приходит» к серверу мультикаст-запросом и спрашивает у него порты, к которым он может присосаться.

И вот тут у меня затык и тупняк.

Как мне узнать, какие именно TCP-точки подходят данному клиенту. Адрес клиента я, само-собой, знаю. Знаю, так же, все открытые TCP с адресами и портами.

Отдавать ему все открытые порты не очень хорошая идея, потому как потом ему придется их перебирать, чего я и хочу избежать. Можно это как-то переносимым (по крайней мере linux, *bsd, ...) способом сделать? Джва дня уже парюсь...

 , ,

seryoga
()

Android Lockscreen с «красной кнопкой».

Форум — Mobile

Приветствую!

Я не знаю как такое искать в гугле, авось тут кто-то знает что-то похожее.

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

Знает кто-нибудь что-то похожее? Или такого нет и нужно расчехлять андроид-студию?

Перемещено JB из talks

 , ,

seryoga
()

fuse. Редирект на устройство.

Форум — Development

Приветствую!

Есть у меня девайс удаленный с линуксом на борту, там в директории /dev есть некое специальное устройство, в которое можно писать. Я накидал fuse клинета и сделал маунт на рабочую машину. Всю фс девайса я вижу, могу писать файлы, создавать, удалять дирекотрии, делать файлам chmod...но вот в устройство писать у меня не получается по причине ...

$ echo  "test" > /home/wrk/fuse/dev/mycooldevice
An error occurred while redirecting file '/home/wrk/fuse/dev/mycooldevice'
open: Permission denied

* /home/wrk/fuse/ - локальная директория, куда замаплена ФС девайса.

** локально на устройстве эта команда вполне работает

Ах да. Удаленный сервер, который запущен на устройстве, работает под root. И вот как я вижу удаленный файл.

$ ls -la dev/mycooldevice
crw------- 1 root root 245, 0 янв  1  1970 dev/mycooldevice

Проблема в том, что вызов open в клиенте fuse даже не пытается выполниться.

Я как-то, видимо плохо искал, не могу найти сведения о том, что ему еще не хватает. Может сталкивался кто с таким? Какой-то еще метод нужен для возможности записи в нерегулярные файлы?

Вот, кстати, весь кусок лога fuse клиента при исполнении echo.

unique: 179, opcode: LOOKUP (1), nodeid: 1, insize: 44, pid: 16707
LOOKUP /dev
getattr /dev
   NODEID: 2
   unique: 179, success, outsize: 144
unique: 180, opcode: LOOKUP (1), nodeid: 2, insize: 49, pid: 16707
LOOKUP /dev/mycooldevice
getattr /dev/mycooldevice
   NODEID: 3
   unique: 180, success, outsize: 144

то есть все, что он делает, это проверяет атрибуты файла ... :-/

а, да. FUSE_USE_VERSION=25

 

seryoga
()

Как проводить замеры производительности RPC?

Форум — Development

Всем привет.

Вот такое вопрос назрел. Есть библиотечка реализующая RPC и нужно как-то понять на сколько она производительна. Есть какие-то практики и вообще что за это почитать?

Что я делал:

Сначала просто поднял на одной машине точку на локальном сокете (/home/test/rpc.sock, например) и в цикле выполнил несколько тыщ запросов с ожиданием (запросил, подождал, получил ответ, вернул). грубо

for( int i=0; i<test_calls; ++i ) {
    make_call( );
}

замерил время исполнения и поделил на количество. Среднее получилось в районе 35 микросекунд (как понять хорошо это или плохо?).

Потом сказал серверу использовать несколько потоков для обработки запросов и натравил 32 таких же клиента (с локальной же машины, что, видимо, неправильно). и каждый показал среднее в районе 300 микросекунд. Как теперь, опять же, понять хорошо это или плохо?

Еще один тест. Скормил миллион сериализованных уже сообщений в процессор протокола и получил 3.5 (+-) секунды на обработку всех на 1 ядре.

Что еще такого можно придумать?

 , ,

seryoga
()

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