• Django Rest Framework: как добавить дополнительное поле в контекст?

    tumbler
    @tumbler Куратор тега Django
    бекенд-разработчик на python
    `new` - локальная переменная view, она не попадает в объект p
    p.new = True
    Ответ написан
    Комментировать
  • Как обучить модель xgboost для получения 0/1?

    tumbler
    @tumbler Куратор тега Python
    бекенд-разработчик на python
    В один комментарий решение задачи машинного обучения не уложишь.
    Для начала, выпишите, что есть объект, для которого делаются предсказания, какие у него есть признаки (входные данные), что является выходными данными. После этого попытайтесь понять, какую задачу вы решаете - классификацию, регрессию, кластеризацию. Возьмите самый простой алгоритм, решающий задачу и попробуйте использовать его с помощью любой библиотеки, в которой вы хоть как-то разбираетесь. Выберите метрики, оценивающие качество работы алгоритма. Потом попробуйте другой алгоритм. Сравните их друг с другом.
    Когда всё это будет получаться так же легко как вопросы в тостер писать, попробуйте xgboost.
    Ответ написан
    3 комментария
  • Как обрабатывать json, если запросы не содержат хедер "Content-Type: application/json"?

    tumbler
    @tumbler
    бекенд-разработчик на python
    По заголовку Content-Type DRF определяет парсер нужного формата. Это поведение можно менять.
    Ответ написан
    Комментировать
  • Могут ли забанить приложение в Google Play за создание клиента к сайту или разделу сайта?

    tumbler
    @tumbler
    бекенд-разработчик на python
    Если контент лицензионный, то я как правообладатель ваше приложение закрою на раз. Если сайт это форум, то особо претензий быть не должно, однако сайт может жить с рекламы, и если ваше приложение ее не отображает, с ним могут начать бороться.
    Если цель - обучение и портфолио, я бы сделал приложение и условно передал бы права на него сайту, с сохранением инфы о разработчике и исходных кодов на гитхабе. Обе цели будут достигнуты а претензий будет минимум.
    Ответ написан
    Комментировать
  • Как создать видео с кучей картинок и аудио через программу FFmpeg?

    tumbler
    @tumbler Куратор тега Python
    бекенд-разработчик на python
    Можно. Первым шагом нужно создать 10 видеофайлов "картинка + видео". Вторым шагом - сконкатенировать их в одно видео.
    Ответ написан
    Комментировать
  • Самый быстрый путь изучения python?

    tumbler
    @tumbler Куратор тега Python
    бекенд-разработчик на python
    Ага, достаточно одну книгу прочесть и сразу средней сложности проекты делать.
    Не бывает так. Надо идти на джуниора и набираться опыта. Один коллега за полгода так вырос.
    Ответ написан
    Комментировать
  • Как сделать выборку в Redis?

    tumbler
    @tumbler
    бекенд-разработчик на python
    Ваш способ абсолютно правильный при абсолютно неподходящем способе хранения :)
    Я бы сделал HASH "notices:by_id" в котором ключами были бы id объектов, а значениями - то, что Вы хотите вытаскивать.
    Ответ написан
    Комментировать
  • Видео чат на Django?

    tumbler
    @tumbler Куратор тега Django
    бекенд-разработчик на python
    Для видеочатов от сервера требуется:
    * передавать громадные объемы данных (по сравнению с HTML)
    * с минимальной задержкой
    Поэтому серверная часть - это дикий хардкор.
    Или второй вариант, когда соединение устанавливается между участниками напрямую (P2P), и вся дичь серверной части переносится на JS, в плане обработки сетевых ошибок, ошибок кодеков и вот этой всей P2P.
    На хабре есть съевшие собаку ребята, у них есть бесплатный уровень использования SDK.

    А Django действительно пригодится, регистрацию делать, комнаты-пользователи-вот-это-всё.
    Ответ написан
    7 комментариев
  • Android. Как реализовать загрузку видео на сервер со слабым интернетом?

    tumbler
    @tumbler
    бекенд-разработчик на python
    Как ни крути, интернет на мобилке - он практически всегда слабый. Надо уметь с этим жить. Для этого многие реализуют "докачку": при обнаружении разрыва соединения клиент спрашивает у сервера "на чем остановились" и продолжает загрузку видео с указанной точки. Нужна поддержка и на клиенте, и на сервере.
    Вот эти ребята предлагают стандартизированный протокол с кучей библиотек по обе стороны интернета. Google, Vimeo реализуют "догрузку" по-своему. Есть еще resumable.js, но он работает с блоками и на мой взгляд слишком ненадежен из-за своей сложности.
    Ответ написан
    3 комментария
  • Как вывести field error в Wagtail admin?

    tumbler
    @tumbler Куратор тега Django
    бекенд-разработчик на python
    У Django-форм есть методы clean_"fieldname", которые проверяют корректность отдельных полей. Метод clean проверяет как эти поля друг с другом сочитаются, поэтому ошибки из него и формируются как non_field_errors (т.е. сами значения корректные - февраль, 31 число - но вместе не сочитаются).
    Можно попробовать бросить ValidationError в методе clean_amount.
    Ответ написан
  • Возможность обновления?

    tumbler
    @tumbler Куратор тега Python
    бекенд-разработчик на python
    Вопрос задан некорректно. window - это вообще что? из какой библиотеки? самописный класс?
    В общем случае надо смотреть на код window.update() чтобы понять что он делает.
    Ответ написан
    Комментировать
  • Как осуществить соответствие между двумя моделями?

    tumbler
    @tumbler Куратор тега Django
    бекенд-разработчик на python
    Если без ухищрений, то никак. Поскольку в Subscriber вместо ForeignKey(User) хранится просто user_id, Django не знает, что между Subscriber и BlogPost есть связь через внешние ключи. Соответственно, построить соответствующий запрос ORM не может.
    Чтобы сделать правильно, Subscriber должен иметь два ForeignKey(User) - для подписавшегося, и для автора. Тогда всех авторов пользователя можно будет получить так: [s.author for s in user.subsriber_set.all()]
    Если не менять схему данных, то можно написать прямой SQL-запрос через User.objects.raw()
    Ответ написан
    Комментировать
  • Как в RabbitMQ, или без него, настроить классическую очередь?

    tumbler
    @tumbler
    бекенд-разработчик на python
    из очереди берутся отчёты и отправляются серверу №1 для проверки и записи

    Ага, вот это место, в котором решается, оффлайн сервер№1 или онлайн.

    Потому что сервер №1 принимает всё последовательно

    А это главное требование.

    Вариант номер 1.
    Одна общая очередь, один воркер. Если сервер №1 оффлайн, воркер просто останавливает свою работу до тех пор, пока сервер не вернется. Для текущего сообщения надо выполнить amqp reject, тогда оно вернется в начало очереди.
    Порядок сообщений соблюден, но есть единая точка отказа, она же бутылочное горлышко производительности (впрочем, зависит от скорости обработки отчетов)

    Вариант №2.
    Одна общая очередь, много воркеров. Схема та же, сервер оффлайн - остановка обработки. Онлайн - возобновление. Узкое место по производительности и точка отказа исчезают, но два последовательных отчета от одного компьютера могут попасть одновременно на соседние воркеры, т.е. требование про "последовательно" может не выполняться.

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

    Как-то так. Сходу придумать, как заставить несколько воркеров обрабатывать одну очередь с сохранением порядка сообщений я не придумал.
    Ответ написан
    4 комментария
  • Как сделать lazy выборку данных для поля формы в админке?

    tumbler
    @tumbler Куратор тега Django
    бекенд-разработчик на python
    City.objects.filter(id__in=[i.city.id for i in FlyFromCity.objects.all()])
    
    City.objects.filter(id__in=FlyFromCity.objects.values_list('city_id', flat=True))

    Два queryset выше эквиволентны, хотя и генерируют разные SQL. Второй лучше тем, что на момент конструирования он не требует получения всех городов из FlyFromCity. По-идее вопрос с миграциями после этого решится (нет запросов при импорте модуля - нет проблем с миграциями)
    Ответ написан
  • Как организовать очередь к распределенной переменной?

    tumbler
    @tumbler
    бекенд-разработчик на python
    Выглядит как блокировка в редисе https://redis.io/topics/distlock плюс атомарный инкремент значения nonce после удачного завершения транзакции. Возможно, с использованием watch https://redis.io/commands/watch
    Ответ написан
    Комментировать
  • Авторизация в джанге по апи из другого сервиса?

    tumbler
    @tumbler Куратор тега Django
    бекенд-разработчик на python
    Если "сторонний сервис" - это какая-нибудь социальная сеть, то для нее должно быть много документации. Ключевое слово - OAuth.
    Если "сторонний сервис" под собственным контролем, то опять же Oauth (надо пилить на обоих сервисах) или другие способы. Ключевики: SSO - Single Sign-On, CAS - Central Authentication Service.
    Ответ написан
    Комментировать
  • Как сделать категории?

    tumbler
    @tumbler Куратор тега Django
    бекенд-разработчик на python
    1) у Post должен быть ForeignKey на category
    2) Тогда вместо posts в шаблоне можно будет использовать c.post_set.all
    3) Получится что для каждой категории идет цикл по всем постам, у которых значение ForeignKey соответствует данной категории
    Ответ написан
    1 комментарий
  • Как запустить RabbitMQ на удалённой машине?

    tumbler
    @tumbler
    бекенд-разработчик на python
    RabbitMQ заведует только передачей сообщений. И для отправителя (первый сервер), и для получателя (второй) нужна куча кода, чтобы выполнять что-нибудь полезное. Так что ответ да, нужну и там развернуть laravel.
    Ответ написан
  • Как инициировать «генерацию» других форматов видео в django-videokit?

    tumbler
    @tumbler Куратор тега Django
    бекенд-разработчик на python
    при запуске под *nix видео-файлы, «всосанные» через szVideoName, не имеют статуса на чтение и, соотвественно, не могут быть отданы клиенту веб-сервером

    Если веб-сервер запущен под пользователем web, то права -rw------- означают доступ на чтение и запись для этого самого пользователя, значит отдача веб-сервером возможно. Это легко проверить, попытавшись скачать этот файл curl-ом, например.
    У меня гипотеза, что как-то всетаки Celery файл подхватывает и что-то с ним делает (или пытается). Но вот что?

    Celery делает ровно то, что указано в теле соответствующих задач, описанных в проекте django-videokit. Если любопытно, надо искать в исходниках "батарейки".
    Но вот создается это процесс, и если создается, то работает ли он?

    Во-первых, стоит почитать логи celery, там наверняка будут какие-то ошибки запуска (например, отсутствие ffmpeg на машине :-) ). Во-вторых, ffmpeg на любую ошибку ругается кодом ответа, отличным от нуля. Если django-videokit этот код ответа не проверяет - это плохая "батарейка".

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

    Это очень обширный вопрос, для ответа на который нужно объяснить основы протокола AMQP, который реализует RabbitMQ, половину документации Celery "и тому подобное".
    Если кратко, то схема следующая:
    1. при вызове celery_task.delay() отправляется сообщение в RabbitMQ
    2. RabbitMQ маршрутизирует сообщение в нужную очередь, в соответствии с настройками celery
    3. celery берет задачу в обработку, выполняет код, являющийся телом задачи
    4. после выполнения задачи, результат (return) записывается в redis
    5. код, отправивший задачу, может подождать ее завершения, вызвав async_result.get, который внутри периодически опрашивает redis, не появился ли там результат обработки задачи.
    что предварительно надо установить RabbitMQ. Но в requirements.txt примера указан в числе прочего еще и redis==2.10.5.

    Традиционно, celery использует RabbitMQ для передачи задач и Redis для хранения результатов их выполнения.

    Мне не понятно как и кто тогда управляет очередями

    Очередями (их настройкой) заведует Celery, объявляя их при старте worker-ов.
    Ответ написан