LINUX.ORG.RU

Сообщения deep-purple

 

Наушниковый предусилитель (ищу?)

Приветствую, господа!

Суть да дело, задался я вопросом где бы мне найти наушниковый предусилитель отвечающий моим потребностям:

1) Возможность подключения не менее 4 наушников.

2) Отдельная регулировка громкости для наушников.

3) 3 (три!) балансных независимых стерео входа.

4) Небалансные входы, дублирующие балансные из предыдущего пункта.

5) Формфактор рэк или полурэк (1U).

Найден максимально приближенный вариант:

https://pop-music.ru/products/behringer-powerplay-ha8000-v2-888880023639/

Однако, в нём не достаёт третьего входа, а также 8 выходов это слишком.

Найден ещё один:

https://pop-music.ru/products/predusilitel-behringer-amp-800-miniamp-88880003...

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

Так, выходит, что в продаже нет наушниковых предусилков с более чем двумя стерео входами. Айяяй. Как же так? И ведь я даже не выйду из положения использовав матричный микшер.

Так где ж мне найти то что хочется, а?

Придётся садиться, проектировать и делать сей девайс самостоятельно?

 , , предусилитель

deep-purple
()

Оно опять на свет лезет!

Памятуя страсти в предыдущих темах той же тематики, я просто не мог не притащить эту новость:

Готовится к выходу очередной фильм про плоскую землю. Теперь уже от Эрика Дубэя.

Я даже не знаю что тут еще добавить.

Источник: https://hibbelerproductions.com/level-the-film

Что скажете по этому поводу, господа? Что с этим всем делать то?

Куда бежать? Ведь если бежать достаточно долго, то до поребрика добежишь, об него споткнешься и в бездну свалишься...

А линукс тут при том, что я им пользуюсь.

 ,

deep-purple
()

Success Exception? WTF?

Здравствуйте мои дорогие, великие программисты, бакалавры и прочие ЛОРовцы включая умнейших анонимусов!

А вот что если я вам скажу следующее:

В ЯП есть исключения. Все вы знаете как работают исключения. Скажем только — исключение, в момент его выбрасывания, прерывает порядок выполнения и разматывает стек вверх до места, где его будут ловить. Ну или не будут... это уже частный случай.

И вот есть код, в котором, где-то в дебрях, при определённых условиях требуется:

а) вывалить сообщение и сделать exit(0);

б) сделать exit(0) без каких либо сообщений вообще.

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

К чему это я? А к тому, что можно же использовать для этого исключения. А что? Исключение бросается в исключительной ситуации. Но исключительная ситуация не обязательно ошибка!

И теперь у меня есть «SuccessException(message)» и, конечно, «JustSuccessExit extends SuccessException»

А что вы думаете по этому поводу?

UPD: ПОЖАЛУЙСТА, ПРЕЖДЕ ЧЕМ НАПИСАТЬ СООБЩЕНИЕ — ПРОЧТИТЕ ВЕСЬ ТРЕД!!! СКОРЕЕ ВСЕГО ВАШ ВОПРОС ИЛИ ВАША ПРЕТЕНЗИЯ УЖЕ ОБСУЖДАЛАСЬ!

 , ,

deep-purple
()

ЧТО Я (ОНО) ТАКОЕ?

Привет ребята.

Пришло ко мне сегодня желание навелосипедить по полной.

Навелосипедил:

struct node_s {

    void          *value;
    struct node_s *children[256];

};


typedef struct node_s node_t;


node_t *
create_node()
{
    return calloc(1, sizeof(node_t));
}


node_t *
create_storage()
{
    return create_node();
}


int
insert(node_t *root, char *key, void *value)
{
    node_t *curr_node = root;

    size_t k;
    size_t c;

    for (k = 0; key[k]; k++) {
        c = (size_t) key[k];

        if (NULL == curr_node->children[c]) {
            curr_node->children[c] = create_node();
        }

        curr_node = curr_node->children[c];
    }

    if (NULL != curr_node->value) {
        return 0;
    }

    curr_node->value = value;

    return 1;
}

void *
get(node_t *root, char *key)
{
    node_t *curr_node = root;

    size_t k;
    size_t c;

    for (k = 0; key[k]; k++) {
        c = (size_t) key[k];

        if (NULL == curr_node->children[c]) {
            return NULL;
        }

        curr_node = curr_node->children[c];
    }

    return curr_node->value;
}

...
...
...


node_t *storage = create_storage();

// тут вставили 1113 тестовых элементов
// по строковым ключам разной длины (от 1 до 39 символов),
// каждый из них уникален,
// но большая часть не уникальна по префиксам
insert(storage, "blahblah", "A_LA_POINTER");

// типа ищем

clock_t tic = clock();

size_t i;

for (i = 0; i < 500000; i++) {
    get(storage, "blahblah_not_found_key");
}

clock_t toc = clock();

printf("test time : %f\n", (double) (toc - tic) / CLOCKS_PER_SEC);
// ~0.000207
И ещё я посчитал сколько места такая неэффективная страхолюдина занимает для всех этих индексов: 1697228 байт.

Ну, это, конечно, швах. Да хрен с ним. Дело не в этом.

А вот в этом:

Мне нужна какая-то, внешне вот стаким интерфейсом хреновина, контейнер для данных.

Я посмотрел на хеш таблицу, но:

1) Хеш таблица, перед тем как искать, в цикле по строке получает хеш сумму строкового ключа, и только потом ищет по заявленному O(1). У меня же тут сразу во время цикла по строке происходит поиск. Хеширование ключа не требуется.

