LINUX.ORG.RU

Сообщения PPP328

 

Функция с двойным количеством неизвестных

Форум — Development

Есть некий скрипт, который нужно дернуть из Си-кода. Проблема в том, что скрипт принимает 4 параметра:

script.pl 5 "text 1" 20 "text 2"

В си коде выглядит как-то так (выхлоп скрипта не нужен в принципе):

void ticket_create(u32 code, const char * text, i32 len, const char * file)
{
    char buffer[32768];

    sprintf(buffer,
            "script.pl %d \"%s\" %d \"%s\"",
            code, text, len, file);

    PrintInfo(0, "Going to create ticket: \"%s\"", buffer);

    system(buffer);
}
При этом вызывать `ticket_create` приходится так:
/// 1
    char buffer1[1000];
    char buffer2[1000];
    sprintf(buffer1, "Spl rewind failed in hall %d as SPL \"%s\" in CPL \"%s\".<br>",
            Hall(devindex), target_splid, target_cplid);
    sprintf(buffer2, "/tk/dd24/log/ctms/hall_%d.log", Hall(devindex));
    ticket_create(TICKET_REWIND_FAILED, buffer1, 10, buffer2);

/// 2
        char buffer1[1000];
        char buffer2[1000];
        sprintf(buffer1, "Can't find 'ShowPlaylist.Id' in SPL. SPL's splid is %s in hall %d.",
                splid, Hall(devindex));
        sprintf(buffer2, "/tk/dd24/log/ctms/spls/%d/%s/%s.xml", Hall(devindex), hr_time(10), splid);
        ticket_create(TICKET_SPL_NOID, buffer1, -1, buffer2);

/// 3
            char buffer1[1000];
            char buffer2[1000];
            sprintf(buffer1, "Serials mismatch in hall %d: \'%s\' (db) and \'%s\' (device).",
                    devicesdb.devices[devindex].hallid,
                    devicesdb.devices[devindex].serial, serial);
            sprintf(buffer2, "/tk/dd24/log/ctms/protocol-%d.log",
                    devicesdb.devices[devindex].hallid);
            ticket_create(TICKET_SERIAL_WRONG, buffer1, 50, buffer2);
Бесит, что надо создавать два буфера, сделал бы через эллипсис, но там два неизвестных. Разве что формировать всю строку для подачи скрипту, но это негибко - поменяют синтаксис местами и мне придется не одну функцию менять, а десятки вызовов.

Есть идеи?

 

PPP328
()

А как вы решаете зоопарк кодов возврата ошибки в си?

Форум — Development

Скажем у вас есть проект А, в которым вы юзаете в разное время написанные B и C, а потом еще подключаете стороннюю библиотеку D.

По историческим причинам у них у всех разные коды возврата ошибки (например A_init_convo(type_t type) возвращает 342 в случае если сокет недоступен, или B_send_transmission(u8 * data, u32 size) вернет 24 если data = NULL).

