LINUX.ORG.RU

Сообщения PPP328

 

Простейшая функция для теста: приватный и паблик ключи

Привет!

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

Кто может подсказать? Заранее спасибо!

 ,

PPP328
()

Заговор молчания о HTTP2

В свое время было столько ора о том что HTTP2 спасет мир, что везде будет счастье, что не будет больше хаков с spritemap, что сайты будут грузиться на 80% быстрее, что волосы будут мягкими и шелковистыми и х будет снова стоять.

Прошло 4 года...

И где это все? Когда-то отчитывались, что 70% сайтов поддержвают HTTP2 и хром с лисой сами делают upgrade. Даже SPDY от радости прикопали и обоссали.

 

PPP328
()

Горение от libc в Minix

Код:

#define TEST_SPEED_FABS_LOOPS  ((U32_MAX >> 3) + bxi_randu8())

static void check_fabs_speed(void)
{
    u32 i;
    f64 iterator = 1.1;
    f64 value    = 0.0;
    f64 sum_org   = 0;
    f64 sum_new   = 0;
    u32 loops = TEST_SPEED_FABS_LOOPS;

    test_time_start();
    {
        for (i = 0; i < loops; i++)
        {
            iterator *= -1.5;
            value    += iterator;
            sum_org  += fabs(value - 50.0);
            if (value > 1e8)
                value = 0.0;
            if (iterator > 1e8)
                iterator = 1.1;
        }
    }
    test_time_finish();
    test_time_print("fabs");

    iterator = 1.1;
    value    = 0.0;
    test_time_start();
    {
        for (i = 0; i < loops; i++)
        {
            iterator *= -1.5;
            value    += iterator;
            sum_new  += bxi_fabs(value - 50.0);
            if (value > 1e8)
                value = 0.0;
            if (iterator > 1e8)
                iterator = 1.1;
        }
    }
    test_time_finish();
    test_time_print("bxi_fabs");

    printf("%f\n%f\n", sum_org, sum_new);

    if (sum_org != sum_new)
        test_failed();
}
+ rand добавлен для того, чтобы компилятор это не свернул в `mov eax 24355184302566256`.

Суть кода - проверяет скорость и точность самописного fabs. Два блока кода почти идентичны, за исключением имени функции. Запускаем на Ubuntu 16.04, libc-2.23, x86_64:

24355184302566256.000000
24355184302566256.000000
То есть функция работает точно, различия только в скорости. Теперь переносим это на машину с Minix, libc-12-187, x86:
24355184305680488.000000
24355184302566256.000000
А теперь собственно, вопрос - А КАКОГО ФИГА? Первое число - сумма вычисленная системным fabs. Самописный посчитал одинаково на обоих платформах. Что там можно было сделать не так? Там нет математических вычислений, fabs(x) = |x|! Там 2 условия должно быть:
if (isnan(x)) return -x; 
return x > 0 ? x : -x;

В общем у меня подгорает - автоматические тесты фейлятся, система говорит что я дурак, а баг на самом деле в разработчиках Minix.

Что делать? Как это решить? Почему разный результат?

 , ,

PPP328
()

GCC пищит или sizeof(u32) != 4

Сабж

/* DISCLAIMER:
 *     I'm aware of "magic constants" in this file, 
 *     but they stay here because of strange gcc behaviour:
 *
 *     return val >> n | val << (32 - n);
 *
 *     unrolls to
 *
 *     mov     eax, DWORD PTR [rbp-8]
 *     mov     edx, DWORD PTR [rbp-4]
 *     mov     ecx, eax
 *     ror     edx, cl                 ← fast ror here
 *     mov     eax, edx
 *
 *     (x86-64 gcc 5.3, -O0),
 *
 *     but
 *
 *     return val >> n | val << (sizeof(val) * 8 - n);
 *
 *     unrolls to
 *
 *     mov     eax, DWORD PTR [rbp-8] ─┐
 *     mov     edx, DWORD PTR [rbp-4]  │
 *     mov     esi, edx                │
 *     mov     ecx, eax                │
 *     shr     esi, cl                 │
 *     mov     eax, 32                 ├─ no ror
 *     sub     eax, DWORD PTR [rbp-8]  │
 *     mov     edx, DWORD PTR [rbp-4]  │
 *     mov     ecx, eax                │
 *     sal     edx, cl                 │
 *     mov     eax, edx                │
 *     or      eax, esi               ─┘
 */

