Задать вопрос
  • Часто ли телеграм боты подвергаются атакам и как вы этого избегаете?

    Vindicar
    @Vindicar
    RTFM!
    Ну для начала что значит "атака"? Какую угрозу ты ожидаешь? Потому что ответы будут ОЧЕНЬ разные в зависимости от этого.

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

    Зафлудить бота запросами? С одного аккаунта не получится, а с многих - недёшево. Кому ты нужен за такие деньги?

    Потыкать команды бота на пример SQL-инъекции? Если бот вообще использует БД, достаточно использовать стандартные средства подстановки параметров в запросы, а не колхозить SQL чере зформатирование строк.

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

    Короче, ответь хотя бы для себя на вопросы:
    1. чего конкретно боишься?
    2. кому конкретно ты нужен?
    Ответ написан
    2 комментария
  • Как верно настроить вероятность в мини - игре?

    Vindicar
    @Vindicar
    RTFM!
    0. Главное: вопрос у тебя звучит "Как верно настроить вероятность". В коде ровно одна строчка с random, и ты не объясняешь что она делает. Собственно, и правила игры (т.е. желаемое поведение кода) ты не озвучил. Что такое "подкрутка"? Что тут посоветуешь...
    1. Если ты ловишь себя на том, что создаёшь переменные вида mine_3, mine_4, mine_5, а дальше делаешь x = eval(f"mine_{mines_kolv}[{now_state}]") тебе нужна индексируемая коллекция! Список или кортеж. Тем более что списки ты уже используешь, значит, знаешь, что это такое. Неужели "список из списков" - это такая сложная концепция?
    2. У тебя в самом первом SQL-запросе подстановка параметров выполняется корректно, а дальше идёт ересь с использованием %-форматирования. Не надо так.
    3. У тебя куча таблиц, из которых ты вытаскиваешь по одному значению. Если эти значения всегда требуются вместе, почему не объединить их в одну таблицу?

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

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Прежде, чем искать ошибку в коде, вам надо аналитически доказать, что вводимая вами операция обладает нужными свойствами. Нужные инструменты - бумага, карандаш, резинка, голова.
    Ответ написан
    2 комментария
  • Почему не удаётся найти путь?

    Vindicar
    @Vindicar
    RTFM!
    AudioSegment.converter = f"{os.getcwd()}\\ffmpeg.exe"

    Ты уверен, что файл лежит в текущем каталоге? Это не то же самое, что каталог программы.
    Если тебе нужен каталог программы, лучше его и взять:
    from pathlib import Path
    import sys 
    
    SCRIPT_DIR = Path(sys.argv[0]).parent.resolve()
    FFMPEG = SCRIPT_DIR / 'ffmpeg.exe'  # чтобы не париться с разделителем каталогов (/ или \)
    Ответ написан
    Комментировать
  • Сколько всего паролей будет?

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    Если пароли считаются уникальные, как строки, то ответ - 2^n: любую строку из "a" и "b" можно как-то составить.

    Если пароли считаются уникальные, как последовательность "aa", "a", "b" и "bb" (так, для трех букв отдельно подсчитаются a+aa, aa+a и a+a+a), то ответ можно найти по рекуррентной формуле F(N) = 2(F(N-1)+F(N-2)), F(1) = 2, F(2) = 6.

    Формла выводится так: В конце может быть один символ. Тут 2 варианта - это "a" или "b", тогда получается F(N-1) последовательностей длины N-1. Если же в конце идет "aa" или "bb", то таких последовательностей ровно F(N-2). Просуммировав все получится 2(F(N-1)+F(N-2))

    Это что-то вроде чисел фиббоначи. Можно еще вывести формулу:
    F(N) = (1+sqrt(3))^(N+1)-(1-sqrt(3))^(N+1) / (2sqrt(3))


    Если пишите программу, то лучше считать F() итеративно. Только учтите, там будут очень большие числа - в 64-битный тип не поместится.
    Ответ написан
    Комментировать
  • Зачем при конвертации csv в json теряется первая строка?

    Предполагается, что в первой строке CSV-файла идёт заголовок с именами колонок.
    header: int, list of int, None, default ‘infer’
    Row number(s) to use as the column names, and the start of the data. Default behavior is to infer the column names: if no names are passed the behavior is identical to header=0 and column names are inferred from the first line of the file, if column names are passed explicitly then the behavior is identical to header=None. Explicitly pass header=0 to be able to replace existing names. The header can be a list of integers that specify row locations for a multi-index on the columns e.g. [0,1,3]. Intervening rows that are not specified will be skipped (e.g. 2 in this example is skipped). Note that this parameter ignores commented lines and empty lines if skip_blank_lines=True, so header=0 denotes the first line of data rather than the first line of the file.
    https://pandas.pydata.org/docs/reference/api/panda...
    Ответ написан
    1 комментарий
  • Где лучше учиться на программиста, если тебе за 35?

    xez
    @xez
    TL Junior Roo
    Шансы от этого не зависят.
    Учиться в любом случае придётся самостоятельно.
    Ответ написан
    Комментировать
  • Как прикрепить в вопрос объёмный код?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Не прикреплять объёмный код, всё равно никто не будет вычитывать, здесь не фриланс. Вместо этого стоит прикрепить минимальный воспроизводимый пример. Часто при попытке создания такового потребность в вопросе вообще отпадает.
    Ответ написан
    Комментировать
  • Ошибка IndexError: list index out of range. Что делать?

    Vindicar
    @Vindicar
    RTFM!
    Включить голову и подумать, что же ещё.
    value = call.data.upper().split('/')
    Ты ожидаешь, что call.data будет содержать хотя бы один знак /, тогда value будет содержать два элемента - с индексом 0 и индексом 1. Раз IndexError, значит, скорее всего, value содержит только один элемент. А это слуится если call.data не содержит разделителя, в твоём случае /.
    b1 = types.InlineKeyboardButton('USD/EUR', callback_data='usdeur')

    Ну собственно, ты и задаёшь значения callback_data, не содержащие /. Вот и вся разгадка.
    Ответ написан
    Комментировать
  • Как написать симулятор посадки на Луну?

    1) Как рассчитывать движение, работу двигателя и так далее?
    2) Как зафиксировать коллизию объектов (Луны и станции)?

    Проще всего - взять уже готовую физическую библиотеку, которая и коллизии считает и импульс.

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

    Для расчёта коллизий есть разные алгоритмы - тут тебе следует погуглить. Они собственно строятся на том, что у тебя есть какая-то модель формы объекта и векторы скоростей.
    3) Как процедурно сгенерировать реалистичную поверхность Луны?

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

    https://en.wikipedia.org/wiki/Lunar_Lander_(video_...
    Ответ написан
    1 комментарий
  • Как преобразовать html страницу в картинку на стороне сервера?

    Vindicar
    @Vindicar
    RTFM!
    а браузера на сервере не будет.

    Нет ножек - нет мультиков (с)
    Ты или используешь готовый движок HTML рендеринга и исполнения скриптов (т.е. браузер), или пишешь свой.
    Сразу скажу, последнее - нереально.

    Лучше зайди с другой стороны. Ты можешь использовать matplotlib для генерации статического изображения, так как он умеет не только графики, но и TeX-разметку для формул. А уже это изображение можно закэшировать и вставлять в HTML или в PDF, по желанию юзера.
    Ответ написан
    Комментировать
  • Можете посоветовать книги или курсы по python?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Примерно нахожусь между начинающим и средним

    Вот темы которые я знаю на достаточном уровне:
    - Основы python (циклы, условные операторы, переменные, функции, строки, списки)
    - Вложенные списки (матрицы)
    - Кортежи
    - Множества
    - Словари
    - Некоторые модули

    Это даже не джун, о каком среднем Вы говорите?

    Можете посоветовать книги или курсы по python?

    1. Гуглите "учебник python" и решаете все от А до Я.
    2. Гуглите следующий учебник, который восполнит пробелы п1.
    3. Ищите себе пет-проект и пытаетесь его реализовать (повторить несколько раз). Т.к. Python сильно разносторонне-развитый язык, то и проекты должны быть в портфолио такие, которые от Вас может ожидать работодатель/заказчик.
    4. Ищите людей, которые сделают ревью п.3.
    5. Заливаете достойные проекты на гит.
    6. Идете на собесы, попутно устраняя пробелы в знаниях и пет-проектах, которые услышите на собесах.
    Ответ написан
  • Можно ли учить Go первым языком?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Учить можно, а рассчитывать, что это облегчит вам вход - не стоит. Вакансий на Go сильно меньше, а требования к кандидатам выше.
    Ответ написан
    2 комментария
  • Как быстро изучить C#?

    @tukreb
    Быстро изучить просто.
    Придумывайте любой проект и начинаете его делать.
    И самое главное, вы должны делать это самостоятельно, без всяких тостеров.
    Книги вам помогут любые где есть просто базовые знания, а вот всякие ютуб каналы особо не помогут, может только чуть разобраться в фреймворках, но всё равно документация рулит.
    Если хотите создавать игры, то копайте движок Unity и его документацию.

    Сам процесс простой.
    1. Пишите как знаете проект, главное чтобы заработало как планируете, на сам код не обращайте особого внимания.
    2. Начинаете переписывать проект с полученным опытом из 1 пункта с использование новых знаний из прочтения книг по всяким архитектурам и паттернам.
    3. Повторяете в цикле первые 2 пункта до 11 класса каждый день тратя по 4 часа минимум.

    Весь ваш прогресс заносите через git на гитхаб, пригодится, когда будете искать работу.
    Ответ написан
  • Как устроена бибилотека aiogram внутри а именно FSM?

    Vindicar
    @Vindicar
    RTFM!
    Ну конкретно по вопросу: можно сделать обоснованную догадку, если знаком с понятием "конечный автомат".
    Это нечто, обладающее набором состояний. В рамках состояния автомат выполняет определённую деятельность и/или ждёт определённого события.
    Автомат может переходить из состояния в состояние по внешнему сигналу. При этом правила перехода зависят от сигнала И от состояния. Иными словами, автомат может реагировать по разному на один и тот же сигнал, в зависимости от своего состояния.

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

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

    Далее возникает вопрос: а что если нам нужно передавать какие-то данные из состояния в состояние? Вот тут возникает понятие контекста автомата, т.е. какого-то набора данных, которые могут читаться и изменяться при его работе. Это FSMContext.

    Наконец, сугубо практический вопрос: автомат должен "помнить", в каком он состоянии, и должен хранить свой контекст. Где он будет это делать? Вот тут на помощь приходят классы Storage. В частности, MemoryStorage хранит эти данные в памяти. Ненадёжно, не переживает перезапуск бота, но работает быстро и удобно при отладке.

    Попробуй реализовать очень простого бота с автоматом состояний, не используя State, а храня состояние для пользователя самостоятельно. Например, в словаре вида userid: (состояние, контекст). И проверяй вручную состояние и контекст при обработке событий. Тогда поймёшь, что примерно происходит внутри FSM.
    Ответ написан
    2 комментария
  • Почему возникает ошибка при работе с Python и OpenCV?

    Vindicar
    @Vindicar
    RTFM!
    1. Не принимать предупреждения за ошибки.
    2. Работать на машине, где видяха поддерживает одну из указанных библиотек, и поставить на неё эту библиотеку.
    Ответ написан
    Комментировать
  • Что делать, когда Wolfram говорит, что будет корень, а считать не хочет - a³+b³=z³?

    wataru
    @wataru Куратор тега Математика
    Разработчик на С++, экс-олимпиадник.
    Этот корень - иррациональное число. Бесконечное. Его точно на компьютере не подсчитать никак. Это будет какое-то большое число с бесконечным не повторяющимся набором цифр после точки.

    Точнее всех будет считать python если использовать библиотеку Decimal:
    from decimal import *
    getcontext().prec = 400
    a = Decimal('112312312312312311231231231231231123123123123123112312312312312311231231231231231123123123123123');
    print(pow(a,Decimal(1/3.0)))


    Можете хоть тысячи знаков считать, ограничения - в основном скорость работы и требования по памяти.
    Ответ написан
    5 комментариев
  • Как сделать так чтобы в scrapy, парсились дубликаты ссылок? То есть так чтобы каждая спаршенная ссылка, должна создать уникальный файл. Как?

    Vindicar
    @Vindicar
    RTFM!
    Перед открытием файла проверяй, существует ли он. Если существует, добавляй числовой суффикс, пока не найдёшь свободное имя. Для простоты можешь оформить это в виде функции, которая принимает исходное имя файла, а возвращает либо его же, либо скорректированный вариант.
    Для реализации pathlib в помощь.
    Ответ написан
    2 комментария
  • Программирования учат или применяют?

    Newto
    @Newto
    Добрый день. Я перечитал все ответы выше, а так же комментарии к ним. Решил прокомментировать, с точки зрения своего опыта(я занимаюсь разработкой уже более 15-ти лет). Для удобства чтения я буду писать по пунктам.

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

    2) Методика "объяснение и практика". Вы пишете, что "при таком способе мне приходится одно и тоже глазами несколько раз пробегать чтобы запомнить". Это, с моей точки зрения, в корне не верно. Ибо то, что вам объясняют, не нужно "пробегать глазами" несколько раз, что бы запомнить. Это вообще не нужно запоминать если это не те самые "стандарты"; это нужно осмыслить и понять. После того, как к вам придёт понимание как это работает, зачем и почему это надо -- вы сможете это использовать, осмысленно, в собственном коде.

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

    4) ВУЗ. Более 10-ти лет назад, у меня в подчинении, в вебстудии, работал PHP джун. Он доучивался в МГТУ имени Баумана. И он не знал ничего. Совсем. Мне приходилось объяснять ему простейшие вещи, типа что значит иструкция "$a += $b;". Сам же я учился в ВУЗе малоизвестном, на факультете "прикладная информатика в экономике" и наш преподаватель информатики, на первом курсе, на вопрос что значит в коде программы на языке C++ инструкция "с++" ответил, что это "так язык называется". Однако, вскоре ко мне начали ходить сокурсники, с просьбами "а напиши программку". И происходило это потому что я сам загорелся программированием, купил книжки, установил всё что нужно было установить на компьютер и начал "творить волшебство", как это мне тогда виделось, с горящими глазами. Короче говоря не нас учат ВУЗы, а мы учимся в ВУЗах или учимся без них. Тут уж как пойдёт.

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

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