2) Доступная мне реализация хеш таблицы «искаропки» требует кучу каких-то танцеваний при инициализации. Так ещё и просит указать хотябы примерное количество элементов, которые в ней будут храниться. А я не знаю!!! Поставишь много — пожрёт много. Поставишь мало — в какой-то момент изза перестройки при выделении дополнительного куска памяти для индексов просядет скорость. Опять же у меня в велосипеде, кажется, такой проблемы нет — скорость (наверное) всегда примерно средняя, каллочит почуть и ладно.

Ну, размер выделенной памяти, конечно, ужас. 1.6 метра на 1.1к строчек. Или не ужас?

Нет, не хочу использовать свой велосипед. Он просто получился.

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

 , , , ,

deep-purple
()

DLNA и прочие извращения

Есть у меня теперь HP Proliant микросервер gen8.

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

Кроме собственно шары, я слил в одно место все киношки и сериальчики. Это дело доступно также через самбу, но с ридонли правами. Эту вот шару видят все: винда, линукс, vlc плеер на смартфонах. Короче просмотр фильмов в домашней сети реализован.

Но есть у меня телевизор, смарт (как же хочется написать это слово в кавычках), ага...

Поднял я для него minidlna, а эта казлина (телек) не хочет показывать 99% шары. Говорит неподдерживаемый формат или типа того.

Ок...

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

Теперь телек воспроизводит почти всё. Но интерфейс управления мышой с пульта телека — то ещё извращенье. А вот эти анальные огораживания, что через длна не хочу не буду, а по хттп через веб-плеер пожалуйста — бесят шопесец.

Я хочу вернуться к отдаче по длна.

Ставить монстров типа плекса — не хочу.

Я попробовал вариант с перепаковкой в другой контейнер без перекодирования. Ну, например из мкв в мп4 — работает и эта тварь начинает жрать контент по длна. Насколько этот путь правилен? Я не уверен что все форматы стримов можно всунуть из «any-container-name» в «mp4».

Или может вы посоветуете что-то менее тяжелое плекса, естественно бесплатное и в любом виде — конпеляций я не боюсь.

 

deep-purple
()

ЧЯДНТ? Bash, рекурсия по каталогам

Есть куча видосов. Лежат в некоем месте. Вложенность директорий не ограничена.

Мне надо пройти скриптом и родить тумбнайл для каждого видео.

Скрипт я написал. Он пашет. Да вот не могу понять в каком месте я что-то сделал не так:

SHARED_MEDIA_DIR_PATH="/foo"
THUMBNAILS_DIR_PATH="/bar"


createThumbnails()
{
    local CURRENT_DIR_PATH=$(readlink -f "${1}")
    local FILE_NAME

    ls "${CURRENT_DIR_PATH}" -A1 | while read FILE_NAME; do

        local ITEM_PATH="${CURRENT_DIR_PATH}/${FILE_NAME}"

        if [ -d "${ITEM_PATH}" ]; then
            createThumbnails "${ITEM_PATH}"
            continue
        fi

        local MD5_SUM=$(printf '%s' "${ITEM_PATH}" | md5sum | cut -d ' ' -f 1)
        local THUMBNAIL="${THUMBNAILS_DIR_PATH}/${MD5_SUM}.jpg"

        if [ -f "${THUMBNAIL}" ]; then
            continue
        fi

        echo "${ITEM_PATH}"
        #echo "${THUMBNAIL}"

        ffmpeg \
            -ss $(ffmpeg -i "${ITEM_PATH}" 2>&1 \
                    | grep Duration \
                    | awk '{print $2}' \
                    | tr -d , \
                    | awk -F ':' '{print ($3+$2*60+$1*3600)/2}') \
            -i "${ITEM_PATH}" \
            -an \
            -vcodec mjpeg \
            -vframes 1 \
            -f rawvideo \
            -y \
            "${THUMBNAIL}" \
            >> /dev/null 2>&1

    done
}

createThumbnails "${SHARED_MEDIA_DIR_PATH}"

В некоей директории лежит 30 видео файлов с именами от 01 до 30 *.mp4.

Запускаю скрипт. Выводит:

/foo/бла бла/01.mp4
/foo/бла бла/.mp4
/foo/бла бла/03.mp4
/foo/бла бла/.mp4
/foo/бла бла/05.mp4
/foo/бла бла/6.mp4
/foo/бла бла/07.mp4
/foo/бла бла/8.mp4
/foo/бла бла/09.mp4
/foo/бла бла/.mp4
/foo/бла бла/11.mp4
/foo/бла бла/2.mp4
/foo/бла бла/13.mp4
/foo/бла бла/4.mp4
/foo/бла бла/15.mp4
/foo/бла бла/6.mp4
/foo/бла бла/17.mp4
/foo/бла бла/8.mp4
/foo/бла бла/19.mp4
/foo/бла бла/0.mp4
/foo/бла бла/21.mp4
/foo/бла бла/.mp4
/foo/бла бла/23.mp4
/foo/бла бла/4.mp4
/foo/бла бла/25.mp4
/foo/бла бла/6.mp4
/foo/бла бла/27.mp4
/foo/бла бла/8.mp4
/foo/бла бла/29.mp4
/foo/бла бла/0.mp4

И скрипт делает 15 тамбнейлов для 15 видео. Через один!!!

Вывод второго запуска отличается тем, что скрипт делает теперь 15 чётных:

