LINUX.ORG.RU

Сообщения PPP328

 

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

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

 , , ,

PPP328
()

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

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

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

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

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

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

 , ,

PPP328
()

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

Йо, написал тут скрипт который для требуемого адреса (в 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

Делал все по инструкции: 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 - выполнить аргумент и вставить в выданную переменную

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

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

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

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

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

 

PPP328
()

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

Карта интел, проблема один в один как 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 диска?

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

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

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

 , ,

PPP328
()

Git + ln -s

./
+-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
()

Покритикуйте либу логгинга памяти

https://github.com/codemeow/svadilfari - субж

Маскирует malloc/calloc/realloc/free с помощью макросов чтобы не менять синтаксис.

Можно переназначит стандартные системные функции чтобы юзать например какие-нибудь raspberry_malloc_ex()

Есть опции, можно включить например автозамену malloc на calloc и автовыход\авторепорт коллбеком в случае фейла

Есть система коллбеков на репорт ошибок

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

В случае необходимости можно сконвертить либовый поинтер в системный и заюзать какой-нибудь внешний free.

Юзает локи.

Либа с типами (bixi) юзает только один системный хэдер: <time.h>, остальное реализует сама. Может быть полезно на урезанных системах. Тот же хэдер использует svadilfari, кроме него используется <stddef.h> для size_t. Плюс используется <stdlib.h> для дефотного назначения malloc/calloc/realloc/free. Тестовая прога в комплекте использует <stdio.h> чтобы выводить на экран.

Можно: детектить лики, смотреть кто где много жрет, получать инфу о размере аллоцированного поинтера.

 ,

PPP328
()

Удалить лишние классы в html via Beautiful Soup

<div class="mediawiki ltr ns-0 ns-subject page-xxsfds TOC_hide oasis-breakpoints wikinav2 skin-oasis user-anon wiki-xxsfds">

Как мне удалить все классы кроме mediawiki?

from bs4 import BeautifulSoup, Comment
import sys
import re
import os

with open(sys.argv[1], 'r') as content_file:
    data = content_file.read()

soup = BeautifulSoup(data, "lxml")

for div in soup.find_all("div", {'class':'mediawiki'}):
     <...>

Ну и чтобы два раза не вставать - когда пытаюсь писать в тот же файл мне prettify орет что файл не ASCII и оно не мочь в UTF-8 (даже если ставить .encode("UTF-8"). Приходится делать s.py > в отдельный файл, только так работает.

 ,

PPP328
()

Как сделать rand8 с периодом больше 256?

Сейчас вот так:

#define BXI_RAND_MULTIPLIER (1103515245)
#define BXI_RAND_INCREMENT  (12345)

static u32 global_next = 1;

static void nextrand(void)
{
    global_next = global_next * BXI_RAND_MULTIPLIER + BXI_RAND_INCREMENT;
}

void bxi_srand(u32 seed)
{
    global_next = seed;
}

<...>

u8 bxi_randu8 (void)
{
    nextrand();

    return global_next % (U8_MAX + 1);
}
https://github.com/codemeow/bixi/blob/master/code/libbixi/random/bxirand.c#L24

Проблема в том, что цикл всего 256 значений (просто каждое по одному разу) в итоге uuidv4'ы повторяются каждые 16 значений. Что можно с этим поделать и при этом не привязываясь к /dev/random?

 ,

PPP328
()

Макулатура по графическому алгоритму.

Есть кадр из мультфильма, например вот этот: https://s-media-cache-ak0.pinimg.com/736x/99/c0/52/99c052d7e5bc947ccb76e582d7...

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

Суть задачи - отделить в автоматическом режиме то что нарисовано художником фонов от того что нарисовано художником-аниматором.

 , ,

PPP328
()

Спаять вместе ряд ts файлов

Использую kdenlive, появляется заикание звука там где граница двух роликов. Как этого избежать?

 , , ,

PPP328
()

Как вытащить список ссылок из html файлов?

Положим есть файл xxx.html. В нем присутствуют ссылки на ресурс example.com типа "https://example.com/article1.xml". Как мне башем вытащить оттуда список этих ссылок? Ссылка может быть в любом теге или свойстве.

Пробовал sed, но он вытаскивать либо жадно либо всю встроку:

sed 's/^.*href="\([^"]*\).*$/\1/'

 

PPP328
()

Chrome скачивает swf

Чет он всю жизнь нормально проигрывал swf, а сейчас чет везде скачивает вместо того чтобы проигрывать. Открываешь его через адресную строку - скачивает, через drag'n'drop - скачивает, через инкогнито - скачивает.

В chrome://plugins галка стоит (не стояла, поставил)
В chrome://settings/content flash включен для всех

Что еще надо сделать чтобы эта шайтан-машина не скачивала а проигрывала?

 , ,

PPP328
()

Не работает фильтрация рекламы в vk в chrome+adblock plus

Галочка ненавязчивой рекламы выключена, стоят фильтры:

vk.com##.ads_ads_box3.ver.repeat_ver.size_site
vk.com##.ads_ads_box1.ver.repeat_ver.size_site
vk.com##.ads_ads_box2.ver.repeat_ver.size_site
vk.com##.ads_ad_box_border.repeat_ver.redesign.first
vk.com##div#ads_left
Реклама не блокируется. Если нажать на значок адблока и сделать «заблокировать элемент» на рекламе *и ввести один из этих фильтров* то блокируется. Перезагружаем страницу (или браузер) - не блокируется.

Как лечить?

 , ,

PPP328
()

Получение удаленного мак-адреса

Существует ли возможность в си получить mac-адрес сервера к которому подключен сокет? В плане что у меня нет никакой инфы, как и к чему подключен сокет (eth0/eth1/etc) кроме как самого сокета.

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

Что подскажете?

 

PPP328
()

Как использовать QtCreator для Си?

Как в нем включить подсветку синтаксиса для си а не с++? Даже если прямо в нем создать plain C project он все равно применяет к нему подсветку синтаксиса с++.Расширения файлов тоже игнорируются.

Что конкретно не устраивает:
defined __cplusplus
namespace
bool
virtual

ну и собственно остальные слова из с++. Ломается подсветка синтаксиса из-за чего нельзя увидеть настоящие ошибки. Плюс из-за макроса нельзя видеть какой блок кода выполнится в IFDEF'ах.

 , ,

PPP328
()

Почему в сорцах FreeBSD такой говнокод?

Тут недавно Алкоголь-студия проверяла код FreeBSD (ищите на хабре, не собираюсь добавлять ссылок этим спамерам), так вот. Там такое место есть:

#ifdef Q
#undef Q
#endif
#define Q(_r) \
  (((_r) == 1.5) ? 0 : (((_r) ==2.25) ? 1 : (((_r) == 3) ? 2 : \
  (((_r) == 4.5) ? 3 : (((_r) ==  6)  ? 4 : (((_r) == 9) ? 5 : \
  (((_r) == 12)  ? 6 : (((_r) == 13.5)? 7 : 0))))))))
static const struct txschedule series_quarter[] = {
  { 3,Q( 1.5),3,Q(1.5), 0,Q(1.5), 0,Q(1.5) },  /* 1.5Mb/s */
  { 4,Q(2.25),3,Q(1.5), 4,Q(1.5), 0,Q(1.5) },  /*2.25Mb/s */
  { 4,Q(   3),3,Q(1.5), 4,Q(1.5), 0,Q(1.5) },  /*   3Mb/s */
  { 4,Q( 4.5),3,Q(  3), 4,Q(1.5), 2,Q(1.5) },  /* 4.5Mb/s */
  { 4,Q(   6),3,Q(4.5), 4,Q(  3), 2,Q(1.5) },  /*   6Mb/s */
  { 4,Q(   9),3,Q(  6), 4,Q(4.5), 2,Q(1.5) },  /*   9Mb/s */
  { 4,Q(  12),3,Q(  9), 4,Q(  6), 2,Q(  3) },  /*  12Mb/s */
  { 4,Q(13.5),3,Q( 12), 4,Q(  9), 2,Q(  6) }  /*13.5Mb/s */
};
#undef Q

Разворачивается это чудо в

static const struct txschedule series_quarter[] = {
  { 3,(((1.5) == 1.5) ? 0 : (((1.5) ==2.25) ? 1 : (((1.5) == 3) ? 2 : (((1.5) == 4.5) ? 3 : (((1.5) == 6) ? 4 : (((1.5) == 9) ? 5 : (((1.5) == 12) ? 6 : (((1.5) == 13.5)? 7 : 0)))))))),3,(((1.5) == 1.5) ? 0 : (((1.5) ==2.25) ? 1 : (((1.5) == 3) ? 2 : (((1.5) == 4.5) ? 3 : (((1.5) == 6) ? 4 : (((1.5) == 9) ? 5 : (((1.5) == 12) ? 6 : (((1.5) == 13.5)? 7 : 0)))))))), 0,(((1.5) == 1.5) ? 0 : (((1.5) ==2.25) ? 1 : (((1.5) == 3) ? 2 : (((1.5) == 4.5) ? 3 : (((1.5) == 6) ? 4 : (((1.5) == 9) ? 5 : (((1.5) == 12) ? 6 : (((1.5) == 13.5)? 7 : 0)))))))), 0,(((1.5) == 1.5) ? 0 : (((1.5) ==2.25) ? 1 : (((1.5) == 3) ? 2 : (((1.5) == 4.5) ? 3 : (((1.5) == 6) ? 4 : (((1.5) == 9) ? 5 : (((1.5) == 12) ? 6 : (((1.5) == 13.5)? 7 : 0)))))))) },
  { 4,(((2.25) == 1.5) ? 0 : (((2.25) ==2.25) ? 1 : (((2.25) == 3) ? 2 : (((2.25) == 4.5) ? 3 : (((2.25) == 6) ? 4 : (((2.25) == 9) ? 5 : (((2.25) == 12) ? 6 : (((2.25) == 13.5)? 7 : 0)))))))),3,(((1.5) == 1.5) ? 0 : (((1.5) ==2.25) ? 1 : (((1.5) == 3) ? 2 : (((1.5) == 4.5) ? 3 : (((1.5) == 6) ? 4 : (((1.5) == 9) ? 5 : (((1.5) == 12) ? 6 : (((1.5) == 13.5)? 7 : 0)))))))), 4,(((1.5) == 1.5) ? 0 : (((1.5) ==2.25) ? 1 : (((1.5) == 3) ? 2 : (((1.5) == 4.5) ? 3 : (((1.5) == 6) ? 4 : (((1.5) == 9) ? 5 : (((1.5) == 12) ? 6 : (((1.5) == 13.5)? 7 : 0)))))))), 0,(((1.5) == 1.5) ? 0 : (((1.5) ==2.25) ? 1 : (((1.5) == 3) ? 2 : (((1.5) == 4.5) ? 3 : (((1.5) == 6) ? 4 : (((1.5) == 9) ? 5 : (((1.5) == 12) ? 6 : (((1.5) == 13.5)? 7 : 0)))))))) },
  { 4,(((3) == 1.5) ? 0 : (((3) ==2.25) ? 1 : (((3) == 3) ? 2 : (((3) == 4.5) ? 3 : (((3) == 6) ? 4 : (((3) == 9) ? 5 : (((3) == 12) ? 6 : (((3) == 13.5)? 7 : 0)))))))),3,(((1.5) == 1.5) ? 0 : (((1.5) ==2.25) ? 1 : (((1.5) == 3) ? 2 : (((1.5) == 4.5) ? 3 : (((1.5) == 6) ? 4 : (((1.5) == 9) ? 5 : (((1.5) == 12) ? 6 : (((1.5) == 13.5)? 7 : 0)))))))), 4,(((1.5) == 1.5) ? 0 : (((1.5) ==2.25) ? 1 : (((1.5) == 3) ? 2 : (((1.5) == 4.5) ? 3 : (((1.5) == 6) ? 4 : (((1.5) == 9) ? 5 : (((1.5) == 12) ? 6 : (((1.5) == 13.5)? 7 : 0)))))))), 0,(((1.5) == 1.5) ? 0 : (((1.5) ==2.25) ? 1 : (((1.5) == 3) ? 2 : (((1.5) == 4.5) ? 3 : (((1.5) == 6) ? 4 : (((1.5) == 9) ? 5 : (((1.5) == 12) ? 6 : (((1.5) == 13.5)? 7 : 0)))))))) },
  { 4,(((4.5) == 1.5) ? 0 : (((4.5) ==2.25) ? 1 : (((4.5) == 3) ? 2 : (((4.5) == 4.5) ? 3 : (((4.5) == 6) ? 4 : (((4.5) == 9) ? 5 : (((4.5) == 12) ? 6 : (((4.5) == 13.5)? 7 : 0)))))))),3,(((3) == 1.5) ? 0 : (((3) ==2.25) ? 1 : (((3) == 3) ? 2 : (((3) == 4.5) ? 3 : (((3) == 6) ? 4 : (((3) == 9) ? 5 : (((3) == 12) ? 6 : (((3) == 13.5)? 7 : 0)))))))), 4,(((1.5) == 1.5) ? 0 : (((1.5) ==2.25) ? 1 : (((1.5) == 3) ? 2 : (((1.5) == 4.5) ? 3 : (((1.5) == 6) ? 4 : (((1.5) == 9) ? 5 : (((1.5) == 12) ? 6 : (((1.5) == 13.5)? 7 : 0)))))))), 2,(((1.5) == 1.5) ? 0 : (((1.5) ==2.25) ? 1 : (((1.5) == 3) ? 2 : (((1.5) == 4.5) ? 3 : (((1.5) == 6) ? 4 : (((1.5) == 9) ? 5 : (((1.5) == 12) ? 6 : (((1.5) == 13.5)? 7 : 0)))))))) },
  { 4,(((6) == 1.5) ? 0 : (((6) ==2.25) ? 1 : (((6) == 3) ? 2 : (((6) == 4.5) ? 3 : (((6) == 6) ? 4 : (((6) == 9) ? 5 : (((6) == 12) ? 6 : (((6) == 13.5)? 7 : 0)))))))),3,(((4.5) == 1.5) ? 0 : (((4.5) ==2.25) ? 1 : (((4.5) == 3) ? 2 : (((4.5) == 4.5) ? 3 : (((4.5) == 6) ? 4 : (((4.5) == 9) ? 5 : (((4.5) == 12) ? 6 : (((4.5) == 13.5)? 7 : 0)))))))), 4,(((3) == 1.5) ? 0 : (((3) ==2.25) ? 1 : (((3) == 3) ? 2 : (((3) == 4.5) ? 3 : (((3) == 6) ? 4 : (((3) == 9) ? 5 : (((3) == 12) ? 6 : (((3) == 13.5)? 7 : 0)))))))), 2,(((1.5) == 1.5) ? 0 : (((1.5) ==2.25) ? 1 : (((1.5) == 3) ? 2 : (((1.5) == 4.5) ? 3 : (((1.5) == 6) ? 4 : (((1.5) == 9) ? 5 : (((1.5) == 12) ? 6 : (((1.5) == 13.5)? 7 : 0)))))))) },
  { 4,(((9) == 1.5) ? 0 : (((9) ==2.25) ? 1 : (((9) == 3) ? 2 : (((9) == 4.5) ? 3 : (((9) == 6) ? 4 : (((9) == 9) ? 5 : (((9) == 12) ? 6 : (((9) == 13.5)? 7 : 0)))))))),3,(((6) == 1.5) ? 0 : (((6) ==2.25) ? 1 : (((6) == 3) ? 2 : (((6) == 4.5) ? 3 : (((6) == 6) ? 4 : (((6) == 9) ? 5 : (((6) == 12) ? 6 : (((6) == 13.5)? 7 : 0)))))))), 4,(((4.5) == 1.5) ? 0 : (((4.5) ==2.25) ? 1 : (((4.5) == 3) ? 2 : (((4.5) == 4.5) ? 3 : (((4.5) == 6) ? 4 : (((4.5) == 9) ? 5 : (((4.5) == 12) ? 6 : (((4.5) == 13.5)? 7 : 0)))))))), 2,(((1.5) == 1.5) ? 0 : (((1.5) ==2.25) ? 1 : (((1.5) == 3) ? 2 : (((1.5) == 4.5) ? 3 : (((1.5) == 6) ? 4 : (((1.5) == 9) ? 5 : (((1.5) == 12) ? 6 : (((1.5) == 13.5)? 7 : 0)))))))) },
  { 4,(((12) == 1.5) ? 0 : (((12) ==2.25) ? 1 : (((12) == 3) ? 2 : (((12) == 4.5) ? 3 : (((12) == 6) ? 4 : (((12) == 9) ? 5 : (((12) == 12) ? 6 : (((12) == 13.5)? 7 : 0)))))))),3,(((9) == 1.5) ? 0 : (((9) ==2.25) ? 1 : (((9) == 3) ? 2 : (((9) == 4.5) ? 3 : (((9) == 6) ? 4 : (((9) == 9) ? 5 : (((9) == 12) ? 6 : (((9) == 13.5)? 7 : 0)))))))), 4,(((6) == 1.5) ? 0 : (((6) ==2.25) ? 1 : (((6) == 3) ? 2 : (((6) == 4.5) ? 3 : (((6) == 6) ? 4 : (((6) == 9) ? 5 : (((6) == 12) ? 6 : (((6) == 13.5)? 7 : 0)))))))), 2,(((3) == 1.5) ? 0 : (((3) ==2.25) ? 1 : (((3) == 3) ? 2 : (((3) == 4.5) ? 3 : (((3) == 6) ? 4 : (((3) == 9) ? 5 : (((3) == 12) ? 6 : (((3) == 13.5)? 7 : 0)))))))) },
  { 4,(((13.5) == 1.5) ? 0 : (((13.5) ==2.25) ? 1 : (((13.5) == 3) ? 2 : (((13.5) == 4.5) ? 3 : (((13.5) == 6) ? 4 : (((13.5) == 9) ? 5 : (((13.5) == 12) ? 6 : (((13.5) == 13.5)? 7 : 0)))))))),3,(((12) == 1.5) ? 0 : (((12) ==2.25) ? 1 : (((12) == 3) ? 2 : (((12) == 4.5) ? 3 : (((12) == 6) ? 4 : (((12) == 9) ? 5 : (((12) == 12) ? 6 : (((12) == 13.5)? 7 : 0)))))))), 4,(((9) == 1.5) ? 0 : (((9) ==2.25) ? 1 : (((9) == 3) ? 2 : (((9) == 4.5) ? 3 : (((9) == 6) ? 4 : (((9) == 9) ? 5 : (((9) == 12) ? 6 : (((9) == 13.5)? 7 : 0)))))))), 2,(((6) == 1.5) ? 0 : (((6) ==2.25) ? 1 : (((6) == 3) ? 2 : (((6) == 4.5) ? 3 : (((6) == 6) ? 4 : (((6) == 9) ? 5 : (((6) == 12) ? 6 : (((6) == 13.5)? 7 : 0)))))))) }
};

Так вот. Что, блин мешает написать

static const struct txschedule series_quarter[] = {
  {  3,  0,  3,  0,  0,  0,  0,  0 }, /*  1.5Mb/s */
  {  4,  1,  3,  0,  4,  0,  0,  0 }, /* 2.25Mb/s */
  {  4,  2,  3,  0,  4,  0,  0,  0 }, /*    3Mb/s */
  {  4,  3,  3,  2,  4,  0,  2,  0 }, /*  4.5Mb/s */
  {  4,  4,  3,  3,  4,  2,  2,  0 }, /*    6Mb/s */
  {  4,  5,  3,  4,  4,  3,  2,  0 }, /*    9Mb/s */
  {  4,  6,  3,  5,  4,  4,  2,  2 }, /*   12Mb/s */
  {  4,  7,  3,  6,  4,  5,  2,  4 }, /* 13.5Mb/s */
};
???

Зачем нужна нафиг магия на макросах? Напишите блин рядом комментарий что мол так и так, массив сформирован на основе четвертинного алгоритма. Все равно этот ваш Q(XXX) нихрена не понятен. Понятно, что потом всякие Водка-Студии будут орать 96 критикал сообщений о несовместимости типов.

В коде FreeBSD можно встретить ещё несколько таких массивов. Суммарно анализатор выдаёт на них 692 предупреждения уровня High. Напомню, что всего предупреждений уровня High насчитывается 3577. Это значит, что такие макросы приводят к возникновению 1/5 этих предупреждений.

P.S. Код, которым я сгенерил массив выше: https://pastebin.com/pPN8uwVz

 , ,

PPP328
()

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