• Как найти Vector2 позицию за объектом?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Так а в чем проблема-то? Это ж школьная программа?
    Точка А у вас есть, точка B тоже. Берёте вектор AB - это вектор B минус вектор A.
    Нормируете его до единичного. Для этого нужно вектор AB разделить на модуль (длину) этого вектора. AB/|AB| - это вектор направления на точку, над которой надо поставить камеру.
    Осталось этот единичный веткор умножить на необходимое вам расстояние. В вашем случае это 5: AB/|AB|*5
    Также моэно вычслить и положение камеры. Допустим камера в точке X и ее координат мы не знаем, но знаем высоту камеры, а значит и вектор CX = (0,0,4), если высоту камеры мы решили взять равной 4.
    Итого: X=B+AB/|AB|*5+CX
    где:
    X - искомый вектор координат камеры;
    B - вектор координат точки B;
    A - вектор координат точки A;
    AB = B-A -- вектор, равный разности векторов B и A;
    |AB| -- длина вектора AB, то есть его модуль;
    CX - вектор, указывающий на камеру относительно точки C, например (0,0,4);

    Можно сразу все вектора сделать трехмерными и делать все вычисления в них.

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

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Судя по постановке вопроса и вашей собственной оценке вашей же подготовки в прогрммировании: вам еще рано решать такие задачи. Просто нет необходимого уровня понимания, и это одной статьёй не решить. Разве что если б кто-то расписал в подробных деталях как сделать именно то, что вам нужно, но запрограммировать это проще, чем описывать в необходимых вам подробностях.
    А так получается у вас нет конкретного вопроса, на который можно было бы конкретно ответить.

    В это йситуации вам никак не уложиться в дедлайн, если вы настаиваете на смостоятельном написании этой функциональности.

    Вам стоит либо обратиться к фрилансеру, либо купить готовое решение из тех что уже есть на рынке, например, https://replain.cc/ru
    Ответ написан
    Комментировать
  • Как устранить ошибку: "can only concatenate str (not "int") to str: Django?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    У вас, очевидно, selected_choice.votes - это строка, а вы пытаетесь применть оператор += с елым числом. Об этом вам и выдаётся ошибка. Нельзя к строке прибавить число.

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

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

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

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Вилка может быть очень большая и она будет сильно зависеть от того, насколько точно вы понимаете чего именно хотите.
    Слаенная команда, которая уже писала такие вещи наверно может сделать такую игру за несколько месяцев по четкому детальному ТЗ. ТЗ делать может быть придётся даже дольше.
    В команду достаточно пары художников, дизайнер по интерфейсам (можно на оутсоросе взять на какое-то время, а не в штат), одного толкового синьора или пару растущих мидлов и джуна на бэке хватит. На фронте даже не знаю, не большой спец. Но думаю пару вротендеров хвтит, если браузерку делаете.
    Нужен ещё чел, который будет понимать про игровые механики, баланс и прочие такие премудрости. Это может быть кто-то из команды или вы (в чем я сомневаюсь, судя по постановке вопроса).
    Этоя описал самый минимум по команде, но сроки тут могут сильно-сильно плавать в зависимости от конкретного опыта разрабов.

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

    Самое мудрое - не писать снуля, а обратиться в студию, которая делает такого рода вещи на заказ. Ну а на сколько там договоритесь - это уже надо конкретно общаться.
    Ответ написан
    1 комментарий
  • Как сделать бот в Телеграм без приставки bot на конце?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Есть Telegram bot API - это для ботов. А есть Telegram client API - это для приложений, вполняющих функции клиентской стороны. То есть если вы задумаете написать свой клиент для телеграмма, то будете пользоваться этим API. Некоторые злоупотребляют правилами и делают ботов с использованием этого API, чтобы боты ритворялись реальными аккаунтами. За это, по идее, должны банить.
    Не надо делать таких ботов. Для чего вам?
    Ответ написан
    1 комментарий
  • Как предотвратить деформацию картинок в ролике?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Самый простой вариант - подготовить картинки заранее обрезав и качественно смасштабировав их под нужный формат кадра.
    Можно воспользоваться вот этой распространенной утилитой https://imagemagick.org
    Или любой аналогичной для командной строки.
    Фактически вам нужен ресайз под конкретный размер по вертикали. а затем кроп под конкретную ширину, однако так у вас может отрезаться часть значимого сюжета.
    Можно слишком широкие картинки (типа 16:9) снабдить предварительно сверху и снизу небольшими полями, чтобы по бокам отрезалось меньше.
    Получить рамеры картинки поможет утилита exiftool.
    Ещё цвет полей картинки можно выбрать близким к фону каринки на краях. Для этого можно сильно размыть картинку по гауссу и взять несколько проб цвета из верхней чсти изображения и из нижней. Усреднить и получится цвет полей, которые не будут сильно бросаться в глаза. Ещё можно размыть верх и низ картинки по маске и смешать с фоном.
    Для всего этого лучше, конечно, не на баше скрипт писать, а на питоне с использованием библиотеки PIL (pillow).
    Ответ написан
    Комментировать
  • Почему так популярны телеграм боты?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Ботов писать относительно просто, порог вхождения минимальный по сравнению с программированием под iOS и андроид, да и проще написания десктопных приложений с GUI, а в использовании боты проще, чем утилиты командной строки.
    Зато в результате может получиться довольно функцинальная штука. Легко настроить многоэтапную диалоговую коммуникацию с пользователем, получить для обработки изображения и фото, возвращать ссылки на скачивание результатов.

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

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

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Вот здесь есть подборочка геокодеров: https://gisgeography.com/geocoders/
    А так берите любой, который вам по бесплатным лимитам подходит, если подходит.
    Ответ написан
    1 комментарий
  • Как эффективнее работать с файлом, к которому нужен постоянный доступ?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Что вы подразумеваете под "безболезненно работать"? Правильно открытый на запись файл не мешает читать из него. Или что там у вас пользоватль собирается делать с файлом?
    Ответ написан
    3 комментария
  • Как удалить все строки до n через sed?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    А почему именно через sed?
    tail -n +10 << my_file
    Вернет все строки файла, начиная с десятой.
    Только нельзя писать в тот же файл, откуда читаете, иначе получите путой файл.
    Вот можно так:
    tail -n +10 my_file > temp_file; mv temp_file my_file
    Ответ написан
    6 комментариев
  • Что почитать для реализации автоответчика в виде бота реагирующего только на слова (триггеры)?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Почитайте Марк Лутц - "Реализуем автоответчик в виде бота, реагирующего только на слова-триггеры" - том 1, 5 издание, 2019 год.
    Нет, ну вы серьёзно сейчас?
    Учитесь программировать и ваши вопросы отпадут. Можно по книжке указанного выше автора, но название "Изучаем Python".
    Неужели вы думаете вам кто-то для нулевого уровня напишет подробное руководство по написанию "бота, реагирующего на слова"? Это тривиальная задача для тех, кто уже научился программировать.
    Ответ написан
    3 комментария
  • Как решить ошибку импорта, кроме как ипортировать локально?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Такие ошибки возникают когда код неправильно разбит на модули и модули ссылаются друг на друга циклически. К примеру модуль А что-то импортирует из Б, Б импортирует из В, а В из А.
    При импорте происходит выполнение кода импортируемого модуля, если это выполнение не было еще сделано ранее.
    Нужно
    1) не импортировать лишнее
    2) изолировать зависимости. Выносить в отдельные мдули те части, которые не зависят от других.

    Приводите конкретный пример и вам расскажут как правильно всё разбить, чтобы такой проблемы не было.
    Ответ написан
    1 комментарий
  • Почему возникает ошибка TypeError: function missing required argument 'vars_list' (pos 2)?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    У вас значений 7, а плейсхолдеров для подстановки 8. Не хватает одного параметра, о чем вам английским по терминалу по человечески пишется в сообщении об ошибке:
    TypeError: not all arguments converted during string formatting

    Что тут не понятно?
    Если делаете executemany то вторым аргументом должен быть итерируемый объект с векторами аргументов.
    Ответ написан
  • Как поменять тип данных на выходе из queryset модели?

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

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Выглядит так, будто бы вам для решения достаочно тривиального однострочника на питоне, запускаемого в виде кманды py. Опишите более внятно формат входных данных, как именются файлы и в каких структурах каталогов они размещены.
    Результат надо в один файл слить?
    Общая схема такая:
    - итерируемся по фходящим файлам с помощью glob или walk (если файлы в дереве каталогов, а не в одном каталоге).
    - преобразуем содержимое файла в словарь: обычно достаточно сплита текста по пробелам и абзацам, потом сплит по "=" и получаем аргумент для конструктора словаря.
    - печатаем в stdout f-строку с одстановкой данных из словаря, плученного выше.

    Это если я правильно понял ваше сумбурное описание задачи.

    UPD. Автор в изначальном вопросе не дал понять. что формат файла бинарный.
    Решение на системных утилитах командной стоки будет громоздким и неремонтопригодным в плане поддержки.
    Нужно на питоне делать. Если id гарантировано 12 цифр и такая последовательность встречется только в виде id, то можно парсить и регекспами.
    Но сдаётся мне не просто вам будет, если не умеете в питон.
    Ответ написан
    Комментировать
  • Бывают ли готовые гибридные электромагнитно-твердотельные реле, или это бред и никому не нужно?

    trapwalker
    @trapwalker Автор вопроса
    Программист, энтузиаст
    Интересно какая была схемотехника обвязки управляющих цепей этой самоделки.
    Да, тут уже ответили, что есть заводские решения: https://www.phoenixcontact.com/ru-pc/produkty/pusk...
    Ответ написан
    Комментировать
  • Какая нужна модель для описания каждой конкретной монеты на счету?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Вы смутили народ соей странной постановкой задачи.
    В реальном мире смысл монеты ка краз в ее неуникальности и взаимной заменяемости с другими такими же. А у вас это не монеты, а, своего рода, токены. И если формулировать так, то станет гораздо понятнее.

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

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

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

    Эти три изменения должны быть в рамках атомарной транзакции. Если что-то пошло не так, то все три действия должны отмениться.

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

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

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Не нужно пизать в БД лишнюю логику и лишние ограничения.
    У вас с БД работает какой-то софт, например бэкенд. Там и делайте валидаторы данных. В случае пола раньше можно было 1 и 0 удобно хранить и всё было абсолютно интуитивно и понятно, а русскую букву в качестве индекса держать неудобно и неправильно. Во-первых, она в UTF-8, наверняка, что уже как-то изврат для бинарного поля.
    Во-вторых, при локализации проблемы могут быть в логах надо юникодовую экранировку читать, если что... в общем либо международное F\M, либо кодами и 1\0 для мнемонического запоминания очень удобно. Вот угадайте что есть что и почему.=)

    Но по нынешним временам за такую бинарность могут и засудить=) Не иначе нужна целая таблица гендеров небинарных с названиями, описаниями и локализацией. Да ещё и меняться она будет со временем, а потом при импортах мапить надо одну таблицу полов на другую=).
    Шутки шутками, а 0\1 и тут хорошо лягут. Просто идентификаторы такие будут синтетические.

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

    Ответ: на надо валидировать значения такого рода полей на уровне БД. Делайте так, чтобы нельзя было ввести неверно на уровне ввода данных от пользователя, и дополнительно валидируйте в бэкенде.
    Ответ написан
    7 комментариев
  • Django изменение файла модели, перед записью в бд?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    А в чем проблема?
    В БД хранишь нужны результирующий путь. По факту аплоада делаешь таск на распаковку архива. Этот поцесс может оказаться не быстрым и закончиться ошибкой. Таск запускается, а его статус фронтенд запрашивает регулярно через АПИ, или слушает через перманентное подключение по веб-сокету - как уж реализуете. Важно, что распаковка это таск и у него есть статус и прогресс. По факту окончания загрузки помечаете в записи БД где путь, что путь актуален.
    Можно не записывать путь пока не закончится распаковка, тогда путь должен записать таск по факту своего успешного завершения.
    Ответ написан
    Комментировать
  • Как сделать, чтоб код обращаясь к postgre в постоянно режиме проверял бы наличие новых элементов в таблице и при их наличии передавал бы их в очередь?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Можно запускать этот скрипт по крону, как посоветовали выше, можно делать извлечение записей из БД в цикле.
    Если у вас целочисленный идентфикатор у записей, то запоминаете максимальный полученный идентификатор записи ив следующий раз селектите все записи, что больше этого идентификатора. Тогда не придётся важды извлекать из БД одни и те же записи, а если заисей нет, то выборка будет по индексу и произойдёт очень быстро с пустым или небольшим результатом.
    Если целочисленного идентификатора нет, то можно завести автоинкрементальное поле или таймштамп, по котоому будете фильтровать уже обработанные записи.
    В чем конкретно у вас проблема? Если вы написали выше риведенный код, но не догадались и не сделали попутку засунуть его в цикл, то, сомневаюсь, что это написали вы.
    Здесь вам не напишут готового кода, за ним нужно идти к фрилансерам. Задавайте конкретные вопросы и вам помогут.
    На общие вопросы - общие ответы, и то если не слишком рстранный вопрос. Никто лекцию тут читать по азам и основам не нанимался.
    Детализируйте ворос и как следует оформляйте код, пожалуйста.
    Ответ написан
    Комментировать