Задать вопрос
  • (вопрос от полного чайника) Как писать код, который будет работать с внешним сайтом?

    @rPman
    У тебя тут сразу несколько технологий и задач, достаточно сложных и сильно друг от друга отличающихся:
    1. сбор данных с сайта
    целая вселенная - это и реверсинженеринг сайта, и борьба против автоматизированных сборщиков (в зависимости от того как заморочился с этим владелец сайта)
    Настоятельно рекомендую сразу работать с сайтом из браузера, техник много, от простого открытия сайта в обычном браузере с инжектом твоего javascript (например расширение tempermonkey), который будет ходить по сайту, до запуска безголового браузера и управление им из своей программы с помощью selenium, а там кликать кнопки и собирать данные, отправляя их тебе на сервер или сохраняя в локальной базе браузера - localStorage/indexeddb/...
    2. обработка данных
    тесно связана со сбором, данные нужно не просто собрать но и привести к машиночитаемому виду (бывают ситуации когда данные создаются людьми без определенного формата, в этом случае совсем туго), так же это тесно перекликается с технологиями борьбы владельцев сайтов с автоматическими собирателями данных
    Совет, вместе с текстовыми данными собирай информацию о расположении, гораздо проще догадываться о назначении данных, если знаешь их относительную позицию.
    3. анализ данных и поиск закономерностей плюс визуализация
    это не только нейронные сети, алгоритмов тьма, разбираться хотя бы на уровне что это и в каких ситуациях применять, придется... и самое главное результата может и не получиться но узнаешь ты только потом
    работа творческая, и готовых решений скорее всего нет (хотя спасибо, за последние лет 10 собран такой пласт библиотек для работы, один tenserflow и torch чего стоит. Загляни на weka, это огромный сет библиотек и алгоритмов (java) как источник информации об этих алгоритмах
    Ответ написан
    1 комментарий
  • Что эффективней, чтение из файла или массив?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Вопрос не глупый а вполне себе хороший.

    Его плавное развитие приводит к концепции баз данных. Самое главное что можно сказать тезисно это
    1) Пока памяти хватает (массив) - используй смело память
    2) Диск - больше и дешевле памяти
    3) С памятью работать легко. С диском - очень неудобно и надо обрабатывать IOExceptions почти всегда.
    Диски внезапно полны сюрпризов. Могут быть сетевыми дисками.
    4) Разные диски имеют скорость на порядки разную.
    5) Диски ведут себя очень плохо на random access. От этого даже метрика IOPS появилась.
    Ее очень любят обсуждать админы баз данных.
    6) Существуют структуры данных которые спецом создавались только для дисков (B+Tree)
    7) Диск - переживает выключение питания.
    8) Самые разумные решения - сочетают в себе и диск и память в тех частях кода где это нужно.
    9) Есть интерфейсы программирования которые виртуализирут диск как память. Этим пользуется
    SQLite например.
    10) Диск может достигать очень высокой последовательной скорости чтения или записи в файл
    при условии отсутствия конкурирующих записей в данный момент. Этим пользуются в БД
    для журналирования событий.

    В принципе если современный программист просто будет использовать только оперативную память
    то никто ему не сможет ударить по рукам или подойти с какой-то метрикой и чего-то там измерив
    сказать что он неправ. Тут уж только падения по OOM и потери информации и performance issues
    могут быть каким-то значимым аргументом.
    Ответ написан
    3 комментария
  • Как отображать mp4 видео без ос?

    @rPman
    На текущий момент без операционной системы красиво (в смысле более менее есть поддержка железа) не получится, максимум простоты - пищать pc-speaker, на основе которого с ужасным качеством можно симулировать звуки (баловались еще этим во времена dos и помню был драйвер даже для win95/winnt4).

    Если проблема может быть решена дешевым аппаратным решением, напримерпри наличии LPT на материнке (их часто размещают на плате но не выводят на заднюю стенку) то можно из LPT и 16 резисторов сделать простейшую звуковую карту covox, ну а настроить частоту и выдавать нужный поток в lpt уже не сложно (само собой декодировать аудиоформаты самому, но код в опенсорсе есть по до все, наверное даже под чайники)

    EFI не имеет стека звуковых карт в стандарте, т.е. пилить все самому, можно доползти до звуковой карты, запилив поддержку конкретно твоего чипа (код брать из linux ядра само собой)

    Если я верно понял, какие то очень трудолюбивые ребята ковыряют мак и пилят открытый загрузчик, где в т.ч. есть поддержка звука. Так вот гуглится старый проект (который переехал в этот opencorepkg) который в отдельности умеет работать с intel hd, т.е. взяв его за основу, если твое железо совместимо, и делай.
    ----------------------------------------------
    Ну и правильный подход - нет нужды заниматься такими извращениями, когда есть linux, а точнее ядро а не сама ОС на его основе. К примеру файлы initramfs, которые лежат в /boot каталоге загрузчика, это полноценная операционная система, загружаемая ядром сразу после запуска, так вот там можно уже работать со звуком, причем чуть ли не штатно вкомпилировать туда необходимые компоненты, консольный плеер и что угодно, получив рабочее решение за считанные мегабайты.
    Ответ написан
    Комментировать
  • Python как быстро получить число элементов архива tar.gz?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Не получится из-за специфики устройства tar-файла. Пока весь не прочитаешь, не узнаешь сколько в нём каталогов. Это потоковый формат, а тут он ещё и сжат сверху gzip'ом.

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

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

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Все достаточно просто. На изображении выделяете "области интереса", пусть это будут прямоугольники с координатами x0:y0 - x1:y1. Пробегаете по всем прямоугольникам и считаете "плотность" прямоугольника, если плотность отличается, то в этом прямоугольнике что-то находится - включаете нужный моторчик.
    Плотность посчитать очень просто - среднее по всем точкам прямоугольника.
    Более подробно, рекомендую книжку Гонсалеса (как бы азбука цифровой обработки)- https://www.ozon.ru/product/tsifrovaya-obrabotka-i...

    Ах, ну, да... Что-то я сомневаюсь, что в интеренете не нашлось, как кропнуть область из изображения! Вот например с использованием opencv (прям вот для python и C++, как заказывали) - https://learnopencv.com/cropping-an-image-using-opencv/
    Ответ написан
    2 комментария
  • Как сделать проверку символов с возвратом на строку кода?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Есть много вариантов, как сделать проверку.

    Например, сделать функцию проверки, скажем check_answer, которая принимает строку ответа и возвращает логическое значение (если всё хорошо, то True, иначе False).
    Затем сделать конструкцию
    while not check_answer(otvet):
        otvet = input()

    и пока check_answer не вернёт True, этот цикл будет повторяться.

    Однако, в вашем коде есть еще много существенных недостатков, которые сильно затруднят вам жизнь.
    • Во-первых, это нумерованные переменные. Вместо них удобно использовать кортеж, список или словарь. Такие структуры можно перебирать в цикле (итерировать) и каждый следующий элемент обрабатывать одним и тем же набором функций.
    • Кроме того, код хорошо бы разделить на функции, например так: если код делает «то, это и вот это», то у вас должны появиться функции «делай то», «делай это», «делай вот это» и еще функция «выполнить программу», изнутри которой находятся вызовы остальных функций и внутри которой каждая функция получает и возвращает в следующие функции обрабатываемые данные и результаты обработки.

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

    С другой стороны,
    python позволяет всё плотненько скомкать чуть не до пары длиннющих нечитаемых строк, но так делать вам пока не надо.
    Ответ написан
    3 комментария
  • Как импортировать переменные с функциями?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Вы должны делать всё наоборот:
    Вам надо работать только в модуле main, и в него импортировать в т.ч. функции из других модулей. Тогда импортированным функциям при их вызове из кода main станут доступны необходимые переменные.
    Лучше всего делать функции так, чтобы они явно получали в параметрах все необходимые им переменные и явно возвращали все результаты через return. Тогда будет меньше риска, что где-то что-то будет происходить «само собой».
    Ответ написан
    Комментировать
  • Можете пожалуйста помочь с ошибкой в программе в Python?

    @ceytnot
    Работаю не по специальности (:
    Мало данных. Непонятно какой вы пользуетесь библиотекой и пользуетесь ли вообще. Фрагмент кода, видимо, является частью класса. Обе ошибки по сути указывают на то, что у вас нет атрибута sound в классе MP3player, о чем собственно в описании ошибок так и написано. Разберитесь с этой строчкой: pos = self.sound.get_pos() и с атрибутом sound. Действительно ли он там должен быть и правильно ли вы его записали.
    Ответ написан
    Комментировать
  • Как передать переменную из html в sql запрос python?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Вам надо на время оставить программирование и изучить две гораздо более важные вещи:
    Во-первых, надо научиться структурно мыслить. В частности, разобраться, что ваш вопрос состоит из двух совершенно разных, никак не связанных между собой частей:
    1. как в Flask получить данные формы
    2. как передать переменные в sql запрос

    А во-вторых, научиться пользоваться интернетом. Потому что ответов на оба эти вопроса, в том числе и на данном сайте, просто миллионы.
    На первый (ссылка из ответа на qna.hab.com): https://flask.palletsprojects.com/en/1.1.x/quickst...
    На второй: https://qna.habr.com/q/1002781
    Ответ написан
    Комментировать
  • Как начертить правильный n-угольник с центром в точке (x, y) на поверхности шара?

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    Удобно ввести новую систему координат и потом откладывать ее базисные векторы нужное количество раз.
    Эта система будет иметь центр на радиусе сферы к центру оружности и лежать на "хорде" - плоскости в которой лежит многоугольник. В ней ваш многоугольник будет просто на плоскости.

    Из простейшей геметрии вы знаете, что этот центр координат будет на расстоянии sqrt(R^2-r^2) от центра сферы - так радиус окружности на сфере будет r.

    Первый базисный вектор будет вдоль радиуса из центра сферы к центру многоугольника и координата там будет всегда 0.
    Теперь вам надо найти еще какой-то вектор в плоскости многоугольника, а третий вектор потом найдете через векторное произведение. Хорошо бы этот второй вектор взять на север, тогда ясно куда класть первую точку по условию. Если только центр окружности не лежит строго на свере, то можно взять и спроецировать на плоскость вертикальный вектор (0, 0, 1) и все (а в противном случае проецируйте, допустим (1, 0, 0). А дальше останется только взять формулы для многоугольника на плоскости x = cos(2*pi/n*k)*r y = sin(2*pi/n*k)*r, ну и не забыть перевести все в обычную систему координат.

    Итак, пусть xo,yo,zo - точка на сфере, где лежит центр. xo и yo не нули одновременно. Еще даны R, r и n.

    Центр новых координат:
    L = sqrt(R^2 - r^2)
    x1 = xo/R*L
    y1 = yo/R*L
    z1 = zo/R*L

    Первый базисный вектор:
    e1 = (x0, y0, z0) / R
    Второй базисный вектор (нормализованный (0,0,1) - (0,0,1)*e1):
    e2 = (-x0*z0/R/sqrt(R^2- z0^2), -y0*z0/R/sqrt(R^2- z0^2), sqrt(R^2-z0^2)/R)

    третий базисный ветор, найдите сами через векторное произведение.

    А дальше координаты k-ой точки:
    p = (x1,y1,z1) +e2*cos(2*pi/n*k)*r+e3*sin(2*pi/n*k)
    Ответ написан
    Комментировать
  • Так какой же приоритет операторов == и in?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Оно равносильно записи print(5 < 4 > 3)
    или
    print(True == 0 and 0 in [0])
    Ответ написан
    4 комментария
  • Как исправить ошибку в этом коде?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Вы не смогли перевести текст ошибки?
    64250a173e58f641881098.png
    Ответ написан
    Комментировать
  • Как сделать при вводе нескольких слов через запятую, чтобы каждое слово сохранялось в переменную (количество слов не определенно)?

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

    fenrir1121
    @fenrir1121
    Начни с документации
    Смотря о каком определении интерфейса речь. Если речь о формальных интерфейсах, для питона явный способ это сделать это использовать абстрактый базовый класс ABC.
    Применительно к вашему случае я бы предложил посмотреть на построители классов данных, например NamedTuple и dataclass
    Ответ написан
    2 комментария
  • Как шифровать текст в python?

    AgentSmith
    @AgentSmith
    Это мой правильный ответ на твой вопрос
    способ расшифровки должен быть непопулярным.

    А вот это уже смешно. Чем тебя не устраивают популярные способы типа RSA?
    Ты, видимо, не слышал о термине Security through obscurity , на котором обожглись многие и ты хочешь повторить их путь
    Ответ написан
    10 комментариев
  • Как сделать SQL запрос из двух таблиц?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Пока на ум приходит получить все категории, потом в цикле пройтись по ним и...

    Естественно это не делается так. Такие задачи решаются на стороне бд через джоин таблиц. Не считая ошибки синтаксиса и отсутствия лимита, запрос в ответе Vindicar подойдет. Схема хранения не самая лучшая, так как по сути у вас получается один-ко-многим (одна категория ко многим постам), и если категорий на 1 пост будет больше 1, вся структура идет в мусор. Более качественным решением все же будет многие-ко-многим между постами и категориями.
    Ответ написан
    1 комментарий
  • Как сделать SQL запрос из двух таблиц?

    Если данных в каждой категории немного - то оверхед от дублирования в каждой строке результата небольшой, и ответ Vindicar прекрасен.
    Если оверхед большой, то:
    1. получаете первым запросом категории,
    2. сохраняете в какую-то структуру, где ключом служит id категории,
    3. выбираете посты одним запросом, с фильтром по id нужных категорий,
    4. в процессе разбора результатов этого запроса, распихиваете посты сразу по нужным категориям.
    Ответ написан
    1 комментарий
  • Как написать свой компилятор?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Трансляторы
    Седой и строгий
    Содержимое этой книги в ответ не вместится.
    60b76e70c748b529799442.jpeg
    А ваш вопрос на столько общий, что короче не получится.
    Ответ написан
    3 комментария
  • Как подсчитывать на видео проходящих людей по головам?

    @rPman
    Боюсь ты не найдешь готовых решений
    Мало того, тут нужно искать размеченный датасет голов людей и радоваться этому богатству

    Решение для тебя - берешь несколько сотен тысяч видео (разные времена года), нанимаешь десяток человек в помощники и садишься размечать, затем берешь готовые решения по нейронкам, арендуешь на недельку себе кластер с gpu или на месяц другой игровую видеокарту и вперед с примерами от pytorch пилишь результат.

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

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

    AlexNest
    @AlexNest Куратор тега Python
    Работаю с Python/Django
    context = {}
    
    last_command_use_time = context.get(user[0].id) # Возвращает время последней команды пользователя или None, если нет значения
    
    if not last_command_use_time or (datetime.datetime.now() - last_command_use_time).seconds > 10: # проверяет, что last_command_use_time  - None (т.е. данных о юзере нет) или с момента обращения прошло больше 10 секунд
    
        # команда
    
        context[user[0].id] = datetime.datetime.now() # Записывает текущее время использования команды
    
    else:
        # сообщение о том что нужно подождать

    И как можно получить время которое осталось до следующей возможности выполнения команды?

    Намекну - в строке с if есть почти готовый кусок, который нужно чуть изменить.
    И да, судя по тому, что вы не можете прочесть элементарный код - отложите болошлепство и почитайте учебник.
    Ответ написан
    Комментировать