/foo/бла бла/02.mp4
/foo/бла бла/3.mp4
/foo/бла бла/04.mp4
/foo/бла бла/5.mp4
/foo/бла бла/06.mp4
/foo/бла бла/7.mp4
/foo/бла бла/08.mp4
/foo/бла бла/9.mp4
/foo/бла бла/10.mp4
/foo/бла бла/.mp4
/foo/бла бла/12.mp4
/foo/бла бла/3.mp4
/foo/бла бла/14.mp4
/foo/бла бла/5.mp4
/foo/бла бла/16.mp4
/foo/бла бла/7.mp4
/foo/бла бла/18.mp4
/foo/бла бла/9.mp4
/foo/бла бла/20.mp4
/foo/бла бла/1.mp4
/foo/бла бла/22.mp4
/foo/бла бла/3.mp4
/foo/бла бла/24.mp4
/foo/бла бла/5.mp4
/foo/бла бла/26.mp4
/foo/бла бла/7.mp4
/foo/бла бла/28.mp4
/foo/бла бла/9.mp4
/foo/бла бла/30.mp4

И выводит какой-то мусор, на котором сам же спотыкается.

Что за хрень?

Интересно, что если закомментировать вызов ffmpeg, выводится всё правильно. Но как только я включаю собственно генерацию тамбнейлов — приехали.

ffmpeg как-то влияет на последовательность действий? Ставил sleep для каждой итерации — не помогло.

ЧЯДНТ?

 , ,

deep-purple
()

200 OK HTTP/1.0-1.1

Читаю спеки и никак не вычитаю нужное.

Мой вопрос выглядит так:

При каких условиях я должен отправить «HTTP/1.0 200 OK», а при каких «HTTP/1.1 200 OK»?

Например, если клиент обратился с HTTP/1.0 то и я должен ответить ему с той же версией протокола? Могули я поднять версию в ответе до 1.1?

А если клиент обратился с HTTP/1.1, могу ли я задаунгрейдить ответ до 1.0 или обязательно должен подстроиться под версию запроса клиента?

Что делать если клиент обращается как 1.0, но шлёт с этим методы и заголовки которые можно только в 1.1? Ответить ему бэд реквестом?

 , , ,

deep-purple
()

Модуль nginx

Есть некоторое кол-во фаз обработки запроса. В каждый хендлер на любой из фаз я получаю от API только ngx_http_request_t. Хендлеры, естественно, вызываю не я — этим занимается сам nginx.

Я хочу в первом своём хендлере определить кое-какие значения и протащить это всё в следующие хендлеры.

Типа:

typedef struct {
    ngx_uint_t x;
} foobar_t;

ngx_int_t
ngx_xxx_preaccess_phase_handler(ngx_http_request_t *request)
{
    foobar_t *foobar;

    foobar = ngx_palloc(request->pool, sizeof(foobar_t));

    foobar->x = 0;

    // и как теперь это передать дальше в контексте этого же реквеста?
}

.......

ngx_int_t
ngx_xxx_access_phase_handler(ngx_http_request_t *request)
{
    // получили доступ к foobar в контексте этого реквеста
}

ngx_int_t
ngx_xxx_request_phase_handler(ngx_http_request_t *request)
{
    // получили доступ к foobar в контексте этого реквеста
}

Но как прикрепиться именно к этому запросу? Иначе определять эти значения придётся в каждом из хендлеров.

Способ прикрепить это к самому реквесту я не нашёл. Способ выдрать из пула то что выделялось для чего-то конкретного я не нашёл.

Плохо искал?

 , ,

deep-purple
()

nslookup SERVFAIL

А подскажите, почему это:

$ nslookup -query=ns bin.com
Server:		192.168.0.1
Address:	192.168.0.1#53

** server can't find bin.com: SERVFAIL
и это тоже:
$ nslookup -query=ns bin.com
Server:		8.8.8.8
Address:	8.8.8.8#53

** server can't find bin.com: SERVFAIL
вот так получается?

Именно тогда, когда мы указываем в качестве имени второго уровня «bin». Это фича такая? А другие такие «фичастые» имена ещё есть? А киньте ссылкой почитать.

 , ,

deep-purple
()

Плохо работают якоря

Я не отлавливал дату и время когда это началось. И даже могу неверно описать что там в каком порядке происходило, какие изменения вносились. И, конечно, я не смотрел в историю коммитов. Пишу как вижу.

Некоторое время назад перестали нормально работать якоря.

Якорь — это:

(1) Когда что-то типа:

<a name="cid123456789"></a>
Над блоком с комментарием.

(2) В любом месте ссылка:

<a href="/forum/talks/987654?cid=123456789">Ссылка</a>

(3) Расчёт номера страницы на которой будет в искомом треде искомый комментарий, затем редирект туда:

/forum/talks/987654?cid=123456789#cid123456789

Так вот. Сейчас у нас имеется только второй пункт. Первого нет. Третий есть, но без якоря. Вернее так. Якорь, там, в строке запроса, на доли секунды появляется, а затем бесследно исчезает.

Я не помню, были ли когда-либо якоря именно такими, обычными, или никогда не были. Не обращал внимания. Они просто работали.

Теперь, при посещении ЛОРа со старого браузера при переходе по «якорю» не работает докрутка до самого комментария. Сообщение то выделяется. Но скролл не приходит к комментарию. Надо доматывать руками ища этот красный бордюрчик. Ладно. Пусть браузер старый. Тут я, типа, смирился.

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

Ситуации, при которых ломается «якорь», разнообразны. Это может быть уход на внешний ресурс, а затем возврат по истории посещения обратно на ЛОР, но, уже не на то место скролла. Это случается и при внутренних переходах даже при кликах на «Ответ на комментарий».

