• Как из двух массивов сделать один?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Что-то все какие-то сложно перевариваемые решения постят.
    Вот же понятно все и читабельно:
    full = {company['id']: company for company in first_list}
    for extra in second_list:
        item = full.setdefault(extra['company'], {})
        item.update(extra)
        item.pop('id', None)
        item.pop('alias', None)
    
    result = list(full.values())
    Ответ написан
    Комментировать
  • Как получить определённый кусок карты по координатам и в масштабе?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Уверен, что яндекс не в восторге от попыток скачать их тайлы для каких-то нелицензионных нужд, но вы можете сделать это притворившись браузером и соблюдая квоты, чтобы не вызвать подозрение у сервиса. Реальные квоты вам никто, конечно, не объявит и вам придётся пользоваться прокси и определять квоты эмпирически.
    Однако особой причины брать данные именно у яндекс-карт нет. OSM достаточно хорош и вам уже дали ссылку, где можно почитать про https://overpass-turbo.eu/ - инструмент для фильтрации загрузки геоданных OSM. Снапшот базы OSM можно скачать и полностью.
    База OSM - это векторные данные и метаданные гео-объектов. Существует несколько открытых бесплатных решений для рендера этих данных в тайлы. Настроить это рендер уже нетривиальная задача, поскольку нужно знать какие данные и каким стилем отображать, чтобы карта получилась информативной и эстетичной. Всегда можно найти готовые примеры стилей для рендера, а докер позволяет не ставить огромное количество зависимостей руками, но получить сервис рендера тайлов относительно легко.

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

    Есть такой сервис: https://nakarte.me/
    Весьма удобный интерфейс, чтобы быстро собрать карту в масштабе из готовой подложки и нескольких треков.
    Думаю им можно пользоваться и программно формируя по документации урлы для запросов.
    Ответ написан
    Комментировать
  • Почему меняется заряд в разных источниках питания?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    сила напряжения через тестер 1.8А

    Ух как всё понамешано.

    • U - напряжение, измеряют в вольтах.
    • I - ток (сила тока) в амперах.
    • P - мощность - это количество энергии, передаваемое/принимаемое/расходуемое за единицу времени: равняется произведению напряжения на ток: P = U*I. Измеряется в Ваттах.
    • W - количество энергии (или по-другому - работа) измеряется в Киловатт*час (если речьо вашем домашнем счетчике), или Ваттах умноженных на секунды (Вт*с) - это и есть Джоули (Дж).


    Теперь что у вас. Ток может быть большой, но напряжение могло просесть при подключении резистивной нагрузки к павербанку. Возможно плохой кабель ещё добавил падения напряжения и снизил его на входе в телефон.
    Тупая резистивная нагрузка - ей вся равно, она просто греется. Павербанк пытается удерживать ток в два ампера, но мощности не хватает и напряжение проседает ниже 5 вольт. Резистивной нагрузке пофигу, а телефону не всё равно. Ему малое напряжение не подойдёт, поскольку малым напряжением не зарядить аккумулятор без повышения.
    Ограничена мощность, а куда эта мощность будет преобразована (в больший ток или в большее напряжение) - это уже смотря как устроен источник питания.
    Обратите внимания что вам показывает тестер по напряжению, когда вы два ампера берте от повербанка резистивной нагрузкой. Может быть для телефона этого мало и он снижает ток (повышает, грубо говоря, своё сопротивление), чтобы
    павербанку хватило мощности обеспечить нужное напряжение.
    Ответ написан
    Комментировать
  • Как организовать домашний файловый сервер из ноутбука на Linux?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    1. Завести уже, наконец, современный роутер, в сети.
    2. Подключить большой ноут к роутеру кабелем (гигабит, если поддерживается роутером и ноутом).
    3. Поставить на большом ноуте убунту или что там привычнее, можно серверную, но не принципиально. Всё же дисплей у него цел ведь, зачем лишать себя лишнего запасного десктопа? Иожно к телеку по HDMI подключить, получится крутой медиаплеер.
    4. Притащите от роутера еще один кабель, на случай если надо перекинуть что-то большое, а вайфай нужную скорость недает.
    5. На большом ноуте в отдельных контейнерах поднимайте samba, dlna, торрентокачалку с веб-интерфейсом, ssh ключи пропишите, чтобы заходить при случае.

    Ответ написан
    3 комментария
  • Как правильно получить прямую ссылку на видео YouTube?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Как вам ответили в каментах простым образом скачать видео файлом с ютуба у вас не получится. Ютубу это просто не выгодно и он всячески этому препятствует.
    Тут идёт гонка вооружений: гугл придумывает средства противодействия, а энтузиасты обходные пути.

    По постановке вопроса было не понятно что вам действительно надо и что за прямую ссылку на видео вам требовалось получить.
    Если речь идёт о скачивании видео с ютуба, то есть замечательная питоновская утилита youtube-dl.
    Её удобно использовать с помощью докера: https://hub.docker.com/r/wernight/youtube-dl
    При этом отпадают проблемы с обновлением и зависимостями.
    Я использую её, чтобы выкачивать интересное с ютуба для "посмотреть позже" пока не удалили.
    На дешевой VDS крутится бот, который слушает от меня ютубовские урлы, а отвечает ссылками на скачивание файла, когда закачает его сам. Удобненько. Ботом не поделюсь пока.
    Ответ написан
    4 комментария
  • Можно ли создать домен для локального сайта?

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

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

    Если вам нужно ходить по домену только с компа, то как выше предложили, можно прописать домен и ip в файле hosts
    Ответ написан
  • Для чего тут используется super, если класс наследуется только от object?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Ну строго говоря особой нужды нет. Такое делают, например, если в будущем собираются сменить базовый класс.
    Но если у вас __init__ вообще пустой и кроме супера ничего нет, то совсем бесполезно.
    В третьем питончике, кстати, уже вот так можно:
    class Container():
        def __init__(self):
            super().__init__()
    Ответ написан
    4 комментария
  • Как выбрать записи у которых 2 и более связанных записей в другой таблице?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Че-то мне страшно теперь в поликлинику идти.
    Вы бы хоть названия таблиц какие-то предложили для ясности, чтоб не сочинять А и Б.
    SELECT rr.* 
    FROM (
      SELECT MIN(r.id) AS id
      FROM recept r
      JOIN history h ON r.id_history = h.id
      GROUP BY r.id_history
      HAVING COUNT(r.id) >= 2
    ) ids
    JOIN recept rr ON rr.id = ids.id
    Ответ написан
  • Как сформировать корректный SQL-запрос?

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

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Импортируйте и запускайте код в блоке try-except.
    Ответ написан
  • Http сервер на vps?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Если чисто для бота, то nginx не нужен.
    Но аппетит приходит во время еды и в какой-то момент вы хотите отдать с сервера статику,
    или завернуть трафик бота в https...

    В чистом виде для http без статики вам не нужен nginx.
    Ваш бот - это приложение или демон. Запускать можно через crontab с директивой @reboot. Или просто почитайте как принято демонизировать go-приложение.
    Ответ написан
    7 комментариев
  • Поясните что значит в sorted(values, key=lambda x: (abs(x-one), x)) последнее значение x(после запятой)?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Ваша функция возвращает не один элемент, а все, отсортированные в порядке удаления от заданного.

    key=lambda x: (abs(x-one), x)
    это функция, по значениям которой сортируются элементы массива.
    Значение этой функции - кортеж из двух элементов: первый - это модуль разности, а второй это текущий элемент списка.
    Кортежи можно сравнивать на > и <. При этом они сравниваются поэлементно слева направо.
    Смысл добавления x в том, что расстояние от -1 до 0 и до -2 одинаковое и сортировка не различала эти два элемента между собой. Когда вы стали сортировать по ключевому кортежу, то при равенстве расстояния порядок определяется значением самого элемента. Выбирается сперва тот, что меньше (в вашем случае -2).
    Ответ написан
    6 комментариев
  • Виснет ПК 1-3 раза в день. Что проверить?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Убунта так виснет, когда выжирает всю память и заполняет весь своп.
    Правда через какое-то время (минуты) отвисает ненадолго, но если не успеть почистить кеш, то зависнет снова и уже с концами или просто на более долгий срок. Речь о 18.04. Посматривайте htop на предмет памяти.
    Ответ написан
    5 комментариев
  • На чем лучше написать десктопное приложение под устройство на Arduino?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    С вашим стеком технологий и наработками я бы посоветовал Электрон

    Кстати, теги у вас получается не адекватны вопросу. На любом практически используемом языке можно работать с com-портом, а значит arduino уже не релевантный тег для сути вопроса.
    Следовало бы спросить с тегом js во что проще обернуть приложение на ноде, чтобы получить нативный GUI под винду.
    Ответ написан
    7 комментариев
  • Какой математический метод или алгоритм выбрать для формирования числа из диапазона?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    То, что вы ищете называется хеш-функцией.

    Возьмите первые (или любые) два байта из результата любой хеш-функции от этих данных.
    Надеюсь вы понимаете, что мощность множества ваших адресных пар гораздо больше, чем 2**16. Это значит, что неизбежны коллизии.
    Вот как получить это число можно однострочником на баше с помощью питона:
    py '(lambda a, b: 256 * a + b)(*hashlib.md5(b"any bytes for hashing").digest()[:2])'

    Или вот так в командной строке можно захешировать любой текст в два байта:
    echo 'any text' | py '(lambda a, b: 256 * a + b)(*hashlib.md5(sys.stdin.read().encode("utf-8")).digest()[:2])'
    Ответ написан
    1 комментарий
  • Какой бесплатный хостинг использовать для закачки файлов? И как это сделать?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    он должен скачивать файл с хостинга

    Где мне взять прямую ссылку

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

    Хостинг - это другое. Они берут деньги за возможность опубликовать что-то в сети. Там можно получить и постоянные ссылки, и белые IP, и хорошую скорость, и приемлемые лимиты по трафику.

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

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

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

    Задавайте вопросы правильно, конкретизируйте и описывайте что вам действительно надо, а не то, как вы думаете устроен этот мир.
    Ответ написан
    Комментировать
  • Как правильно передать .wav клиенту используя socket?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Звук в этом формате - бинарные данные. Нельзя с ними работать как с текстом.
    Вы же открываете файл в текстовом режиме. Не надо так. Открывайте в бинарном, не декодируйте. Отправляйте как байты. Принимайте тоже как байты.
    К примеру символы абзацев могут быть проинтерпретированы неправильно и заменены, от этого съедут куски данных, сломается выравнивание.
    Я не понял. вы на сокетах имитируете часть http-проткокола. Зачем? Отправляйте либо с сокета на сокет в чистом виде, либо поднимите тривиальный сервер на flask и овспользуйтесь requests, чтобы не изобретать дендро-фекальный велосипед.
    Ответ написан
    Комментировать
  • Как создать сайт, чтобы в нем можно было программировать на python?

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

    1. Гуглите "python sandbox".
    2. Конкретизируйте задачу. Какой код вы хотитезапускать, хотите ли подключать сторонние библиотеки, а бинарные библиотеки?
    Ответ написан
    3 комментария
  • Как решить проблему с условием вывода и регулярными выражениями в Python?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    1)
    Попытки убрать блок else, либо заменить "Нет вхождения" на pass или None - выдают ошибку.

    a if q else b - это тернарный оператор. У него три аргумента (a, b, q) и результатом будет a или b в зависимости от истинности q.
    pass там по синтаксису не подойдёт, поскольку это не значение, а ключевое слово.
    Вам нужно вычислить выражение и результатом должно быть что-то что можно передать в print(). Если по else вы укажете пустую строку "", то print её напечатает. Не знаю устроит ли вас пустой абзац в консоли. Если нет, то смотрите решение, предложенное выше.

    2) в предыдущем решении вы могли не заметить, но регекспы соединены через "|". Это сработает не для всех регекспов. Нужно быть осторожнее с такой конкатенацией. Вообще с регекспами надо поосторожнее. В большой силе большая ответственность.
    Можно сделать цикл и поискать каждый регексп по отдельности. Так вам проще сохранить контроль над тем, что именно вы нашли и как на это реагировать.
    Ответ написан
    1 комментарий