• Нужна ли математика Python,Java программисту?

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

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

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

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

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Каких ботов? каких игр? Хотя бы пример какой привели бы... Для пасьянса вы хотите там бота или для чего?
    Игры предлагают SDK для этого, или предполагается реверс-инженерить протокол и ломать защиты?
    Надо сперва детализировать задачу, а потом искать под нее библиотеки и курсы.
    В общих чертах скорее всего вам придётся делать парсер, придётся разбираться с авторизацией и делать http-запросы, возможно использовать селениум. Придется строить модель игрового мира, описывать объектную модель предметной области, может быть понимать немного теорию игр и теорию конечных автоматов. Если вы адаете такие вопросы (не детализируя), то скорее всего узконаправленные курсы вам помочь пока не смогут. Надо расширять эрудицию в целом.
    Ответ написан
    Комментировать
  • Как переставляя столбцы и строки матрицы, переместить самый большой элемент в верхний левый угол?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Вы не уточнили, что понимается под словом "переставляя". Можно ли скажем, переставить первую и пятую строку местами? Или может быть можно, скажем, пятую строку поставить в начало...
    А может быть под "переставляя" имеется в виду перестановку рядом стоящих строк местами?
    В любом случае имеет смысл сперва найти самый ольшой элемент в матрице, а потом переставлять строки, чтобы он всплыл в угол.
    В чем конкретно у вас проблема? Если вы хотите готовый алгоритм, то этот ресурс не для этого. а на конкретные вопросы тут с удовольствием ответят и помогут.
    Ответ написан
    3 комментария
  • Как реализовать честную игру в Угадай число?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Ваше решение волне валидно. Разве что некоторым игрокам придётся объяснять что такое md5 и рассказывать про сложность нахождения коллизий.
    Опять же, ушлый игрок сможет предположить, что кто-нибудь ввалил огромные мощности на поиск коллизий, а потом ему подсовывает нужную соль под ответ. Тем более не обяательно чтобы конкретное исло было в result, а достстоноч, чтобы там было не одно из выбранных 5.
    Короче, для надёжности я бы вам посоветовал добавить помимо своей соли, еще и соль, выбранную игроком. Ведь какая разница от чего считать md5, если вы играете по-честному. А вот найти коллизии при наличии гарантированно рандомной (или просто не подготовленной соли), да еще и так быстро (в рамках игры) - это куда сложнее.
    Ответ написан
    Комментировать
  • Как отправлять много запросов get (python) чтобы не забанили на сайте?

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

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

    Но такой изощренный подход долог, дорог и не эффективен. Возможно против тех единиц, у котороых достанет денег и упорства так грабить ваш сайт и не стоит бороться. Игра не будет стоить свеч.

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

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

    Если защита на сайте сложнее, то и бороться с нею будет сложнее.

    Нет протого ответа на ваш вопрос, тем более такой наивно абстрактный.
    Ответ написан
    Комментировать
  • Почему не работает переменная которая прошла через функцию?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    И не должно. начните, действительно с учебника, а не сгугла, потому что это основы и самая база. Если вы это не прочитали в учебнике, то вам в питоне больше елать нечего. Просто займитесь чем-то другим. Нагуглить это вы не сможете.
    Это как спрашивать как на калькуляторе установить рингтон.
    Ответ написан
    Комментировать
  • Как отслеживать изменение даты файла с сайта?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Рекомендую сделать скрипт, который будет получать со странички нужные даты и сравнивать с теми, что сохранены в локальном файле, например текстовом, или json, или, даже, csv.
    Если дата соответствующего файла изменилась, скрипт качает новое расписание сохраняет новые даты в файл./
    Если не изменилась - делать ничего не надо.
    Этот скрипт можно запускать с любой нужной частотой, например, с помощью cron или любого другого системного планировщика.
    Ответ написан
    Комментировать
  • Django - Как оптимизировать группировку, чтобы было быстрее?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Попробуйте добавить индекс на пару полей (plu, sku). При выборке сортируйте по ним на упровне БД.
    Используйте itertools.groupby для группировки сперва по plu, а потом и по sku.
    Обходите группировки двумя циклами (один вложен в другой).
    Внутри внутреннего цикла уже можно использовать литерал генератора списка, чтобы получить список pack_type_id.
    Это позволит сразу собирать последовательно элементы словарей и не возвращаться к уже собранным.
    Если вашу структуру нужно поместить в какой-то внешний json-файл или отдавать в тело http-запроса в json-формате, то можно попробовать писать json с помощью какой-нибудь потоковой библиотеки вроде этой: https://pypi.org/project/jsonstreams/
    Это позволит не ждать по отдельности извлечение данных из БД, сборку структуры а пвмяти, а затем сериализацию ее в файл или в поток сокета. Всё будет делаться в рамках одного конвейера, что может оказаться более эффективным по времени.

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

    Расскажите подробнее куда вам нужна такая структура, какой у нее получается объём, куда вы её потом пихаете, как измеряете скорость, почему вам так критична эта скорость?
    Может быть проблема решается и иначе? К примеру, может оказаться, что вам не требуется синхронно возвращать всю структуру, или можно запрос и ответ развести в отдельные запросы, сделав интерфейс более отзывчивым.

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

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Щкольная физика нужна для ориентировочного понимания того, как устроен и работает наш мир.
    Когда вы будете разработчиком, то столкнётесь с очень разными задачами, в том числе далеко выходящими за рамки школьной физки. Но школа в целом и школьная физика в частности нужна в первую очередь не для получения конкретных знаний и заучивания конкретных формул, а для формирования УМЕНИЯ УЧИТЬСЯ, умения осваивать новые концепции, поступательно и планомерно разбираться в теоретических основах, ориентироваться в механике реального мира.

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

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

    Визика важна.
    Ответ написан
    3 комментария
  • Можно ли вывести заголовки столбцов при поиске командой GREP?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Вы могли бы использовать питон. С помощью pythonpy это удобно делать однострочником вроде:
    py "csv.DictReader(sys.stdin)" < x.csv
    Но есть два нюанса.
    - Вам нужно сохранить после фильтрации первую строчку (заголовок) csv-файла (например как вам в соседнем ответе предложили).
    - На выходе у вас будут словари, которые очень похожи на josn.

    Все эти нюансы можно легко обойти.
    Во-первых, пропадает смысл использовать grep, раз вы и так юзаете питон. Можно фильтровать прямо им примерно так:

    Во-вторых, после фильтрации можно вернуть первую строку обратно, как в соседнем ответе.

    Второй нюанс фиксится не так элегантно, но вполне понятно:
    py "(', '.join([f'{k}: {v}' for k, v in rec.items()]) for rec in csv.DictReader(sys.stdin))" < x.csv


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

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

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Прочитайте про концепцию "конечного автомата". В вашем автомате будет столько отдельных курсоров, сколько пользователей общается с ботом. Нужно для каждого пользователя хранить отдельный курсор в графе состояний. В зависимости от пользователя выбираем извлекаем нужный курсор и в зависимости от его положения интерпретируем сообщение.
    Цикл отдельный запускать сожиданием ответа для одного польователя - это не правильно.
    Ответ написан
    2 комментария
  • Есть ли нормальная программа для прослушивания аудиокниг?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Пользуюсь Podcast Addict под андроид.
    Удобно слушать подкасты и аудиокниги. Синхронизации между устройствами вроде нет, но и не нужно, ведь можно слушать только со смартфона. Если надо, по блютус к колонке его приконнектить можно, но я книги всегда слушаю через беспроводную гарнитуру. Не вижу ни одной причины делать это с разных устройств. Расскажите о ваших сценариях когда нужна синхронизация?
    В проге можно добавить каталог как подкаст с сортировокой по имени файла. И прога будет воспроизводить файлы по очереди.
    Можно подписываться по rss или через icloud на сетевые подкасты, можно слушать интернет радио и стримы. Поддеживает видео-подкасты.

    Иногда я у себя на VDS скачиваю торрент с книжкой, создаю rss-файл вот этой самописной питоновской утилитой и кидаю в каталог, раздаваемый через nginx. Ссылку на rss кидаю себе в телегу и открываю на смартфоне Podcast Addict'ом. Получаю, как бы, подкаст, но аудиокнигу, которую не обязательно полностью скаичвать еликом на телефон. Если на смартфоне мало места, то это очень удобно. Скачивать можно по мере прослушивания или вовсе слушать в потоковом режиме не скачивая.

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

    trapwalker
    @trapwalker
    Программист, энтузиаст
    <button class="btn btn-primary btn-buy" type="sumbit" name="id" value="1">Купить</button>

    Вот так получится.
    Ответ написан
    4 комментария
  • Как из txt файла вытащить строки с одинаковым началом?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Подсказка: отсортировать.
    Ответ написан
  • Как логичнее дописывать название файла из вывода?

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

    Почему конкатениря строку вы не пользуетесь форматными строками?
    Вместо нечитаемого:
    "#"+(b)+tail+str(scale)+".txt"
    будет элегантное:
    f"#{b}{tail}{scale}.txt"
    Ответ написан
    Комментировать
  • Когда в проектах оптимально использовать ORM, а когда чистый SQL?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Тут ответ простой. Если вы задаёте такой вопрос, причем именно вот в такой обобщенной формулировке, то вам следует использовать штатный ORM типовым образом.
    Поскольку в вопросе нет никакой конкретики по поводу проблем, которые автор вопроса собирается решать на чистом SQL, можно исходить из предпосылки, что таких проблем нет.
    Как только будут озвучены конкретные проблемы, можно будет говорить и как их решать. К примеру это могут быть вопросы оптимизации или вопросы представления очень специфических структур данных, плохо или нестандартно ложащихся на реляционную модель.
    Если опыта работы с Django ещё мало, то стоит руководствоваться best practices в рамках концепции фреймворка. В таком случае вы найдёте больше простых примеров и документации по любым вопросам.
    Как только вы столкнётесь с настолько специфическими задачами, что они будут плохо решаться стандартными методами, у вас будет уже гораздо больше опыта и этот вопрос отпадёт сам собой.

    ИМХО.
    Ответ написан
    Комментировать
  • Как правильно сделать запрос?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Куки и заголовки нуно указать как в браузере.
    Ответ написан
  • Как оптимизировать вставку данных в таблицу с 2млн строк?

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