Пожалуйста, уберите все эти ненужные редиректы, жаваскрипт -хистори, -скроллы и прочую чушь, если таковая имеется. И сделайте простые обычные якоря в ссылке. Якорь тут сам докрутит до комментария. И это будет гарантированно работать на любом утюге.

А если у нас и так простые якоря — тогда разберитесь почему оно так криво работает.

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

maxcom

 , ,

deep-purple
()

Первый мультфильм силами ЛОРа (linux mod by MS)

Тэкс... Чот захотелось поглумиться. Предлагаю запилить мульт.

Я могу (и хочу!) заозвучить нижеуказанных персов.

Автором сценария выступит автор сия текста — LINUX-ORG-RU.

Художником мультипликатором предлагаю автора мульта про вертолёт — gtk3.

Кто если захочет вклиниться в глумительное созидание или чем помочь, например, вызвать докторов — милости просим.

LINUX-ORG-RU — я тут подправил немного текст, добавил подробностей раскадровки. Давай, утверждай, или говори какие тут правки по твоему ещё внести надо? Ато уже заозвучить персов хочу, а без утверждённых текстов то не начать. В темпе плиз!!!

----------------------------------------
----------------------------------------
----------------------------------------

UPD!!!

Репозиторий: https://gitlab.com/kinolinux/ms-linux-module

Тестовая озвучка (по старому не-до-полу-сценарию): https://dropmefiles.com/7ioIr

Тестовые кадры:

https://vk.com/doc431142494_546138856
https://vk.com/doc431142494_546140716

Другое тестовое:

https://streamable.com/w0dhd7
http://images.vfl.ru/ii/1586836562/4da25d8f/30214443.png

Дело делается:

https://dump.video/i/K1akGm.mp4
001 https://dump.video/i/GpQkWY.mp4
002 https://dump.video/i/xn104A.mp4

Саундтрек к мульту: https://dropmefiles.com/L6HTk

Скетчи к раскадровке:

-1) https://pic4a.ru/04/BFe.jpg
-1-fixed) https://pic4a.ru/04/hKb.jpg
0) https://pic4a.ru/04/7ST.jpg
1) https://pic4a.ru/04/1XW.jpg
2) https://pic4a.ru/04/ZtS.jpg
3) https://pic4a.ru/04/8lA.jpg
4) https://pic4a.ru/04/o1f.jpg
5) https://pic4a.ru/04/9bK.jpg
6) https://pic4a.ru/04/7ot.jpg
7) https://pic4a.ru/04/vDi.jpg
8) https://pic4a.ru/04/ZyD.jpg
9) https://pic4a.ru/04/I4B.jpg
10) https://pic4a.ru/04/S2A.jpg
11) https://pic4a.ru/04/7T5.jpg
12) https://pic4a.ru/04/7Bu.jpg
13) https://pic4a.ru/04/Ncf.jpg
14) https://pic4a.ru/04/dhC.jpg
15) https://pic4a.ru/04/8Bg.jpg
16) https://pic4a.ru/04/XF0.jpg
17.1) https://pic4a.ru/04/eLf.jpg
17.2) https://pic4a.ru/04/2Rl.jpg
17.3) https://pic4a.ru/04/Yht.jpg
18) https://pic4a.ru/04/USc.jpg
19) https://pic4a.ru/04/vqu.jpg
20) https://pic4a.ru/04/1BM.jpg
21) https://pic4a.ru/04/mT4.jpg
22) https://pic4a.ru/04/PjD.jpg

Сценарий распоследней версии:


Полезные ссылки:

https://news.microsoft.com/leadership/?section=board-members

https://medium.com/@selamjie/remove-richard-stallman-fec6ec210794


Действующие лица:

DD - Deven Desai (человек в костюме).
SN - Satya Nadella (человек в кресле).
BG - Билл Гейтс.



Раскадровка (смена вида обозначена пунктиром):


----------------------------------------------

(чёрный фон)
(появляется фоновая музыка через fadein)
(логотип через fadein-fadeout)

                   LOR
               linux.org.ru

(
    во время демонстрации логотипа,
    на фоне, не одновременно, в рандомных координатах и разных размеров,
    появляются не сильно заметные, серенькие слова "Deleted"
    и исчезают через fadeout вместе с логотипом
)

----------------------------------------------

(чёрный фон)

present

(через fadein-fadeout)

----------------------------------------------

(fadein изображения)
(фоновая музыка продолжается)
(добавляется шум дороги и гул двигателя)

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

Пока автомобиль едет, в центре экрана выплывает название:


ГЛУБОКАЯ АНАЛИТИКА
    MICROSOFT


Сначала появляется "ГЛУБОКАЯ".
Затем "АНАЛ".
Затем, с небольшой паузой "ИТИКА".
Затем резво выскакивает "MICROSOFT".

(
    можно поиграться с "deep microsoft anal ytics"
    которые в итоге вываливаются в указанное выше название на русском
)

(fadeout названия)

----------------------------------------------

(фоновая музыка всё продолжается)
(шум дороги и гул двигателя всё продолжаются)

Теперь камера висит сбоку сзади автомобиля.
Видно как вращаются колёса и бежит полотно дороги.
Впереди быстро приближается город (Редмонд, Вашингтон).

(
    Гуглим по картинкам как выглядит Редмонд!!!
    Редмонд - город в котором находится главный офис майков.
    Надо будет влепить приближающийся плакат:

    https://upload.wikimedia.org/wikipedia/commons/thumb/1/16/Bicycle_Capital_of_the_Northwest.JPG/1280px-Bicycle_Capital_of_the_Northwest.JPG
)