Пруф: https://godbolt.org/g/rMdXMF

Да, на -O0, но очень часто приходится собирать в debug для прод-узлов, а там -O0. SHA1 сильно базируется на rol, для отладки нужна дебажная инфа, файлы чекаются по 200+ ГБ, тут каждая секунда уже помогает.

 , ,

PPP328
()

libssl/crypto валится с сегфолтом

Есть такой код:

RError RDeviceSSLCreate(RDevice device)
{
    u32 portindex = 0;

    while (warehouse.devices.data[device].port[portindex])
    {
        warehouse.devices.data[device].ssl[portindex] =
            SSL_new(warehouse.devices.data[device].ctx);
        if (!warehouse.devices.data[device].ssl[portindex])
        {
            ERR_print_errors_fp(stdout);
            return R_ERROR_BADSSL;
        }

        if (!SSL_set_fd(warehouse.devices.data[device].ssl[portindex], warehouse.devices.data[device].socket[portindex]))
        {
            ERR_print_errors_fp(stdout);
            return R_ERROR_BADSSL;
        }

        if (SSL_connect(warehouse.devices.data[device].ssl[portindex]) == -1)
        {
            ERR_print_errors_fp(stdout);
            return R_ERROR_BADSSL;
        }

        portindex++;
    }
    return R_ERROR_SUCCESS;
}

Все стадии кроме последней идут успешно. Вываливается не всегда, а в 1-0.5% случаев. Обычно когда переподключение приходится делать несколько раз (устройство режектит или проблемы связи). Успешно проходит через все стадии и валится на SSL_connect. Примерно так:

#2  0xb727bba0 in ?? () from /lib/libcrypto.so.0
#3  0xb727bc4a in ?? () from /lib/libcrypto.so.0
#4  0xb727c32c in ERR_get_state () from /lib/libcrypto.so.0
#5  0xb727ae91 in ERR_clear_error () from /lib/libcrypto.so.0
#6  0xb7339091 in ssl23_connect () from /lib/libssl.so.0
#7  0xb7348dea in SSL_connect () from /lib/libssl.so.0
#8  0xb7535cd9 in RDeviceSSLCreate (device=5)
    at ./code/libratatoskr/devices/devices.c:255

Иногда сваливается на отправке:

Program terminated with signal 11, Segmentation fault.
#0  0xb734576c in ssl3_write () from /lib/libssl.so.0
#0  0xb734576c in ssl3_write () from /lib/libssl.so.0
#1  0xb735afa2 in SSL_write () from /lib/libssl.so.0
#2  0xb754cc78 in sendall (index=1, bytes=..., portindex=0)
    at ./code/libratatoskr/definitions/serials.c:114

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

 , ,

PPP328
()

inkscape, trace bitmap зеленые ободки

Пытаюсь затрейсить изображение, ставлю по цвету, 256 слоев, ставлю все галки типа «оптимизировать», «убрать фон» и пр, жму «ок», жду 15 минут и получаю зеленые ободки вокруг каждой группы. При экспорте в png сохраняются, так что дело не в баге отрисовки, оно реально делает группу слоев с border color = green.

До: https://pp.userapi.com/c847020/v847020746/4312c/pbbNH18EWso.jpg
После: https://pp.userapi.com/c847020/v847020746/43122/l4w_bE9HDsY.jpg

Пробовал играться с галками, время обработки растет, зеленые границы не уходят.

 ,

PPP328
()

Повторить объединенные запросы для каждой строки

Дело происходит в LibreOfficeBase (HSQLDB), так как эта зараза не умеет в умную группировку с сабсуммами в отчетах, приходится делать SQL-view с этой самой группировкой.