Делаете ли какие-либо обертки? У нас, например, есть проект (который пока что без внешних зависимостей, только наши либы, у которого особым образом регистрируются коды ошибок с описанием (связка функций error_register + XMACRO).

 

PPP328
()

GCC генерит говнокод при использованьь case X ... Z

Форум — Development

Использовал case X ... Z: https://s26.postimg.org/o78wqrs8p/2017-09-24_12-41-54.png
Переписал на case X : case Y: case Z: https://s26.postimg.org/t76cypxvd/2017-09-24_12-49-08.png

Отчего все так плохо? Я думал что он тупо при компиляции виртуально раскроет X ... Z в case X: case Y: case Z, а он просто судя по всему там вместо switch/case if'ы мутит.

Еще конструкция:

    case C_MOVE_LT               : command_move(ant, command); break;
    case C_MOVE_T                : command_move(ant, command); break;
    case C_MOVE_RT               : command_move(ant, command); break;
    case C_MOVE_L                : command_move(ant, command); break;
    case C_MOVE_R                : command_move(ant, command); break;
    case C_MOVE_LB               : command_move(ant, command); break;
    case C_MOVE_B                : command_move(ant, command); break;
    case C_MOVE_RB               : command_move(ant, command); break;

    case C_PICK_LT               : command_pick(ant, command); break;
    case C_PICK_T                : command_pick(ant, command); break;
    case C_PICK_RT               : command_pick(ant, command); break;
    case C_PICK_L                : command_pick(ant, command); break;
    case C_PICK_R                : command_pick(ant, command); break;
    case C_PICK_LB               : command_pick(ant, command); break;
    case C_PICK_B                : command_pick(ant, command); break;
    case C_PICK_RB               : command_pick(ant, command); break;

Выполняется в два раза быстрее чем

    case C_MOVE_LT               : 
    case C_MOVE_T                : 
    case C_MOVE_RT               : 
    case C_MOVE_L                : 
    case C_MOVE_R                : 
    case C_MOVE_LB               : 
    case C_MOVE_B                : 
    case C_MOVE_RB               : command_move(ant, command); break;

    case C_PICK_LT               : 
    case C_PICK_T                : 
    case C_PICK_RT               : 
    case C_PICK_L                : 
    case C_PICK_R                : 
    case C_PICK_LB               : 
    case C_PICK_B                : 
    case C_PICK_RB               : command_pick(ant, command); break;

 ,

PPP328
()

Как по правильному сделать механизм хранения статических строк для каждого треда?

Форум — Development

Так, как делают некоторые системные функции. Чтобы внутри есть статический буфер, куда какая-нибудь функция складывает свой результат, но чтобы если ее вызвали из другого потока она не перекрыла результат первого.

В голову идет только динамический массив структур, каждая из которых содержит буфер и thread_id. И каждый раз при обращении проверять, если такой тред и если нет - расширять массив, и выдавать новый буфер. Минусы - не почистится буфер при выходе и анализаторы будут гудеть. Еще время поиска, когда много тредов оно в теории может быть менее выгодно чем malloc/free.

Как это реализуют нормальные люди? Количество тредов не определено, может быть 5, может быть 50, может быть 500.

 ,

PPP328
()

При прокрутке мыши на U16.04 листает вверх

Форум — Desktop

Каждый раз когда трогаю колесико на мыши (или скролл тачпада) сначала делается рывок вверх на одну страницу, в потом уже листается как надо. Смена мыши не помогла (та же проблема на тачпаде). Thinkpad l560, xubuntu 16.04. Наблюдается во всех приложениях. Эффект проявляется не всегда.

Куда копать, какие логи показывать?

 ,

PPP328
()

Network manager не использует DNS

Форум — Desktop

Подключаюсь к protonvpn. Прописал ipv4 dns: 8.8.8.8 и 8.8.8.4, прописал ipv6 dns: 2001:4860:4860::8888, 2001:4860:4860::8844. Периодически (НЕ ВСЕГДА!) бросает на плашку провайдера если качать через wget. Через браузер без проблем, через wget - раза два зайдет, на второй-третий кидает на адрес где хостится провайдерская заглушка:

Когда нормально:
Распознаётся SITE (SITE)... IP1, IP2, IPV6b

Когда все плохо:
Распознаётся SITE (SITE)... 93.90.93.22, IPV6a, IPV6b

На 93.90.93.22 провайдерская заглушка. Меня смущает что ipv6 адрес в обоих случаях одинаковый.

Если прокидывать https_proxy то все нормально, но скорость чаще всего в говно. На protonvpn я упираюсь в скорость канала провайдера а не впн.

Как лечить?

P.S. На роутере стоит 8.8.8.8, все утилиты показывают 8.8.8.8

P.P.S. В консоли через sudo openvpn --config "..." ВСЁ работает!

 , , ,

PPP328
()

Автомаунт шифрованного раздела

Форум — Development

Есть раздел, скажем, на LUKS. Как сделать так, чтобы при буте системы он автоматом маунтился, но при этом если кто-то получит в руки компьютер со всеми жесткими дисками то не смог бы его расшифровать?

Целевой компьютер в Усть-Зажопинске, после первичной установки доступ к нему только удаленный.

Есть еще внешний сервер, который можно каким-либо образом использовать.

Для меня сложность в понимании того, где хранить ключ/пароль, потому что если он хранится на нешифрованном разделе для автомаунта - то при изъятии дисков он становится доступен публично.

Не криминал.

 ,

PPP328
()

ACPI захламляет dmesg

Форум — General
ACPI: \_SB_.PCI0.LPCB.EC0_.ECRD: 1 arguments were passed to a non-method ACPI object (RegionField) (20150930/nsarguments-230)

Каждые 10 секунд вот такое сообщение.

Lenovo thinkpad l560. Ubuntu 16.04

Если нужны какие-то еще выхлопы - запрашивайте.

 , , ,

PPP328
()

Thunar и Nautilus не выделяют файл по опции

Форум — Desktop

Жмакаем в браузере «открыть в папке» на скачанном файле и... Просто открывается каталог с файлом. А если у меня их там тысячи то без автоматического выделения найти файл почти нереально с учетом того что скачанные с веба файлы часто имеют имя типа «349fcec93cb84487ae1905c7789221e6-rtkit.xml»

Раньше это работало, потом после определенного момента перестало. Я теперь даже не вижу в man thunar такой опции (была -e или что-то такое).

Почему данный функционал был удален?

 ,

PPP328
()

Разбил лицо фейспалмом от openssl

Форум — Development

Пытались отладить программу которая работает с openssl.

Вывод: разработчики openssl говнокодеры и идиоты

#1

На новых версиях valgrind он просто не может терпеть весь тот ужас что написан в openssl и вылетает сразу. Баг висит уже год в confirmed, ничего делать никто не собирается: https://bugs.launchpad.net/ubuntu/ source/valgrind/ bug/1574437

#2

Пытались сейчас отладить на другом valgrind'е. Все, что возвращается из SSL_read valgrind считает неинициализированными значениями и генерирует тысячи предупреждений. Исследовали. Оказывается что надо пересобрать openssl с флагами -DPURIFY и -DPEDANTIC, потому что *openssl использует неинициализированные значения для получения рендома*. Нашли в configure (дело под слакой) флаг purify ставящий соответствующие флаги. Сюрприз! Он конфликтует с linux-elf. ПОлезли в исходники с надеждой посмотреть сильно ли плохо будет если мы просто проставим флаг -DPURIFY. Сюрприз№2:

#ifndef PURIFY /* purify complains */
        /* DO NOT REMOVE THE FOLLOWING CALL TO MD_Update()! */
        if (!MD_Update(&m,buf,j)) 
            goto err; 
        /* We know that line may cause programs such as 
           purify and valgrind to complain about use of 
           uninitialized data.  */ 
#endif
ОНИ ЗНАЮТ, НО ИМ П***Й! ТО ЧТО ЭТО ПОДЕЛИЕ НЕ ДАЕТ ОТЛАДИТЬ ПРОГРАММУ ИМ ТОЖЕ П***Й! АААААА!!!

Выдохнул. Если что - перенесите в толксы.

 , ,

PPP328
()

Не меняется размер видео в vlc

Форум — Desktop

Стоит галка подгонять под окно, видео все равно своего оригинального размера, только в левом-верхнем углу. Параметры «масштаб» не меняют ничего. Галка ставится - размер не меняется. Удалял настройки - нет эффекта. Проявилось с месяц назад.

 

PPP328
()

А есть ли анлокер экрана на распознавалке лица хозяина?

Форум — Desktop

В телефонах такая фича с года эдак 2010го. На десктопе под линь есть что-то подобное, пусть с каким-то допилом?

 , , ,

PPP328
()

Как провалидировать мультимедиа файлы?

Форум — Development

Есть файлы следующих форматов:

  • Изображения:
    • png
    • jpg
    • gif
  • Видео:
    • webm
  • Флеш:
    • swf

Мне нужно провести валидацию файла одного из вышеперечисленных форматов. Что я подразумеваю под валидацией:

  • Файл соответствует заявленному разрешению (недокачанные файлы, в том числе 0 байт)
  • Присутствует запись о всех блоках (битые файлы)
  • Файл является файлом заявленного формата (mv file.png file.gif)

Как этого достичь?

 , ,

PPP328
()

Скрипт для поиска доступной прокси для конкретного адреса

Форум — Security

Йо, написал тут скрипт который для требуемого адреса (в base64) подбирает доступную прокси. Работает для SSL.

https://github.com/codemeow/ssl_proxy_scanner/blob/master/scanner.sh

     ex.:
 ┌──────────────────────────────────────────────────────────────┐
 │ $script.sh aHR0cHM6Ly9zcG9ydC53YnVrLmJldGNpdHlydS5wdy9uZXcv  │
 │ # downloading ssl proxy list                                 │
 │ # filtering list of proxies                                  │
 │ # load list of proxies                                       │
 │ # checking 13.73.26.248:3128                                 │
 │ # connection failed                                          │
 │ # checking 144.217.170.87:3128                               │
 │ # connection failed                                          │
 │ # checking 35.196.8.4:80                                     │
 │ # connection established                                     │
 │ 35.196.8.4:80                                                │
 └──────────────────────────────────────────────────────────────┘

 , ,

PPP328
()

Добавить скринсейвер для xscreensaver

Форум — Desktop

Делал все по инструкции: https://ubuntuforums.org/showthread.php?t=2043619
Movie.desktop:

[Desktop Entry]
Encoding=UTF-8
Name=Movie
Comment=Plays Videos
TryExec=/home/alex/Разработка/Bash/screensavers/run.sh
Exec=/home/alex/Разработка/Bash/screensavers/run.sh
StartupNotify=false
Terminal=false
Type=Application
Categories=Screensaver;
run.sh:
#! /bin/bash

## setup MPlayer aruments, remove -nosound if you want the video
## to play sound. If you have to specify the video driver to use
## then add that to the list
MPLAYERARGS="-nosound -nolirc -wid "$XSCREENSAVER_WINDOW" -nostop-xscreensaver -fs -really-quiet"

#MPLAYERARGS="-nosound -nolirc -nostop-xscreensaver -fs"

## path to video
VIDEO="/home/alex/Видео/Заставки/RA-2.mp4"

exec mplayer $MPLAYERARGS -loop 0 "$VIDEO"

Даже в списке не показывался. Добавил запись в .xscreensaver:

				movie -root				    \n\
Появился в списке, но серый. При попытке запустить пишет: movie no such file.

Скрипт работает если запустить руками без параметров -wid «$XSCREENSAVER_WINDOW» и -really-quiet.

Что еще нужно добавить?

 

PPP328
()

bash - выполнить аргумент и вставить в выданную переменную

Форум — Development

Есть вот такие вот функции

function parse_search_posts()
# filename
{
    shell_args 1 $@

    local _oldIFS="$IFS"

    IFS=$'\n'    
    
    echo_info_n "posts: "
    list_posts=(                        \
        $( grep "foo bar" "$1"          \
        | egrep -o "$grep_quoted_https" \
        | grep $site_static             \
        | uniq ) )

    post_total=${#list_posts[@]}
    echo_info "${#list_posts[@]}"

    IFS="$_oldIFS"

    if [ "$post_total" -eq "0" ]
    then
        echo_info "no posts found"
        return
    fi
}

function parse_search_descs()
# filename
{
    shell_args 1 $@

    local _oldIFS="$IFS"

    IFS=$'\n'    
    
    echo_info_n "posts: "
    list_descs=(                 \
        $( grep "bar baz" "$1"   \
        | grep "bar foo" "$1"    \
        | grep $site_static      \
        | uniq ) )

    desc_total=${#list_descs[@]}
    echo_info "${#list_descs[@]}"

    IFS="$_oldIFS"

    if [ "$desc_total" -eq "0" ]
    then
        echo_info "no descs found"
        shell_die
    fi
}

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

function parse_search_template()
# filename commands variable text
{
    shell_args 4 $@

    local _oldIFS="$IFS"

    IFS=$'\n'    
    
    echo_info_n "$text: "
    <...>=( $( eval $commands ) )

    elem_total=${#<...>[@]}
    echo_info "${#<...>[@]}"

    IFS="$_oldIFS"

    if [ "$elem_total" -eq "0" ]
    then
        echo_info "no $text found"
        shell_die
    fi
}

Как мне в функцию прокинуть переменную <variable> чтобы в нее писалось? Если нельзя прокинуть переменную напрямую, то как можно это обойти?

Да, только bash. Perl\Python\etc лесом.

 

PPP328
()

Хранение тегов к изображениями в mysql

Форум — Development

Есть набор изображений. Пока их было меньше 100 рядом с каждым хранил xml файл с описанием и списком тегов. Грепал каталог по тегу, получал список файлов, скармливал дальше.

ВНЕЗАПНО каталог разросся до 500 ГБ. греп теперь работает 5 минут, что неудобно. Хочу перенести в базу mysql, благо она уже поднята.

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

 

PPP328
()

Нельзя повернуть экран при TearFree

Форум — Desktop

Карта интел, проблема один в один как https://01.org/linuxgraphics/forum/graphics-power-users/cannot-rotate-screen-...

Только у меня Xu16.04, Intel HD 520. Остальное как у него в логах. За год не починено. Куда бечь?

tl;dr
Без TearFree в хроме видео как будто ножом порезали. С TearFree нельзя повернуть монитор.

 , ,

PPP328
()

Чем отличается brasero от dd в плане копирования *с* CD/DVD диска?

Форум — General

Всегда снимал образы с помощью dd, а тут напоролся на диски которые на 90м Мегабайте говорят ошибку чтения и больше не дают читать диск. Сначала думал что царапанные, нет, новые. Выяснил что так работает «защита от копирования». При этом brasero этот диск копирует на ура.

В чем разница в работе brasero и dd?

И да, ультра хак - dd нормально копирует диск если его в этот момент смотреть с помощью vlc.

 , ,

PPP328
()

Git + ln -s

Форум — Development
./
+-file.c
+-file.h
+-storage -> /mnt/storage (made with ln -s)
             +- file2.c
             +- file2.h
git add storage/file2.c

fatal: спецификация пути «storage/file2.c» находится за символической ссылкой

Пробовал в локальном конфиге ставить

[core]
    symlinks = true

Пробовал ставить

[core]
    symlinks = false

Результат один и тот же. Как разрулить?

Ответ зачем оно мне:

Есть проект «А», он отдельный и никого не тянет. Есть проект «Б». Чтобы его собрать нужен проект А. Есть проект «В». Чтобы его собрать нужен проект А и проект Б.

В «В» и «Б» есть каталог code, в котором внутри есть соответствующие проекты. Я хочу чтобы у меня был на диске реп с «А», а «Б» тянул из него по симлинку (запарился синкать изменения руками), и чтобы «В» тянул изменения из «Б» и «А» тоже по симлинкам.

UPD
Обдумываю вариант с `sudo mount --bind SOURCEDIRECTORY TARGETDIRECTORY`

 ,

PPP328
()

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