Задать вопрос
  • АПИ карт, как получить координаты и размер объекта?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Можно и через API и кучей способов такое сделать.
    К примеру, можно сделать запрос через API overpass-turbo.eu к данным OSM и вытащить определенного типа объекты в определенном радиусе. Размеры объектов потом вычислять на основе их координат, например с помощью библиотеки GDAL.
    Можно импортнуть данные OSM ваших окрестностей в postgres, например, с помощью osm2pgsql.
    Расширение postgis позволяет практически любые вычисления делать с гео-объектами. К примеру можно взять охватывающий прямоугольник и сконвертировать его проекцию в метры. Разница координат углов будет размером описанного прямоугольника.

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

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Ну и каша же у вас в... понимании. Вы сами поняли что написали-то?
    У вас наследование противоречит нарисованной диаграмме.
    class A()
    class B(A)
    class C(A)

    Что вы подразумеваете под передачей объекта в метод?
    Если методы не классовые, то вызывают их у объектов, а не у классов.
    Если вы пытаетесь вызвать метод класса С из объекта типа B, то у вас не получится, поскольку и B и С непосредственные потомки A.

    Опишите ваши классы кодом как есть, иначе по этому бессвязному изложению ничего не ясно.
    Ответ написан
    Комментировать
  • Установил python kivy. Почему не работает первая программа?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    pip install pillow
    Вот у вас красным по белому написано:
    5ecca2c591b8f005785541.png
    что нет модуля PIL в наличии. Скачайте дистрибутив в виде инсталлятора или вон как я выше показал поставьте его. Хотя у вас винда... ничего не гарантирую.
    Читайте внимсательно сообщения об ошибках. Обычно там всё есть. А на этом ресурсе принято прводить полный текст сообщения об ошибке в виде текста, а не в виде скриншота.
    Ответ написан
    Комментировать
  • Как исправить проблему с кодировкой (UnicodeEncodeError: 'latin-1' codec can't encode characters..) в тг боте?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    qr = pyqrcode.create(x.encode('utf-8'))
    И приводите в следующий раз, пожалуйста, полный текст ошибки. Там еже всё указано где проблема. Какого черта вы заставляете гадать на кофейной гуще?
    Думаете интерпретатор вам этот весь "мусор" просто так написал?
    Так и задали бы вопрос: написал программу - не работает, памагити!
    Ответ написан
    Комментировать
  • Как получить все комбинации элементов строки в срезе?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    У вас произведение строки трижды на себя. Строка длиной 3. Итого 3**3 == 27 вариантов.
    Каждому элементу можно поставить в соответствие порядковый номер.
    for i in range(27): 
        print(f'{i:2}:', i // 9 % 3, i // 3 % 3, i % 3)

    Числа после двоеточий - это индексы в исходной строке.
    Вы можете теперь получить (вычислить) любой i-ый элемент вашей последовательности:
    s = 'abc'
    def g(i):
        return s[i // 9 % 3], s[i // 3 % 3], s[i % 3]
    
    for i in range(len(s) ** 3):
        print(g(i))

    Можно обобщить:
    def g(s, i):
        n = len(s)
        return [
            s[i // n**(n-j-1) % n]
            for j in range(n)
        ]
    
    my_custom_string = 'abc'
    for i in range(len(my_custom_string) ** len(my_custom_string)):
        print(g(my_custom_string, i))


    Ну и раз уж пошла такая пьянка, можно сделать ваше умножение индексируемым:
    import itertools
    import functools
    import operator
    
    
    class Producti: 
         def __init__(self, *iters, repeat=1): 
             iters = [list(it) for it in iters]
             self.iters = iters * repeat
             self._len = functools.reduce(operator.mul, map(len, self.iters)) 
    
         def __len__(self): 
             return self._len 
    
         #def __iter__(self): 
         #    return (self[i] for i in range(len(self))) 
    
         def __getitem__(self, idx): 
             if isinstance(idx, slice): 
                 return (self[i] for i in range(len(self))[idx])
             if idx >= len(self):
                 raise IndexError(f'product index out of range')
             r = [] 
             d = 1 
             for it in self.iters: 
                 r.append(it[idx // d % len(it)]) 
                 d *= len(it) 
             return tuple(r[::-1]) 
    
    
    for x in Producti('abc', repeat=3)[3:7]: 
         print(x)

    Единственное, чем нам приходится жертвовать по сравнению со штатным product'ом - это распаковкой элементных итераторов. Нам это нужно, чтобы заранее знать как приводить число к индексам.
    P.S.
    Кстати, метод "__iter__", в принципе, не нужен, iter(Producti('aa', '12')) проитерируется теперь и так (когда есть исключение по выходу за пределы len).
    Ответ написан
    Комментировать
  • Автономные пасечные весы какие компоненты лучше выбрать?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    О, прикольная задачка. Там вам посоветовали уже годную статью.
    В качестве датчика веса можно взять китайские тензо-датчики, которые на том де алиэкспрессе в ассортименте.
    В качестве контроллера я бы взял ESP-8266. Бывают уже с готовым радио-модулем, а можно сделать на основе вайфай, тогда в качестве концентратора можно использовать обычный дешевый роутер вроде MR3020 со вставленным GSM-свистком.
    Вопрос насколько кустарно вы хотите решить задачу.
    Если планируется какое-то производство, то можно посмотреть на энергоэффективные техас-инструментовские контроллеры. Если быстренько для себя и родных, а также для опенсорса сделать повторяемое решение из легко доступных компонентов, то ESP8266 и роутер с кастомной прошивкой.

    Современные контроллеры достаточно энергоэффективны, чтобы контроллировать параметры хоть раз в 5 минут. Отсылать накопленные пакеты можно и раз в час.

    Кстати, вы можете кроме перечисленных (веса и температуры) добавить датчики:
    • температуры (внутри/снаружи)
    • влажности (внутри/снаружи)
    • уровня шума (внутри/снаружи)
    • веса
    • открытия крышки
    • освещённости внутри улья (для дополнительного фактора контроля разрушения улья)

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

    Можно добавить охранные функции: по пороговому значению внешнего шума включать запись и отсылать пакетами. При экстремальном превышении температуры трубить тревогу.

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

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

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

    Сжатую инфу по улью можно зранить на самом терекере внутри. Так за счет стандартизации можно легко и быстро перекреплять ульи между пасеками. Чтобы не рисовать план пасеки вручную и не встраивать в каждый трекер дорогой и энергоёмкий GPS? можно воспользоваться встроенным в некоторые модули ESP-8266 блютусом и геотегировать улей просто оставив на крышке смартфон на несколько минут.

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

    trapwalker
    @trapwalker
    Программист, энтузиаст
    [a-zA-Z0-9]+
    Но у вас плохие требования к паролю.
    Они выдают непрофессионализм разработчиков, которые внедряют такие требования.
    Это признак того, что пароль лежит в открытом (не хешированном) виде в БД.
    Это провоцирует делать слабые пароли.
    Это выглядит как поделка студентов.

    Если и вводить ограничения, то минимальные:
    - пароль должен быть не пустым. Всё.

    Однако следует делать предупреждения если:
    - пароль содержит кириллицу, или любые символы, которые сложно набрать на любой произвольной клавиатуре. Большая проблема пароль с юникод-символами, если вы хотите ввести его на смартфоне. Большая проблема с кириллицей, если вы хотите войти с компа в турции в отпуске, потеряв, к примеру, телефон.
    - пароль слишком короткий;
    - хеш пароля находится в списке наиболее распространённых паролей;
    - пароль выглядит как набранный с инвертированным капс-локом.

    Эти предупреждения должны быть заметны, но не должны запрещать создать такой пароль. Обсуждать можно только то, что касается списка самых распространённых паролей, скажем тысячи самых популярных. Ну и короткие (меньше 6 знаков).
    Пароль следует хешировать с только что сгенерированной солью. Хранить соль нужно рядом с хешем. Также рядом можно указать название алгоритма хеширования. Прямо в одной строке. Это не снизит безопасность, зато избавит вас от проблем связанных с переходом на новые алгортимы хеширования.
    Ответ написан
  • Python: можно ли в модуль импортировать обычный текстовый файл json?

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

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    1. Нужно, чтобы классы A, B, C, D были потомками одного абстрактного класса Base. Абстрактный класс должен декларировать общий для них интерфейс.
    2. Нужно сделать ещё один класс G - потомок от Base. G должен содержать внутри список элементов класса Base. Кроме этого G должен реализовывать все абстрактные методы своего интерфейса путём вызова соответствующих методов вложенных в свой список объектов.
    3. Класс Base должен перекрывать метод сложения __add__. Результатом сложения возвращается экземпляр G, содержащий список из складываемых элементов.
    Ответ написан
    Комментировать
  • Как написать такую валидацию в regex?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    https://regex101.com/r/sXBK61/1
    ^[A-Za-zА-Яа-я]+([\-`][A-Za-zА-Яа-я]+)*$
    Ответ написан
    Комментировать
  • Алгоритм поиска кратчайшего пути через все вершины?

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

    Эта задача называется задачей коммивояжера:
    Задача коммивояжёра относится к числу трансвычислительных: уже при относительно небольшом числе городов (66 и более) она не может быть решена методом перебора вариантов никакими теоретически мыслимыми компьютерами за время, меньшее нескольких миллиардов лет.
    Ответ написан
    8 комментариев
  • Переходить ли с windows 10 на linux?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    О, а я сейчас выскажу оппозиционную точку зрения.
    Поставил сестре на старый ноут убунту и она горя не знает. Браузер (файрфокс), фильмы, детям учеба удалённо - всё это тянет.
    Да, с офисом проблема. Однако для бытовых нужд лично мне и родственникам хватает гугловских облачных решений. Если гуглдокс устраивает, то можно забить на винду.
    Про SSD очень правильно сказали. Это резко улучшит быстродействие. Правда не удивлюсь, если винда и его умудрится загрузить на 100% фуллтайм. ХЗ почему так происходит. Судя по всему основной тупняк именно из-за того.
    Причем на ноуте с 8 гигами оперативы винда 10ка также тупит со 100% использованием диска на кой-то хрен.
    Ответ написан
    6 комментариев
  • Как загружать большие mp3 файлы на сайт?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Ну кто так вопросы составляет, блин!?
    проект в который я хочу загрузить музыку (mp3), длительность дорожек больше 2 часов.

    "Загрузить" - это имеется в виду единоразовая акция? Через FTP rsync не подойдёт? Или это пользователи будут "загруЖАТЬ" такие здоровенные треки?
    Что бы по щелчку на плей все быстро воспроизводилось

    Так в чем вопрос, в том, чтобы быстро воспроизводилось или загружалось на сайт?
    Бывает download, а бывает upload. Проясните в чем именно вопрос. Или тут целых два вопроса?
    Если акция одноразовая то загружать (upload) треки можно как угодно. Это делает какой-то знающий специалист, а загрузка всё равно будет длиться не быстрее, чем пропустит интернет-канал.

    Если upload от пользователей, то выше ответили, нужно нормальный прогресс отобразить и скорость вы не увеличите, поскольку она ограничена пропускной способностью канала.

    Если речь о download для пользователей, то убедитесь, что у вас веб-сервер поддерживает и настроен на докачку файлов с произвольного места. Тогда проигрывание на странице можно запускать не дожидаясь полной загрузки.
    Однако будьте осторожны, бывает вот такая атака.
    Ответ написан
  • Как умножить в таблице два значения, полученный результат вывести отдельно?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Вы не написали о какой БД идёт речь.
    Некоторые поддерживают вычисляемые поля. Значение такого поля не хранится в БД, оно вычисляется в процессе запроса "ленивым" образом незаметно, а для SQL выглядит как обычное поле.

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

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

    Первое решение ищется по строке "%my_db% calculated fields"/
    Второе: "%my_db% trigger on update"
    Третье и гуглить не надо. Просто умножайте всегда.
    Ответ написан
    Комментировать
  • Плавится провод +5v?

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

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Как-то так
    SELECT n.id, n.name
    FROM names n JOIN tags_names tn ON tn.goods_id = n.id
    GROUP BY n.id, n.name
    HAVING COUNT(DISTINCT tn.tag_id) = (SELECT COUNT(t.id) FROM tags t)
    Ответ написан
    Комментировать
  • Парсер на Python?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Зачем парсер, когда у youtube есть API?
    Ответ написан
    Комментировать
  • Как добавить в архив по отдельному пути, но чтобы папка полная не писалась?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    with zipfile.ZipFile('spam.zip', 'w') as z: 
        z.write('C:\Windows\explorer.exe', 'path/in/archive/and_new_name.exe')
    Ответ написан
    1 комментарий
  • Как позвать толпу на онлайн хакатон?

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

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

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

    Я, вот, подумываю на счет концепции "бесконечного хакатона".
    Это такая площадка для публикации идей, команд и проектов для обсуждения и совместной работы. Кто-то скажет: "Зачем?! Есть же гитхаб, гитлаб, кикстартер и прочие! Там можно оформить страничку проекта, обсуждать фичи, принимать фичреквесты, форкать, делать ревью..."
    Суть "Бесконечного Хакатона" в том, что там первична именно коллаборация обсуждения и планирования, а не кодинга.
    На площадке можно было бы завести проект, оформить его карточку (для эффективного поиска), настроить донаты для краудфандинга, привязать репозиторий (возможно сделанный по шаблону).
    Для работы с кодом есть IDE и gitgub, для общения есть зумм, но нет единой точки кристаллизации, где можно искать проекты, единомышленников и идеи.
    Ответ написан
    3 комментария