Вот я написал блок группы:

SELECT 'Категория'        as "col1", 
       ' '                as "col2",
       "Категории"."name" as "col3"
  FROM "Категории"
 WHERE "Категории"."key" = 2

UNION ALL

SELECT "Расходы"."date" as "col1",
       "Расходы"."sum"  as "col2",
       "Расходы"."name" as "col3"
  FROM "Расходы"
 WHERE DATEDIFF( 'day', "Расходы"."date", CURRENT_DATE ) < 30
   AND "Расходы"."category" = 2

UNION ALL

SELECT ' '                  as "col1",
       sum("Расходы"."sum") as "col2",
       'Сумма'              as "col3"
  FROM "Расходы"
 WHERE DATEDIFF( 'day', "Расходы"."date", CURRENT_DATE ) < 30
   AND "Расходы"."category" = 2
GROUP BY
    "Расходы"."category"

UNION ALL

SELECT ' ' as "col1",
       ' ' as "col2",
       ' ' as "col3"
  FROM "DUAL"

Теперь мне надо повторить этот блок для каждой строки таблицы «Категории» (поля key и name), заменяя 2 на «Расходы».«key».

Я пробовал сделать `select * from ( ... = B2.key ) as B1, Расходы as B2`, но ругаемси на то что B2.key не существует.

 ,

PPP328
()

Неиспользуемые функции в си-проекте

Есть какая-нибудь тулза чтобы показать что ххх() не используется в проекте?

Уточнение - проект с кастомными скриптами сборки, около 100 файлов.

 ,

PPP328
()

Какой же отвратительный этот ваш Libre Office Base

Про то, что он лагает я молчу.
Про то, что у него миллионы багов отрисовки я молчу. https://s13.postimg.org/ayam1xt6f/2018-03-19_16-14-03.png
Про то, что он может вылететь при создании отчета из трех строк я тоже молчу

Но блин, когда он select union select не считает запросом селект это как? При этом в «Сервис -> Выполнить SQL» ВНЕЗАПНО это хороший запрос, а как VIEW это плохой запрос. Как тогда в этом кривом барахле делать отчет с полем «общая сумма»?

https://s13.postimg.org/6nvy6bt87/2018-03-19_16-02-54.png
https://s13.postimg.org/zdiu2z4xz/2018-03-19_16-06-37.png