----------------------------------------------

Вид из авто.

Автомобиль едет уже по городу.
С боков проплывают здания.
Светофоры, знаки, деревья.
Чьи-то руки крутят баранку.
На зеркале болтается вонючка в виде логотипа винды 10.
И ещё одна в виде символов "M$".
На экране мозгов автомобиля написано:

"Цель: Штаб-квартира Microsoft" 

----------------------------------------------

(шум дороги стих, гул двигателя изменился, но продолжается)
(медленный fadeout фоновой музыки)

Камера сверху.
Автомобиль въезжает на стоянку.
Также видно, что стоянка эта находится рядом с вот этим:

https://image.shutterstock.com/image-photo/redmond-washington-usa-march-28-260nw-1357496909.jpg

(
    Надо гуглить как выглядит офис майков:

    https://www.shutterstock.com/ru/search/redmond+microsoft
)

Из автомобиля выходит DD в чёрном костюме и галстуке
    и направляется к офису.

----------------------------------------------

(фоновая музыка уже стихла)

Камера смотрит на входные двери офиса.
DD видно со спины (немного под углом?).

DD входит в здание офиса.

----------------------------------------------

(появляется шум офиса)

Камера снимает вошедшего DD спереди (немного под углом?).
Нам нужно показать лицо DD, чтобы зрителю стало понятно кто это.

DD видит моющую полы уборщицу (с головой Анджелины Джоли)
    и проходя мимо лапает её за жопу.
Та вскрикивает и отскакивает, уронив швабру и опрокинув ведро.

А DD как ни в чём не бывало открывает дверь за ручку
    и заходит в кабинет Надэллы.

----------------------------------------------

(есть звуки офиса, но сильно приглушённые)

Камера охватывает весь кабинет, но смотрит на входящего DD.
Ракурс таков, что видно и стол начальника,
    и доску (для рисования) на стене.

DD закрывает дверь и проходит внутрь кабинета к столу начальника.

За столом сидит Satya Nadella и нервно бьёт пальцем по стакану.

SN: Здравствуй, дружок, ты выполнил моё поручение?

----------------------------------------------

Видим спину начальника и фигуру (только лицо?) гостя.

DD: Да сэр! И у меня есть планы по продвижению!

----------------------------------------------

Переключили вид на кабинет (как при входе DD).

SN: Говори, дружок, я тебя слушаю.

DD подходит к доске, вытирает с неё всё, берёт маркер и начинает говорить...

----------------------------------------------

Инфографика начинается с белого фона.

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


DD: Довольно большое количество людей успешно используют WSL.
    На фоне этой популярности
    мы якобы хотим добавить новый уровень безопасности.
    Для этого был разработан и публично представлен модуль для ядра Linux.
    Сам модуль намеренно не отвечает качеству и его скорее всего отвергнут.
    Зная, что многие нас не любят,
    мы можем на этом сыграть.
    А именно:
    Показать,
    что мы тоже многое делаем,
    но нас отвергают.
    И мы,
    якобы для сохранения чести,
    гордости
    и дабы не оставить пользователей WSL без нововведений - форкнем Linux!
    Самый важное - это показать,
    что наши действия по форку были вынужденными,
    чтобы иметь возможность
    предоставить пользователям новый уровень безопасности!
    Пока всё идёт как надо,
    отдел стратегического планирования просчитал два исхода:
    Первый:
    Наш модуль примут.
    Это не очень хорошо, но мы и это сможем использовать для своих целей.
    Второй:
    Наш модуль отвергают.
    И в этом случае у нас уже куплены несколько сотен журналистов,
    которые уже готовят статьи
    на счёт нападок на нас из лагеря разработчиков Linux.
    Мы сыграем на фоне общей толерантности.
    Пусть будет выглядеть так, что дискриминируют именно Microsoft.
    И пока их внутренний CoC будет решать что делать - мы объявим форк!
    Однако,
    для сохранения лояльности к нам,
    этот форк будет синхронизироваться с оригиналом в течении ещё целого года.
    А затем,
    мы найдём предлог по внесению очень больших изменений.
    Думаю,
    иметь оригинал как подмножество нашего форка,
    будет хорошим планом.
    Спустя время - лень людей - победит.
    И, пользователи массово перейдут к нам.
    А дальше дело за малым:
    Embrace, Extend, and Extinguish
    (Поддержать, надстроить и уничтожить)
    или ещё проще - vendor lock!

DD расплывается в улыбке.

(отзвучим его улыбание мультяшным чистым стеклянным "бздынь")
(некоторая пауза)

----------------------------------------------

Переключили вид на начальника.

SN: Я понял, DD.
    Ступай.
    И докладывай по мере развития событий.

DD: Йес, сэр!

DD, произнося свою фразу, слегка кланяется,
    затем разворачивается от доски к двери
    и направляется к ней (двери).

(мы не ждём когда DD подойдет к двери)
(fadeout в темноту)
(некоторая пауза)
(fadein фоновой музыки)
(фоновая музыка громко)


----------------------------------------------

(fadein к кадру)
(fadeout фоновой музыки)
(шум моря, чайки)

Мы видим волшебный остров, пальмы, кокосы, пляж.
На берегу, на пляже, в шезлонге, под зонтиком, сидит Билл Гейтс.

В одной руке он держит бокал с экзотическим коктейлем.
Другой рукой прижимает к уху мобильный телефон.

(SN тут всегда голосом из телефона)

BG: Оооо!
    Ахахах! (посмеивается)
    Прекрасно!

