• Как написать бот для заказа воды/еды?

    @artinnok
    бекенд-программист
    для типовых задач (интернет-магазин, онлайн-бронирование) использую следующие решения:
    1. BotTap - супер простой интерфейс, много функций
    2. ManyBot - богатый функционал, много команд
    Ответ написан
    Комментировать
  • Может ли ClickHouse заменить Mysql?

    @artinnok
    бекенд-программист
    Конечно, нет - это абсолютно разные базы, у которых разное применение.
    ClickHouse - OLAP (подходит для аналитики на больших массивах неизменяемых данных)
    MySQL - OLTP (подходит для нормализованных таблиц с изменяемыми данными)
    Вот версус.
    Ответ написан
    Комментировать
  • Не запускается сервер django, кто сталкивался с такой ошибкой?

    @artinnok
    бекенд-программист
    RockyMotion попробуй следующие шаги:
    1. прописать такой INSTALLED_APPS:
    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'blog.apps.BlogConfig',
    ]

    2. убери вложенность blogengine/blogengine до просто blogengine
    3. переименуй blogengine -> config
    4. запусти сервер вот так python manage.py runserver --settings config.settings

    Если не поможет, рекомендую пройти официальный туториал Django - там все точно работает и узнаешь основы :)
    Ответ написан
  • Конструктор ботов телеграм?

    @artinnok
    бекенд-программист
    1. ChatFuel - самый первый конструктор чат-ботов, ориентирован на Западный рынок. Богатый функционал для Facebook, Telegram. Есть бесплатный тариф и тариф от 15 $ / месяц
    2. BotTap - диалоговый конструктор чат-ботов, удобен простотой использования - создание алгоритма идет как в обычной переписке внутри мессенджера, без блок-схем. Есть готовые шаблоны чат-ботов. Поддерживает Telegram, Facebook, VK, Viber. Есть бесплатный тариф и тариф от 490 рублей / месяц
    3. BotMother - конструктор чат-ботов через блок-схемы. Интересной особенностью является отправка HTTP-запросов и прием платежей внутри бота . Работает в Telegram, Facebook, VK, Viber, Одноклассники. Есть бесплатный тариф и платный от 1249 рублей / месяц
    Ответ написан
    Комментировать
  • Чат-боты в Telegram – программировать или использовать конструктор?

    @artinnok
    бекенд-программист
    Все зависит от задачи, на самом деле:
    • Если стоят задачи интеграции с несколькими сервисами и какая-то нетривиальная бизнес-логика - то однозначно писать свое решение
    • Если задачи типовая - кафе, маникюрная, магазин, то вполне может хватить и конструктора чат-ботов.


    Я обычно использую конструкторы BotTap или Chatforma, если задача типовая или нужно показать прототип.
    Ответ написан
    Комментировать
  • Какой конструктор выбрать для создания телеграм бота?

    @artinnok
    бекенд-программист
    я обычно использую BotTap - если заказчика устраивает оставляю, если нет, то пишу кастомное решение. в целом, удобно и много готовых решений под клиентов.
    Ответ написан
    Комментировать
  • Почему docker не сохраняет данные бд в папку на хост машине?

    @artinnok
    бекенд-программист
    Надо заюзать volumes на уровне compose-файла . Также, почитайте про named volume.
    Ответ написан
    Комментировать
  • Для каких задач в веб-разработке очень хорошо подходит питон?

    @artinnok
    бекенд-программист
    Основной список применений Python:
    • Machine Learning
    • Date Science
    • Web App - REST, GraphQL
    • Scraping
    • Различные скрипты, автоматизирующие рутину


    Если Вас интересует web - то это Django, Django Rest Framework, Flask и темпы набирает aiohttp.
    • Django - есть все, что пожелает душа, удобно, быстро в разработке, обладает крутым ORM из коробки и встроенной админкой. Проект активно развивается, количество контрибьюторов и экосистемы с возрастом увеличивается
    • Flask - микрофреймворк, который можно расширить так, как захочется. Проект умирает, давно не было релизов, но достаточно много проектов на нем написано, поэтому экосистема достаточно развита. Но каждую фичу надо будет писать самому или искать либу под это дело.
    • aiohttp - асинхронный клиент / сервер, из популярных библиотек самая быстрая. Проект молодой, но активно развивается, экосистема растет


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

    С помощью Django и DRF можно очень быстро создать REST API, которое будет удобно поддерживать или расширять. Бонусом к этому будет удобная администраторская панель.

    Python плохо подходит для написания следующих приложений:
    1. GUI приложения
    2. iOS / Android
    3. Разработка игр
    4. Низкоуровневые приложения, которые работают с сетью
    Ответ написан
    5 комментариев
  • Cookie или localStorage?

    @artinnok
    бекенд-программист
    Тут нет оптимального варианта - надо смотреть на бэкэнд и фронтенд совокупно.
    Далее, считаем что фронтенд SPA, бэкэнд чистое API.

    Если выбор за Cookies:
    1. На сервере необходимо реализовать защиту от CSRF
    2. На фронте также надо будет реализовать обвязку под передачу CSRF-токена
    3. Вся авторизация будет обрабатываться бэкэндом - т.е. он ставит куку через Set-Cookie с httpOnly и secure и сам же читает из куки для аутентификации / авторизации
    4. Фронтенд не имеет доступа к кукам - не думает об авторизации и об XSS
    5. Обычно, XSS используют чтобы украсть авторизационный токен через JS - если авторизационная кука httpOnly - нет доступа к кукам через JS, нет проблем

    Если выбор за localStorage:
    1. Не надо делать CSRF защиту на сервере - нет кук, нет проблем
    2. Экранировать потенциально опасные данные бэкэндом на входе - обеспечит дополнительную защиту от XSS при рендере данных
    3. Надо делать защиту от XSS на фронте, т.е. экранирование данных при рендере - чтобы потенциально вредоносный JS код превращался в строку, а не вставлялся в DOM
    4. На фронте надо сделать обвязку под сохранение / передачу / валидацию токена
    5. Всегда остается человеческий фактор - забыли сделать экранирование при рендере на фронте, JS код имеет доступ к токену и он утек


    Могу посоветовать использовать фреймворки, как на бэкэ, так и на фронте - они обычно имеют уже реализованную защиту от основных типов атак. Мы на проекте юзаем localStorage и React, ну и верим в лучшее :)
    Ответ написан
  • Почему у rabbitmq такая низкая производительность?

    @artinnok
    бекенд-программист
    Можно попробовать кластеризацию для RabbitMQ и поиграться с настройками.
    Еще есть вариант заюзать Apache Kafka - более мощное и высокопроизводительное решение.
    Ответ написан
  • Можно ли весь код по умолчанию оборачивать в try/except и чем это грозит?

    @artinnok
    бекенд-программист
    Надо учитывать 2 момента при написании try / except:
    1. Старайтесь писать блок try / except с конкретными ошибками - это позволит обрабатывать те ошибки, которые реально могут произойти. К примеру, Вы в ответе можете получить поле foo или не получить - почти наверняка данный код стоит обработать на KeyError.
    2. Использовать блок try / except без перечисления ошибок (пустой блок) стоит писать только тогда, когда Вы реально знаете зачем он. К примеру, Вы не знаете, какие ошибки могут произойти в коде, т.к. его много или он плохо написан или плохо спроектирован, но при этом, хотелось бы чтобы код не падал и работал дальше - да, тогда его стоит использовать. Но при таком случае, обязательно сделайте хороший логгинг или еррор репортинг админу внутри блока except.
    Ответ написан
    2 комментария
  • Как ограничить кол-во запросов в секунду в Telegram боте?

    @artinnok
    бекенд-программист
    Ложите ID юзера в Redis и ставьте EX на сутки :)
    При получении запроса на бонус проверяйте наличие ID юзера в Redis через EXISTS - если нету, значит не получал в течение суток. Если есть - значит получал в течение суток.
    Ответ написан
    Комментировать
  • Анализ логов сервера на Python. Зависает скрипт при logrotate, как бороться?

    @artinnok
    бекенд-программист
    Вам стоит заюзать дефолтный пакет logging и TimedRotatingFileHandler - это уже грамотно реализовано и сразу с ротацией логов.

    пример конфига:
    LOGGING = {
        "version": 1,
        "disable_existing_loggers": False,
        "formatters": {
            "rotate": {"format": "%(levelname)s %(asctime)s %(pathname)s %(lineno)d %(message)s"}
        },
        "handlers": {
            "file_rotate": {
                "level": "DEBUG",
                "class": "logging.handlers.TimedRotatingFileHandler",
                "formatter": "rotate",
                "filename": "/var/log/my_logger.log",
                "when": "midnight",
            }
        },
        "loggers": {
            "my_logger": {
                "level": "DEBUG", 
                "handlers": ["file_rotate"]
            }
        },
    }


    логи пишете так:
    import logging
    
    my_logger = logging.getLogger("my_logger")
    my_logger.debug('debug message')
    my_logger.info('info message')
    my_logger.error('error message')
    my_logger.critical('critical message')
    Ответ написан
    Комментировать
  • Что значит плоский код?

    @artinnok
    бекенд-программист
    вложенный код (nested):
    for a in range(10):
        for b in range(20):
            for c in range(30):
                for d in range(40):
                    if d == 1:
                        if c == 1:
                            if b == 1:
                                 if a == 1:
                                      print('nested code')


    плоский код (flat):
    for a in range(10):
        print('flat code')


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

    @artinnok
    бекенд-программист
    Почитайте про вебсокеты - прямо просятся в Вашем случае.
    Ответ написан
    Комментировать
  • Как получить сообщения direct в instagram?

    @artinnok
    бекенд-программист
    Александр, можете плиз скинуть ссылку на библиотеку, которую используте?
    Ответ написан
    Комментировать
  • Mac mini для python и веб разработки?

    @artinnok
    бекенд-программист
    у меня Macbook Air 2014 года: стабильно открытые PyCharm, Chrome, Insomnia, Telegram, iTerm и Docker с несколькими запущенными контейнерами. полет нормальный, не испытываю дискомфорта.

    думаю Mac mini подойдет для аналогичных задач.
    Ответ написан
    Комментировать
  • Django gunicorn nginx почему не обновляеться бекенд?

    @artinnok
    бекенд-программист
    сталкивался с кэшированием .pyc файлов, соответственно, исполняются старые скомпилированные файлы - попробуй удалить их:
    find . -name '*.pyc' -delete
    Ответ написан
  • Как можно упростить код?

    @artinnok
    бекенд-программист
    если вы пытаетесь сделать свой сканер портов - советую посмотреть в сторону nmap
    если хочется чего-то покруче для пентеста - kali

    если хотите писать хорошо на питоне - почитайте

    из личных ощущений:
    • код очень сложный для простой задачи
    • не сможете разобраться в данном коде через 3-6 месяцев
    • socket в данной ситуации необязательно использовать, requests достаточно
    • на данном этапе многопоточность избыточна для этого кода
    • почитайте про нейминг переменных в питоне
    • try без явного указания ошибок в except не стоит использовать (данную конструкцию стоит использовать только в том случае, если вы реально знаете для чего она) - вы ловите все исключения и игнорируете их. сделайте обработку конкретных исключений, если они там возникают.
    • пишите менее "сжатый" код - добавляйте новые линии, они визуально делят код на логические блоки
    Ответ написан
    Комментировать
  • Как большие сайты справляются с отправкой e-mail?

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

    сервисы
    самостоятельный настройка
    Ответ написан
    7 комментариев