Притом если вместо 0 ставить просто пустые строки (", ", "), чтобы не сильно похабить отчет - то, парам-пам-пам, выскакивает вообще java exception по поводу кривой конвертации.

SELECT "A"."amount" 
            + IFNULL( ( SELECT COALESCE ( SUM( "I2"."sum" ), 0 ) FROM "Доходы"  AS "I2" WHERE "I2"."active" = "A"."key" GROUP BY "I2"."active" ), 0 ) 
            - IFNULL( ( SELECT COALESCE ( SUM( "I3"."sum" ), 0 ) FROM "Расходы" AS "I3" WHERE "I3"."active" = "A"."key" GROUP BY "I3"."active" ), 0 ) AS "result", 
       "A"."name" AS "name", 
       "V"."short" AS "cur",
       ("A"."amount" 
            + IFNULL( ( SELECT COALESCE ( SUM( "I2"."sum" ), 0 ) FROM "Доходы"  AS "I2" WHERE "I2"."active" = "A"."key" GROUP BY "I2"."active" ), 0 ) 
            - IFNULL( ( SELECT COALESCE ( SUM( "I3"."sum" ), 0 ) FROM "Расходы" AS "I3" WHERE "I3"."active" = "A"."key" GROUP BY "I3"."active" ), 0 )) * "V"."rate" AS "in_rub"
FROM "Активы" AS "A", 
     "Валюты" AS "V" 
WHERE "A"."currency" = "V"."key"

UNION ALL

SELECT  '0' AS "result", 
        '0' AS "name", 
        '0' AS "cur",
        SUM(("A"."amount" 
            + IFNULL( ( SELECT COALESCE ( SUM( "I2"."sum" ), 0 ) FROM "Доходы"  AS "I2" WHERE "I2"."active" = "A"."key" GROUP BY "I2"."active" ), 0 ) 
            - IFNULL( ( SELECT COALESCE ( SUM( "I3"."sum" ), 0 ) FROM "Расходы" AS "I3" WHERE "I3"."active" = "A"."key" GROUP BY "I3"."active" ), 0 )) * "V"."rate") AS "in_rub"
  FROM "Активы" AS "A", 
       "Валюты" AS "V" 
WHERE "A"."currency" = "V"."key"

Вопросы: фиксится ли его кривизна отрисовки?
Как нормальные люди делают строчку total?

 

PPP328
()

Я не так готовлю libreoffice base?

Есть таблица «активы», есть таблица «доходы». Связка `[actives.id (1) -> (n) incomes.active]`. Когда пару лет назад делал себе базу учета, то текущее значение суммы актива вычислялось как начальное + sum(select value from incomes). Вопрос: так и надо делать, или есть способ модифицировать значение incomes.value, чтобы запрос на текущее состояние счета не требовал сложения 2000 столбцов?

 

PPP328
()

Авторизация клиент-клиент

Пишу тут как хобби мессенджер с end-point шифрованием и возможностью защищенной работы при захвате сервера.

Хочу реализовать следующие фичи:
* Отсутствие базы на сервере
* Как следствие - отсутствие авторизации на сервере
* Передача public ключа между пользователями физически («на флешках»), чтобы избежать его палева по сети.

Пока уперся в следующую проблему:
Алиса хочет послать сообщение Бобу.
Алиса шифрует сообщение своим приватным и публичным Боба
Алиса шлет сообщение на сервер с пометкой «Бобу»
Сервер видит, что у него залогинено три Боба.

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

Первой вариант - плохо, потому что требует выслать всем Бобам «лишние» сообщения. Если их 100, то они будут получать непрерывный поток хлама, адресованный не им.
Второй вариант - плохо, потому что если Бобов 100, то это займет очень много времени.

Как такую задачу уже решили? Хочу авторизацию через клиентов и чтобы на сервере не было публичных ключей пользователей.

 , ,

PPP328
()

Астра Линукс оказался не готов

https://geektimes.ru/post/297819/

Управление делами президента (УДП) РФ не сумело в срок выполнить заявленные показатели по импортозамещению и перейти с американской ОС Windows на российскую Astra Linux. Согласно графику, в 2017 году доля использования отечественной ОС Astra Linux Special Edition производства НПО «РусБИТех» должна была составить 10%, а по факту составила 0%.

Согласно опубликованному на сайте УДП плану-графику перехода на использование отечественного офисного ПО в 2017–2020 годах, импортозамещение текстовых редакторов и коммуникационного ПО также составляет 0%. Доля отечественных почтовых приложений пока тоже 0%.

Причиной невыполнения плана в УПД назвали недостаточную готовность Astra Linux. Тестирование продуктов показало преждевременность их внедрения. Разработчикам этой ОС поручили «доработать дистрибутив и код программного обеспечения».

А нефиг потому что было GPL нарушать!

 ,

PPP328
()

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

Нужен чтобы поднять там 24\7 приложение в 5-10 мб объемом. Трафик 5-20 МБ в сутки.

Перемещено tailgunner из development

 

PPP328
()

Не выключается 16.04

https://s13.postimg.org/61dmbb4on/2018-01-15_22.45.06.jpg

На вот этой надписи может всю ночь провисеть. На CTRL+ALT+DELETE реагирует ребутом как и положено.

 , ,

PPP328
()

После обновления начал щелкать звук перед его активацией

Щелкает (и очень громко) даже если просто листать 9gag с выключенным звуком, где все ролики по умолчанию в mute. Щелкает не только встроенными колонками, но и в наушниках, если они вставлены.

Началось после недавнего обновления на Ubuntu 16.04

 , ,

PPP328
()

Max частота на AC

Чет не нашел я как в бубунте (16.04) искаропки сделать чтобы при подключении адаптера питания сразу стало MAX частота процессора, а при вытыкании снова powersafe?

 ,

PPP328
()

Программно залипают клавиши

На xU16.04 (lenovo thinkpad L560) наблюдаю следующую проблему - периодически (раз-два в неделю) залипает клавиша на клавиатуре - обычно либо влево, либо пробел, либо backspace либо ctrl. В связи с этим только одно решение - ребут, ибо на сочетания клавиш из-за залипания не реагирует (даже в tty не перейти). После ребута все ок, так что подозреваю софтовую проблему. В /var/log/syslog ничего подозрительного.

Зависает обычно в starbound (влево) или в QtCreator (пробел\ctrl). Иногда (редко) решает так - включением и отключением режима FnLk. В wow не залипало никогда, так что подозреваю что дело в одновременном нажатии какого-то ряда клавиш.

При залипании функциональные клавиши продолжают работать (Fn+F2 - звук тише и проч).

Как отладить и решить? Может это вообще какой-то режим типа виндового shiftx5 включается?

dmesg забит

[ 2372.596719] ACPI: \_SB_.PCI0.LPCB.EC0_.ECRD: 1 arguments were passed to a non-method ACPI object (RegionField) (20150930/nsarguments-230)
[ 2382.604509] ACPI: \_SB_.PCI0.LPCB.EC0_.ECRD: 1 arguments were passed to a non-method ACPI object (RegionField) (20150930/nsarguments-230)
[ 2382.604557] ACPI: \_SB_.PCI0.LPCB.EC0_.ECRD: 1 arguments were passed to a non-method ACPI object (RegionField) (20150930/nsarguments-230)
, когда-то пытался решить, но неосилил после исправления этого косяка исправить еще 200+ ошибок компиляции.

 , ,

PPP328
()

Как разрешить круговую зависимость структур?

typedef void (* B)(C *);

typedef struct
{
    [..]

    B b;
} A;

typedef struct
{
    [..]

    A * a;
} C;

Уже битый час бьюсь, не могу понять, можно ли решить это нормальным способом. В C всего лишь указатель на A, поэтому скорее всего можно как-то задекларить.

 

PPP328
()

Будет ли подлежащая библиотека проинициализирована ранее через __attribute__ ((constructor))

Привет!

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

Нужен официальный пруф.

Вопрос номер два. А будет это работать в более сложной цепочке? A.so (init A) <- B.so (init B, related on A) <- C.elf (init C, related on B)

Minimal Code Example:

mkdir -p /tmp/libtest && echo -e "#include <stdio.h>\n\nint target = 10;\n\nstatic void target_init(void) __attribute__ ((constructor));\n\nstatic void target_init(void)\n{\n    target = 50;\n}\n\nint target_return(void)\n{\n\n    return target;\n}\n" > /tmp/libtest/lib.c && echo -e "#include <stdio.h>\n\nextern int target_return(void);\n\nstatic void main_init(void) __attribute__ ((constructor));\n\nstatic void main_init(void)\n{\n    printf(\"main_init: %d\\\\n\", target_return())\n}\n\nint main(void)\n{\n    printf(\"main: %d\\\\n\", target_return());\n    return 0;\n}\n" > /tmp/libtest/main.c && gcc -fPIC -shared /tmp/libtest/lib.c -o /tmp/libtest/liblib.so && gcc main.c -o /tmp/libtest/main.elf -L. -llib && LD_LIBRARY_PATH=/tmp/libtest/ /tmp/libtest/main.elf

 

PPP328
()

Starbound под intel

На текущей Intel® HD Graphics 520 можно нормально играть в Saints Row IV. Ну, думаю, со Starbound под онтопик проблем не будет. А фиг там:

Доходит до главного меню, потом зависание и вылет.

intel_do_flush_locked failed: Input/output error

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

А адекватные методы решения есть?

 , ,

PPP328
()

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