Задать вопрос
  • Как узнать количество уникальных результатов random.shuffle?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Число перестановок списка длины n - это n! (факториал: n!=1*2*3*...*n). Это основы комбинаторики.

    Так что если надо просто число различных вариантов, то:

    math.factorial(len(our_list))
    Ответ написан
    Комментировать
  • Что за папка /root/mdb103/?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Сделай из под root

    lsof -n | grep root/mdb103

    при запущенной mariadb. Если найдёт запущенные процессы mariadb, использующие файлы в этом каталоге, значит да, файлы там нужны.

    В каталоге лежат deb-пакеты, они после установки не нужны. В подкаталоге лежат исходники сервера скомпилированные. В зависимости от того, как они установлены, они могут быть также не нужны. Если их ставили через make install без префикса в /root, то сервер должен, скорее всего, стоять в /usr/local. Если через сборку пакетов с помощью debian/rules (при этом готовые пакеты кладутся в вышестоящий каталог, что весьма логично), то тоже не нужны - они должны быть затем установлены в систему.

    В конце концов, необязательно файлы сразу удалять. Можно попробовать переименовать этот каталог, перезагрузить базу или даже весь сервер и убедиться, что всё работает.
    Ответ написан
    1 комментарий
  • Где взять бесплатную музыку для коммерческого использования?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Например, можно посмотреть на проекты Кевина Маклауда:
    https://incompetech.com/ требует только упоминания автора
    https://freepd.com/ музыка, перешедшая в общественное достояние (public domain)

    А вообще искать музыку royalty free, под public domain или под лицензиями Creative Commons (внимательно смотреть на конкретный тип, некоторые разрешают коммерческое использование, а некоторые нет).
    Ответ написан
    Комментировать
  • Как реализовать Mutual TLS?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Сначала немного теории.

    CA - Certificate Authority - доверенный удостоверящий центр, который подписывает сертификаты.
    У каждой стороны есть секретный ключ, который она никому не показывает, и публичный ключ, он же сертификат. Чтобы подтвердить, что сертификат принадлежит обеим сторонам, эти сертификаты должны иметь подпись доверенного лица, в данном случае CA.

    Обычно мы привыкли, что в SSL только серверная сторона доказывает свою подлинность. Идея mTLS в том, что обе стороны должны предоставить свой публичный сертификат, подписанный CA. Тогда если сервер доверяет CA, он будет доверять и клиентскому сертификату.

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

    Итак, что нам нужно для установления сессии?

    1. Сертификат CA - kbs_ca.crt (скорее всего, можно склеить оба CA - промежуточный и корневой - в один файл);
    2. Приватный ключ клиента, который он будет использовать для шифрования - private.key;
    3. Соответствующий приватному публичный ключ-сертификат, который клиент будет сообщать серверу - public.cer.

    Я ввёл в гугл "php curl mtls" и в первой же ссылке есть пример кода: https://smallstep.com/hello-mtls/doc/client/php

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

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Распространённая ошибка: в качестве chat_id используется id пользователя. Естественно, получателем будет пользователь, а не группа.

    Правильно вместо этого:

    $chat_id = $data['message']['from']['id'];

    использовать это:

    $chat_id = $data['message']['chat']['id'];
    Ответ написан
    Комментировать
  • А можно ли создать скрипт, который добавить в html письмо что отследить папки пападания?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Почтовые клиенты принципиально не поддерживают javascript, так как это офигенная дыра в безопасности пользователя. Более того, приличные почтовые клиенты по умолчанию даже картинки с внешних ресурсов не скачивают, не то что скрипты.
    Ответ написан
    5 комментариев
  • Как пользоваться TTY?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    В консоли раскладка клавиатуры грузится с помощью команды loadkeys, раскладки лежат в /usr/share/keymaps (в deb*untu их по умолчанию нет, надо доставить пакетом console-data).

    Шрифт в консоли устанавливается командой setfont, шрифты и таблицы кодировок лежат в /usr/share/console{fonts,trans} (тоже в пакете console-data).

    loadkeys и setfont устанавливают раскладку и шрифт до перезагрузки. Лучше этим не страдать, а использовать штатную настройку, в debubuntu это dpkg-reconfigure console-setup.

    Для использования мыши в консоли надо установить и запустить сервис gpm.
    Ответ написан
    Комментировать
  • Как ограничить частоту нажатий кнопки?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Очевидно, запоминать куда-нибудь время последнего нажатия на кнопку и сравнивать его при очередном нажатии. Можно также при нажатии на кнопку убирать/изменять клавиатуру, но пользователь может успевать иногда нажать на кнопку 2-3 раза до исчезновения/изменения кнопки.
    Ответ написан
    6 комментариев
  • Что нужно для своего сервиса отправки смс?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Если есть желание обслуживать свой сервис, то перспективнее стать клиентом одного из многочисленных агрегаторов, удобнее даже местного (подсмотрел, что в профиле автора вопроса Украина), чтобы проще было с оплатой и техподдержкой, но это необязательно, можно искать агрегаторов в том числе и в странах целевого трафика. Самому заключать договора с операторами кучи стран неразумно сложно. Во многих странах ещё и придётся озаботиться подключением к базам/сервисам MNP, что может доставлять в том числе регуляторные проблемы (могут не давать доступ иностранцам).

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

    СМС для A2P (application-to-person) в целом стоят неразумно дорого, за счёт их цены операторы в том числе пытаются компенсировать снижение цен на услуги для частных лиц.

    Самому стать одним из таких крупных агрегаторов в настоящее время малореально, так как рынок уже плотно освоен опытными игроками, а заработать там можно только на копеечных комиссиях (практически вся цена смс достаётся операторам). До кучи, трафик A2P SMS не растёт, сейчас модно пилить свои мобильные приложения с пушами и интеграции с мессенджерами.
    Ответ написан
    Комментировать
  • Можно ли отследить текст нажатой инлайн кнопки в телеграмм?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Не надо применять один callback_data ко всем кнопкам! Именно callback_data и используется для определения, какая кнопка нажата.

    Например, можно назначить кнопкам call:1 ... call:9 и обрабатывать в зависимости от номера, а глобально ловить по тому, что call.data начинается на 'call:':

    if call.data.startswith('call:'):
        button_number = int(call.data[5:])
    Ответ написан
  • Почему возникает ошибка redirect url mismatch при social login google / facebook?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Facebook с некоторых пор требует, чтобы этот URL был https://, для localhost можно сделать с самоподписанным сертификатом (всё равно Facebook на него только redirect делает, проблема сертификата будет проблемой клиента). Когда мне такое потребовалось, для отладочных целей нашёл первый попавшийся докер с nginx+https и его применил для проксирования в реальное приложение.
    Ответ написан
    Комментировать
  • Как проверить работает ли бот или нет?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Это невозможно - боты никак не могут общаться друг с другом.
    Ответ написан
  • Где можно собрать команду для разработки игры?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Проекты, в которых никто никому не платит и не имеет никаких обязательств, взлетают крайне редко. Чаще всего попытки провернуть подобное заканчиванются на быстром выгорании участников, их нежелании делать свои части вовремя, постоянном блокировании общего процесса разработки несделанными задачами... Потом начинается текучка, попытка найти других на замену, те долго пытаются въехать в процесс, начинают всё перекраивать под свои собственные представления...

    Подобное наблюдается постоянно. Игроделанием никогда не увлекался, но могу пояснить на примере переводов.
    Пояснение
    Скажем, было много проектов по бесплатному переводу фильмов/сериалов/аниме/книг, но в основном выживают только те, которые собирают донаты на возмещение участникам проектов или даже прямо продают части переводов (последние главы, ранний доступ итд). И это вполне понятно. Одна серия аниме (они всего по 20 минут чистого времени) содержит 200-400 фраз. Даже если взять готовые субтитры на другом языке и тратить на одну фразу 30 секунд (это безумно мало, хватит только на очень черновой перевод), на одну серию уйдёт 2-4 часа. Далее это надо отсмотреть минимум дважды, исправляя ошибки (ещё как минимум час). В итоге на серию вполне может уйти полноценный рабочий день. Серии выходят раз в неделю, получается, что для ведения всего лишь 5 сериалов придётся работать в этой сфере практически full time. Готовые серии надо сдавать редактору, который потратит может и чуть меньше времени, но всё равно немало. Вопрос времени и сложности озвучивания, вопрос тайминга с нуля и перевода со звука оставим за кадром.

    Для киносериалов в уме умножаем всё на два (серии 40 минут). Для книг оценку дать сложнее, но в целом там обычно объём на уровне 200-600 предложений на главу, которые ещё и более длинные, чем фразы в субтитрах. И в книгах могут быть сотни и тысячи глав, в отличие от сериалов, где нормальная длина - это 13/26/52 серий (сезон 3 месяца/полгода/год), поэтому непрофессиональные бесплатные книжные переводы вообще могут несколько раз сменить переводчика.

    Группа переводчиков, в которой я когда-то состоял, выгорела менее чем через 2 года по причине потери энтузиазма её лидера (и да, он тогда подсел на Lineage2). Без локомотива, бегающего за всеми и пинающего по любым задачам, группа быстро сдулась. Но и без этого разные участники группы постоянно снижали/полность теряли активность. Ибо неспроста рабочее время всего лишь 8 часов в сутки - людям очень тяжело работать больше.


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

    Но если всё же хочется найти единомышленников, то искать их, возможно, надо не в профессиональных сообществах, а в узкотематических. Скажем, для игр в тематике SCP Foundation имеет смысл покопаться в соответствующих группах, где могут найтись энтузиасты, готовые нарисовать объект [ЗАСЕКРЕЧЕНО] на территории [ДАННЫЕ УДАЛЕНЫ] для заинтересованного в тематике программиста, рисующего как курица лапой. Но в целом шансы сделать что-то больше короткого прототипа я бы и там оценивал как невысокие.

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

    PS
    PS: От себя могу сказать, что я давно делаю проекты для души в одиночку, потому что понимаю, что и сам могу очень сильно тянуть со сроками. Скажем, я три года назад написал рендеринг карты от одной онлайн игры (на основе реверс-инжиниринга веб-клиента игры), но так как я писал это всё в экстренном темпе буквально за неделю, получился адский говнокод с кучей глюков и недоработок. И вот только спустя три года я добрался наконец до того, чтобы за два месяца вялого переписывания с нуля (даже не рефакторинга) в свободное время я наконец всё это переделал (дополнительно меня мотивировало появление в игре двух новых карт). Всего там менее 700 строк кода... А если бы я участвовал в каком-то проекте и выполнял свою часть общей задачи не по три года, а даже и по два месяца?
    Ответ написан
    1 комментарий
  • Как будет взломан алгоритм с генерацией бесконечного ключа шифрования?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Если есть алгоритм генерации бесконечного ключа K(n) (n - порядковый номер элемента ключа) с заданными параметрами, взломщик будет перебирать значения параметров, пытаясь применять сгенерированный ключ к шифрованному тексту. Полученное проверяется на текстовую валидность. Когда получится нормальный естественный текст - ключ взломан.

    Например, пусть параметры p и q, алгоритм K(n)=p^n mod q, тогда взломщик просто устроит перебор значений (p; q) от (0; 0) до бесконечности.

    Или пусть алгоритм будет K(n)=цифра числа пи "n+p", где p - параметр ключа. Тогда будем делать перебор значений p. Это будет довольно быстро, ведь нам надо будет просто последовательно генерировать цифры числа пи, помнить последние $длина_шифротекста символов и проверять их применимость как ключа.

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

    Собственно, чтобы подобный алгоритм имел хоть какой-то смысл, надо, чтобы поиск этих самых параметров p и q был безумно сложным. Если можно проверять миллион вариантов ключа в секунду, то для криптостойкости потребуется, чтобы требовались даже не миллиарды, а как минимум триллионы секунд перебора. Ведь миллиард секунд - это жалкие 8 лет, если взять тысячу вычислителей, то 8 лет превратятся в месяц. а при 30 тыс. - в сутки.

    Любой дискретный шифр с известным или предполагаемым алгоритмом ломается перебором. Даже хрестоматийный весьма стойкий RSA ломается. Защита данных дополнительно обеспечивается сменой ключа, алгоритмами Диффи-Хеллмана, реализацией PFS итд итп.

    Есть ещё одно обстоятельство. Пусть у нас есть шифр простого сдвига с бесконечным неизвестным ключом, такой чёрный ящик, выдающий шифротекст. Тогда если подать на вход ящику сплошные нули, на выходе он будет выдавать ключ. Чем больше нулей подать, тем больше элементов ключа будет раскрыто. С xor такая же фигня. С нормальными шифрами это, разумеется, не прокатывает.
    Ответ написан
    Комментировать
  • Как прописать код на питоне для настройки кнопок бота телеграмм?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Никак, по кнопке выполняется всего одно действие. Так что можно передать только то, что передаётся с этой кнопкой, плюс каким-либо образом ранее полученую информацию.
    Ответ написан
  • Получить список каналов/чатов на которые подписан бот?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Бот никак не может получить список чатов, которые ему доступны. Нужно было сохранять их самому куда-то.
    Ответ написан
    Комментировать
  • Как реализовать регистрацию пользователя из чата telegram?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Обычная практика - держать в памяти кэш пользователей. При изменениях также выполнять запрос к базе. При запуске бота - вычитывать пользователей в память.
    Ответ написан
    Комментировать
  • Aiogram | как сделать ввод в чат пользователя по кнопке?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Это называется inline mode, надо включить его у BotFather и сделать в боте inline query handler.

    Также см.
    https://core.telegram.org/bots/api#inlinekeyboardbutton
    параметры switch_inline_query и switch_inline_query_current_chat
    Ответ написан
    2 комментария
  • Могут ли силовики читать сообщения с мессенджеров с использованием СОРМ?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Если пользователь задаёт такой вопрос, то он, скорее всего, не включил двухфакторную авторизацию и не использует секретные чаты, а Телеграм у него зареган на свой собственный российский номер на своё собственное имя. Силовики просто сделают сброс пароля, получат у оператора содержимое смс и залогинятся тобой, затем автоматизированно скачают всю твою переписку для анализа. На всё про всё потребуются считанные минуты, и если это сделать посреди ночи, ты даже ничего не успеешь заметить. И никакое шифрование не спасёт.

    Ну а если тебя поймают с телефоном в руках, то можно будет просто открыть твой Телеграм и прям на нём проверить твои переписки.
    Ответ написан
    2 комментария
  • Как в TeleBot сохранять сообщения пользователя в определенный момент его действий?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Используй декоратор bot.callback_query_handler.

    @bot.callback_query_handler(func=lambda call: True)
    def my_handler(call):
        # call.data - содермое callback_data кнопки
        # call.message - исходное сообщение с кнопкой
        # call.message.from_user - отправитель исходного сообщения
        # call.from_user - нажавший на кнопку пользователь
        # call.message.chat - чат, в котором всё происходит
    Ответ написан
    Комментировать