SN: Нам бы не остать от гугла и красной шляпы.
    Они уже давно этим занимаются.

BG: Они,
    особенно гугл,
    от своей власти начанают терять доверие народа.
    А мы,
    если всё сделаем правильно,
    наоборот,
    сможем это доверие вернуть!
    Ахах! (посмеивается)
    Как это мило!
    Отлично!
    Спасибо!
    Пока-пока мой индусик!

BG завершает звонок.
Отбрасывает мобильный телефон в песок.
Мечтательно вздыхает.
Отпивает коктейль из трубочки.

BG: Теперь я абсолютно спокоен по поводу наследника нашей компании.
    Этот цыганёнок просто покорил меня своей изобретательностью и хитростью.

----------------------------------------------

Камера близко к шезлонгу, заглядывает из-за плеча Гейтса.

    (
        Гейтс достаёт из кармана фотку,
        на фотке мем "мой пездюк"
        с соответствующей надписью
        и головами Гейтса и (скорее всего) Наделлы
    )

BG: Его гениальная стратегия "не можешь победить врага - возглавь его"
    работает просто идеально.
    Мы купили GitHub!
    Мы купили многих OpenSourse разработчиков!
    А тех,
    кто не продался - мы форкнули!

(BG убирает в карман фотку)

----------------------------------------------

Камера вернулась к общему виду.

BG: Ахах! (посмеивается)
    Дело за малым:
    уничтожить традиционные GNU/Linux дистрибутивы
    и пересадить пользователей к нам в мышеловку - на винду!
    Короче,
    поступим так,
    как мы проталкивали свои окна в лихие 90-е!!!

(суперзлодейский долгий смех Билла)
(сотрясается от смеха в шезлонге)

(fadeout смеха)
(fadeout в темноту)
(некоторая пауза)
(fadein фоновой музыки)
(фоновая музыка громко)

----------------------------------------------

ТИТРЫ!!!

(fadeout фоновой музыки)
(чёрный фон)
(некоторая пауза)

----------------------------------------------


 , ,

deep-purple
()

К карантину готов! (рабочее место)

Сначала думал может добавлю в галерею куда. Но там же ждать надо подтверждения. Ну нафиг. Пусть в толксах будет!

Это моё домашнее рабочее место: https://pic4a.ru/04/bEy.jpg

Оно с давних пор мало чем изменилось, лишь обросло всякими дополнениями. Столу уже лет семь точно.

Самое главное — пыль. Я не подтирал сейчас ничего. Фотал так, как есть.

Клавдия потыкаловна и мыш — какой-то обычный гениус. Тупо меняю их на примерно такие, когда что-то гавкнет. Но мне нравится большой энтер и длинные шифты.

Вид стоя у стола: https://pic4a.ru/04/bdt.jpg

Монитор типа новый. Примерно пол года год. IPS. Как купил, так сразу прикрутил его на кронштейн из леруи (леруа мерлен): https://pic4a.ru/04/mtR.jpg

Блин, это реально удобно! Внизу, под монитором на столе ничего нет, никаких подставок. Иногда даже загоняю клавдию за монитор и печатаю прямо так.

Моник можно переместить и сильно влево. Но там уже лампа

и звуковуха: https://pic4a.ru/04/Ufy.jpg

Fireface 400. Да, таких уже не производят. Как она закреплена можно видеть на картинке — это какие-то мебельные(?) уголки попавшиеся под руку. К «потолку» на калёные саморезы 20мм, к корпусу звуковухи на болтики. Она такая, тёплая. Т.е. греется и ей нужен проток воздуха, поэтому между «потолком» и звуковухой есть зазор. Плюс этот зазор даёт возможность просунуть «сзади» провода от микрофона или гитары, чтобы они перед клавой или у кромки стола не болтались. Короче крепёжные(?) уголки прям во всём подошли.

Колонки: https://pic4a.ru/04/ooe.jpg

А если правильно — активные студийные мониторы ближнего поля Yamaha MSP-5 Studio. Как же на них любят смотреть кино и мультики мои детишки! Говорят — ну а что, в них же всё слышно! И правда — в них действительно всё слышно — это же измерительный прибор! Конечно, все выходы-входы балансные.

А чем коротать долгие вечера? Не кодить же сутками напролёт?

Моя прелесть!!! https://pic4a.ru/04/oVA.jpg

Warwick CORVETTE $$ 5 Antique Tobacco Oil Чёрт. Да у меня машины нет! А гитара вот такая есть. Да и по фоткам выше уже понятно в какую сторону у меня уклон желаний — звук. Машина то мне зачем? Вон — у тестя и так есть машина, на нём ездим если надо.

Подумал — а у меня же Debian 8 тут. Mate. Да и всё. Что тут перечислять? Дома я за новизной не гонюсь — работает и ладно.

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

Фотал на редми нотэ 6 про, а получилось как на тапок. Свет какой есть — люстра в три лампы. Ну, как получилось... Вот как вы фотаете так, чтобы норм было?

UPD:

Занимаемся самолечением:

https://pic4a.ru/04/kqZ.jpg
https://pic4a.ru/04/FoF.jpg
https://pic4a.ru/04/TE9.jpg

Нет, не болею, просто чеснок теперь можно есть легально в любых количествах — а я его люблю!

 , ,

deep-purple
()

rm with wildcard (*)

Понадобилось пройтись в куче мест командой вида

rm -f /dir/K.*
Не рекурсивно удалить в директории «/dir» все файлы с именем «K, точка и всё что угодно после неё». Напрямую из консоли работает.

Мест куча, написал баш портянку. В цикле проходит по списку целевых директорий. Но ничего не удаляет. Если убрать опцию "-f" пишет:

rm: cannot remove '/dir/K.*': No such file or directory
Конечно, файлы существуют. Т.е. rm вызванный из скрипта не раскрывает звёздочку?
for dir_path in "${DIRS[@]}"
do
    if [ -d "${dir_path}" ]; then
        rm -f "${dir_path}/K.*"
    fi
done

Почему оно не раскрывает звёздочку? Как заставить раскрывать?

 ,

deep-purple
()

Мониторинг комплексного состояния сервиса

Добре всем!

Есть некий сервис. Сервис содержит около 2 тысяч элементов, состояние которых нужно проверять.

Сейчас нагиос обращается к сервису, делая около 2 тысяч запросов, чтобы получить статусы по каждому элементу — проблемный он или нет. И это не есть хорошо.

Однако, сервис имеет возможность по одному запросу выдать список всех НЕ проблемных элементов.

Возникла мысль, в контексте нагиоса:

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

Но вот беда — нагиос понимает только статусы (которых всего 4), а даже если бы понимал больше, то на описание всех комбинаций состояний «тот элемент ок, а вот те два не ок, а теперь тот не ок, а вот этот ок, а вон тот третий все еще не ок» элементов понадобится число статуса состоящее из 2 тысяч бит, ну, чтобы нагиос как-то отличил что статус поменялся. Но это всё бред.

На самом деле, достаточно ориентироваться не только на статус, но и на текст списка. Даже если статус не изменился, а вот текст списка да — отправлять оповещение. Так, даже при полном песце, куда удобнее будет видеть одно сообщение в две тысячи строк списка, чем 2 тысячи сообщений по 10 строк каждое, когда элемент это отдельный сервис.

Гугл помог вот досюда: https://support.nagios.com/forum/viewtopic.php?f=7&t=30238

И тут я понял, что нагиос сюда совсем не подходит, ибо, ну, костыли же уже велосипедные.

Да нахрен этот нагиос!

Засим вопрос:

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

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

 , ,

deep-purple
()

Прокси, который...

Надоело на каждой домашней машине (тесть, жена, дети, у каждого своя машина/ось/учётка, зоопарк винд, линуксов и разных браузеров разных версий в них) проверять и настраивать вот эти все ublock, matrix и прочие. Чисто физически надоело.

Сюда, в нагрузочку, ещё можно добавить мобильные по wi-fi, в том числе и если это в гости зашел человек и ему дали доступ к сети.

Хочу поднять прокси, через который будут ходить все HTTP(S) запросы. И, чтобы прокся анализировала:

1) к каким хостам идут запросы.
2) куки
3) URL path
4) query params
5) POST data

и на основании полученных данных принимала решение:

а) дропнуть запрос
б) ответить 301/302/401/403/404
в) удалить/добавить/заменить куки
г) пропустить как есть

Да — я говорю о классическом MITM, но для собственного блага.

1) Я НЕ хочу чтобы меня трекали счётчики.
2) Я хочу для конкретных сайтов (догадайтесь каких) всегда быть анонимным с любого устройства в моей сети (а-ля приватный режим браузера).
3) Я хочу блокировать все запросы к рекламным сетям для всех машин.
4) Я хочу блокировать какие-то запросы, если они идут с конкретной машины.
5) Я хочу НЕ блокировать какие-то запросы, если они идут с другой конкретной машины.
6) Я хочу НЕ применять правила для какой-то машины или применять их выборочно.
7) Я НЕ хочу чтобы какие-то корподобрые браузеры и виджеты самостоятельно что-то куда-то засылали.
8) Я хочу иметь белые, серые и прочие списки хостов и/или возможность настраивать их по маске, например, регуляркой.
N...) Что ещё я забыл хотеть?
N...+1) Я хочу настраивать эти правила в одном месте.

Подскажите опенсорс+фри ПО максимально покрывающее мои хотелки. Или комплекс такого ПО, с помощью которого я смогу получить желаемое.

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

И вот ещё. Если с HTTP трафиком всё просто и понятно, то с HTTPS нужен же свой корневой серт. Этот серт надо добавить во все браузеры. Тогда, траф я смогу расшифровать на проксе и проанализировав всё что мне нужно, принять решение насчёт запроса, а во внешний мир отправлять (при необходимости модифицированый) запрос уже с правильными публичными сертами и на реальные хосты. Будет ли это работать?

sudo cast ValdikSS — кажется, ты сможешь пролить свет на многие мои вопросы.

 , , ,

deep-purple
()

Тредпул и таски, таски, таски

Все никак не додумаю правильную архитектуру отвечающую целям.

База:

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

Каждый таск перед его запуском будет отправлен в тредпул и в итоге выполнен в каком-то треде.

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

На завершение таска можно подписаться сигналом/каллбеком.

С выше описаным у меня проблем и непоняток нет. Едем дальше.

Цели:

Большое количество тасков разных типов обусловлено необходимостью сегментировать задачи на максимально маленькие. Что позволит выполнять параллельно больше работы.

Делегирование мелких задач маленьким обьектам (таскам) подразумевает что таски должны быть в состоянии вызывать другие таски (сабтаски) и ожидать их завершения.

Львиная доля одновременно существующих и выполняющихся тасков будут одного типа. Но они будут работать с разными данными.

В целом, это тоже не вызывает проблем в реализации.

Подводные камни:

Вижу два пути:

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

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

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

Атомики отпали сразу, т.к. состояние комплексное и поведение сильно зависит от типа таска.

Мьютексы/фьютексы/семафоры, да. Но, взяв самое медленное (мьютекс) возникает вопрос - не будут ли блокировки медленнее созданий-удалений?

Кстати, первый вариант не отменяет необходимость блокировки. Пусть лишь в меньшем количестве мест.

Комплексно:

Свободные таски надо хранить в списке, по списку надо бежать, искать.

Принимать решение о создании таска нужного типа если нет еще ни одного такого или все такие сейчас заняты.

Чтобы узнать свободен ли таск нужно его сначала залочить. И так каждый в цикле.

Делать много списков где каждый хранит только конкретный тип (а типов дохрена, на крайняк группу близких типов?) тасков?

И, думается мне, это не преждевременная оптимизация, а лишь желание сделать сразу правильно, чтобы потом не переписывать много.

Да, надо бы тесты погонять. Не будут они сильно зависеть от проца, оси и прочего окружения?

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

Дай колбаски хлеб доесть, а?

pon4ik

 , ,

deep-purple
()

Девайсы для продувки железа

Собственно, сам вопрос в сабже.

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

Инструмент такой, чтобы и продуть и всосать можно было. Два девайса? Два в одном? Просто пылесос всасывает плохо. Может дуть компрессором и всасывать пылесосом? И, хотя продувать буду не дома, а в гараже — дык пыль то витать и там начнет.

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

 ,

deep-purple
()

Доступность сервисов из разных ДЦ

Имеется место в одном ДЦ. Там, «локально», между собой комплексно общаются несколько серверов. Всё работает. Но внешняя клиентская дырочка к ним одна (фронтэнд).

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

Файловер, я так понимаю, может быть решением только в случае, если у какой-либо компании, ДЦ располагаются в разных местах. Однако, файловер, как единая точка входа, так же может оказаться в дауне. Так что это тоже не 100% вариант.

А если поставить полную копию железа и софта во втором независимом ДЦ? Опустим вопрос синхронизации между ними.

Существует ли способ прозрачно переключаться и оставаться доступным 24/7? Если упал коннект к первому ДЦ, как сразу начать направлять клиентов на второй?

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

А что делать с кратковременными разрывами связи в конкретном ДЦ? Допустим, триггер на 5 минут. А не маловато ли это, учитывая проблему с кешем из предыдущего абзаца?

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

Будет ли клиент делать попытки соединения к другим айпи из списка, если предыдущий оказался не доступен?

 , ,

deep-purple
()

Руцентр «оптимизировал» работу с клиентами по выдаче сертификатов

Взяли мы, значит, сегодня, вилдкарт сертификат в руцентре за 10к деревянных...

Руцентр сразу же отправил письмо (с ссылкой на подтверждение прав на домен) на ящик admin@нашдомен.

Однако, такого ящика на этом домене у нас нет.

И действительно, можно же указать другой ящик... ой... ограниченный выпадающим списком, который предлагает руцентр (admin, administrator, hostmaster, webmaster, postmaster).

Ладно, меняем на postmaster и... ждём — ведь отправить повторное письмо можно только через час.

Пока ждём, генерируем на своем сервере *.key а из него *.csr.

Через час отправляем письмо на постмастер ящик. Письмо приходит. Серт выпускается и...

ОНИ СГЕНЕРИРОВАЛИ *.key и *.csr ДЛЯ НАС САМИ!!!

https://www.youtube.com/watch?v=1dRrE_ROot0

Хм... Что же делать? Оказывается, чтобы всунуть им свой *.csr, нужно заказать перевыпуск сертификата. Благо — это бесплатно.

Ладно, нажимаем кнопку «перевыпустить» и видим такую картину:

(тут и далее, красные рамки мои)

https://pic4a.ru/95/nKu.png

1) О! Так они и не скрывают, что секретный ключ скомпрометирован!

2) Да, они снова сразу хотят отправить письмо на admin@нашдомен без возможности выбора на этом шаге. Жмакаем «продолжить»:

https://pic4a.ru/95/ni8.png

Всё ещё впаривают тот *.csr от скомпрометированного ключа. Такая большая кнопка «сохранить приватный ключ» и такая блеклая ссылочка «использовать свой csr».

Жмакаем «использовать свой». Да, письмо уходит на «админ», снова правим на «постмастер», снова ждём час и жмакаем повтор отправки.

Теперь ждём ещё часик. Может два?

Ну, баба Маня у них там одна, и серты выпускает и письма рассылает. Ей и так тяжело, вот, решили они, сердобольные, оптимизировать её работу, а главное — безопасность повысить.

Будьте внимательны!!!

Модераторы, если считаете что теме место в другом разделе (security, talks) — переносите.

 , ,

deep-purple
()

Бекапы в проксмоксе

proxmox v4.4

Есть NFS примонтированый для бекапов машин.

В вебморде указано «максимум один полный бекап машины». И это работает (в вебморде же) — второй полный бекап машины не сделать. Конечно, есть список машин, которые (как и когда) надо бекапить. Всё пашет.

Прошло уже месяца два. И решил я заглянуть как там дела на NFS в примонтированом разделе. А там кучи полных бекапов машин. Далеко не один полный на одну машину! Про инкрементальные и диффы сразу — та же шляпа. Суммарно, насрал он за эти два месяца уже 13 тб.

Какого хрена прокс не удаляет старые (я только про полные) бекапы в соответствии с тем что ему настроили в вебморде? Меня ограничивает, а себя нет.

Как решить эту проблему? Скрипт-подчищалка по крону?

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

 ,

deep-purple
()

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