• Какой командой посмотреть расположение программы, установленной через python setup.py install в консоли linux?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Начните с whereis cli_entry_point_name.
    Она покажет что-то вроде:
    /usr/bin/cli_entry_point_name
    Наверно это python-файл. Вы можете убедиться в этом так:
    file /usr/bin/cli_entry_point_name
    Это также может быть симлинк на реальное расположение скрипта, команда file покажет вам реальное его месторасположение.
    Если это питоновский скрипт, загляните вовнутрь, там наверняка импортируется какой-то питоновский модуль.
    pip show module_name
    покажет где лежит библиотека.
    Это также может быть шелл-скрипт или вообще любой скрипт, там может активироваться env-окружение... короче надо смотреть глазами. Вариантов много, нет смысла описывать все.
    Ответ написан
    2 комментария
  • Есть ли компилятор для python в оптимизированный байт-код?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    То есть вы хотите, чтобы хреново написанный питоновский код подвергался оптимизации при трансляции в байткод?
    Плохая идея неявной магией и постобработкой закидывать огрехи в качестве кода.
    Байткод формируется под вполне конкретную виртуальную машину. Производительность вашей программы зависит от качества и эффективности вашего кода, а также от скорости виртуальной машины, исполняющей байт-код. В случае с питоном вы можете воспользоваться Java-машиной перейдя на jython. Это также добавит возможностей для интеграции с подключением java-кода.

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

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    С помощью super() можно вызывать любые родительские методы, не только конструктор.
    Кстати, __init__ -- это не конструктор, строго говоря. Он не создаёт инстанс. Инстанс создаётся в __new__, это и есть, фектически, конструктор. А __init__ -- это инициализация. Хотя в общем-то всем пофиг и конструктором его тоже все называют. Для простоты.

    В питоне есть множественное наследование. super создаёт прокси-объект с интерфейсом к предкам.
    Ответ написан
  • Как отсортировать в словаре данные по возрастанию по одному из ключей?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    У вас это строка. И сортировка происходит в алфавитном порядке.
    Вы можете вот так сортировать:
    key=lambda x: int(x['sick'])
    Ответ написан
    Комментировать
  • Почему пайчарм в тексте ошибки пишет, что нельзя померить длину числа, хотя четко виден список, а не число?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Потому, что число - это не строка. У него нет длины.
    Если вам надо посчитать количество десятичных знаков числа, то делайте так:
    len(str(12345)) # 5
    Ответ написан
    Комментировать
  • Стоит ли разделять 1 общий запрос на несколько маленьких?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Сделайте уровни абстракции, чтобы "копии" контроллеров были прозрачными и соответствовали принципу DRY. Тогда у вас и быстро всё будет и гибко. Будут и отдельные методы для получения запчастей и комбинированные для скорости.
    Однако помните, что преждевременная оптимизация - зло. Сделайте MVP и держите в голове, что, возможно, придётся вводить уровни абстракции и делать отдельные контроллеры для скорости. Не исключена вероятность, что скорости вам хватит и так, а оптимизация на ранних этапах отъест лишние деньги и время, которые можно было потратить на полезные фичи, чтобы соблазнить инвесторов.
    Ответ написан
    1 комментарий
  • Будет ли подобное использование eval безопасным?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    такой eval нельзя использовать лишь потому, что это небезопасно. Фактически, если использование eval не усугубит ситуацию, то почему бы не использовать.
    Довольно сумасшедшая идея ходить с открытой раной по улице. Но в защищенной среде в больнице между перевязками - это штатная ситуация, хотя и не отменяет необходимости быть осторожным.

    Оголённые провода в жилом помещении - это недопустимо, но в фазные шины с правильной маркировкой в электрощитовой, наверно, допустимы.
    Это касается не только eval.
    Однажды я слышал от студента примерно следующие рассуждения, когда ему требовалось написать простейший калькулятор:
    eval использовать нельзя (небезопасно), поэтому я пользовательский ввод записываю в питоновский файл и этот файл импортирую как модуль...
    Ответ написан
    7 комментариев
  • Возможна ли SQL injection длиной в 4 символа или менее?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    %'--
    Для тупо составленного по шаблону запроса вида:
    "SELECT * FROM projects WHERE title LIKE '"+ variable_from_client + "' AND owner_id=13"
    Ответ написан
    1 комментарий
  • Как эффективно находить общие сегменты полигонов?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    В postgis (ГИС-расширени для постгреса) это сделано очень эффективно. Загляните в исходники, они открыты. Ещё я не вижу смысла изобретать дендрофекальный велосипед, когда есть GDAL.
    Задача-то не тривиальная. Линии вашей геометрии могут отличаться незначительно, могут не лежать на одних и тех же наборах точек, могут быть разнонаправлены, что порой важно.
    Ответ написан
    Комментировать
  • Как записать данные в файл на python?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Во-первых, надо форматировать код специальным тегом.
    Во-вторых, у вас переменная l локальна и не видна снаружи функции.
    В-третьих, чтобы что-то записать в файл, лучше пользоваться такой конструкцией:
    with open("log.txt", "w") as f:
        f.write('any text')

    При этом файл каждый раз открывается с перезаписью, то есть очисткой всего что там было до открытия.
    Чтобы не удалялось, нужно открывать так: open('filename.log', 'a')
    Тогда файл не будет пересоздаваться поверх старого и можно дописывать к нему данные.
    В-четвертых, в питоне есть отличный модуль logging. Нагуглить статью про его использование элементарно.
    И мне не придётся это всё писать...

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

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Попробуйте структурировать своё решение.
    Вы верно подметили быстрые предварительные критерии отрицательного ответа:
    • кусков меньше 4
    • длина цепи не кратна четырём

    Уже хорошо.
    Дальше вы можете пробовать строить квадрат цепью от угла и при каждой неудачной попытке мысленно "перецеплять" очередное звено из начала в конец цепи.
    Вам осталось придумать критерий остановки по неудаче. Не обязательно же перецеплять ВСЕ звенья цепи, достаточно делать это пока не (ЧТО?).
    Думайте. Вам не нужен готовый ответ.
    Ответ написан
  • Логирование ввода с клавиатуры Linux?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Дурацкое решение вы придумали.
    Просто не давайте человеку админских прав и всё. Зачем клаву трекать? Ну сменит он пароль от своего пользователя, но вам-то что. С рутовыми правами смените обрано
    Ответ написан
    Комментировать
  • Как спарсить эту JSON страницу?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    ну читайте же внимательно:
    print(json['result']['line'])
    TypeError: list indices must be integers or slices, not str

    json['result'] у вас это не словарь, а список, а к нему обращаться можно только по целочисленному индексу.
    print([item['line'] for item in json['result']])
    Ответ написан
    Комментировать
  • Как загрузить существующий сайт на github?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    WP - это CMS.
    Она хранит контент в БД.
    Что вы называете "изменениями"?
    Если речь о контенте, то вам не нужно его размещать в системе контроля версий (github).
    Кроме контента у сайта на WP есть конфигурация. Часть конфигурации, насколько я понимаю, находится в БД, а часть может быть вынесена в файлы настроек.
    Эти файлы имеет смысл выносить в git.
    Ваш сайт - это, в идеале, несколько docker-контейнеров:
    1. контейнер с wordpress
    2. контейнер с БД
    3. контейнер с nginx, чтобы отдавать статику и роутить несколько отдельных кусков сайта. например вы подключаете отдельную галерею или что-то еще.

    Это минимальный сет. Иногда сайт рендерят сразу и отдают в виде статики. Так получается быстрее. Рендер делают в отдельном контейнере, иногда на отдельной машине.

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

    trapwalker
    @trapwalker
    Программист, энтузиаст
    В данном случае всё реализовано на SVG:
    5ea948936bc80480776489.png
    Причем подложка с комнатами отдельно, объекты вроде мебели отдельно. Всё будербродом лежит на странице и управляется яваскриптом.
    Ответ написан
  • Как сделать портативную колонку из активной компьютерной колонки и портативной колонки плохого качества?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    1. Возьмите у мамки тазик, а лучше пластиковый прямоугольный ящик из под рассады. Серьёзно. В него поставьте два пластиковых контейнера, в которых папка на работу обеды берёт.
    2. В эти коробки собираем все винтики и болтики и болтики при разборке девайсов. Каждый девайс в свою коробку.
    3. Организуйте себе удобное сидячее место с хорошим светом.
    4. При разборе фотайте при хорошем свете почаще что как стоит и как было подключено на телефон с разных ракурсов, следите за фокусировкой.
    5. Разберите оба девайса и примерьте нужные внутренности одного к внутренностям корпуса другого. Учтите, звук при этом ухудшится. Можете попробовать вставить аккум и плату от мелкой колонки в большую и включить большую как обычно в комп и послушать. Если устраивает, продолжаете.
    6. Следующий этап - смотрите сопротивление написанное на динамике большой колонки и сопротивление на мелком. Это цифра рядом с буквой омега. Если нашли и цифра близка по значению, то это хороший признак. Нет, всё равно можно попробовать.
    7. Отпаяйте один проводок одного из больших динамиков (тот, который разобрали, второй же пассивный можно пока не трогать). Присоедините отрезком провода этот динамик вместо динамика в мелкой. Включите мелкую, послушайте на разных громкостях? Завелось? Работает? -- считайте повезло.
    8. Посмотрите на плату мелкой колонки. Она Моно? там видно второй контакт,к уда можно было бы подключить второй канал? Не понятно? Запостьте отдельным вопросом снимки платы и внутренностей мелкой колонки, спросите тут куда подпаять второй канал. Если найдёте куда - припаивайте парочку проводов, потом приделаете моно-джек или тюльпанский разьём на основную ретро-колонку, чтобы пару подключать к ней.
    9. Примеряйте уже как следует внутрянку мелкой колонки вовнутрь старой. Некоторые пластиковые перегородки можно поплавить аккуратно заточенным фикспрайсовским паяльником (его не жалко), не изгадьте основной паяльник -- пожалеете потом.
    10. О! Вспомнил! Бинго! Посмотрете на ютубе канал Алекса Гувера. Чувак очень крутой и, имея мастерскую, 3д-принтер и прямые руки, много заморачивается над тем, чтобы рассказать как делать крутые штуки на кухне из сантеха и палок руками, растущими из области таза. У него есть сайт, где подобраны инструкции, схемы, проверенные компоненты и детали, чтобы проапгрейдить колонки не ломая китайскую шайбу. По цене то на то и выйдет, да еще и, может быть, радио добавиите или интернет радио сделаете опциональное.
    11. Ну что там... не отпало желание еще домучивать свой диайвай?
    12. Отпаиваете лишнее, примеряете, пропиливаете, снова примеряете чтоб карточка влезала и всё везде вставлялось. Подпаиваете динамики. Сажаете на горячие сопли всё, чтобы не болталось, собираете постукивая молотком всё в кучу.
    13. Не переживайте. Ещё раз десять всё придётся разобрать и переотприклеить, потому что забыли что-то припаять, потому что забыли что-то отпаять, потому что, ой блин, провод через дырку надо было продеть... Это нормально. Всегда так.
    14. У вас получится какая-то хрень, которая хорош если работает и не дымится при этом.
    15. Там обязательно что-то отпаяется через недлельку или отвалится, или закоротит, но вам уже лень будет починять, потому что вы помните как матерились, когда это всё переприпронаклеивали и аобирали.

    З.Ы.
    Глянул профиль. Крч. Про мамку и папку я так, для красного словца.
    Ну и оно ж ичсто из литературных соображений стилистика. не обессутьте
    З.З.Ы.
    С вашим профилем я бы пилил wifi-интернет-радио на ESP8266. Аккумуляторное питание и зарядку добавить не сложно из отдельных компонентов.
    Ответ написан
    1 комментарий
  • Как удалить пустой список в списке?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    лучше так:
    elms = [item for item in elms if item == []]
    А если вообще всё пустое надо убрать то так:
    elms = list(filter(None, elms))
    Ответ написан
    Комментировать
  • На плоскости расположены n предметов, их нужно переместить в заданные n позиций. Как это сделать?

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

    Давайте, учитесь уже рассуждать. Задачка несложная, видимо олимпиадная, но для каких-нибудь девятых-десятых классов. Хотя че-то, помнится, там посложнее были.

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

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    чтобы сеть отличала подачу (как написаны тексты)

    Святая наивность!
    По такой четкой постановке грех не решить задачу одной строчкой вообще.
    Готовой библиотеки для "сравнения подачи текста (как написано)" вы не найдёте.

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

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

    А так у яндекса есть какой-то инструментарий.
    Вот еще https://www.nltk.org/
    Либу для нейронок на питоне вообще найти не проблема. Любую берите с которой проще освоиться.

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

    Консультируйтесь со специалистами. Всё на свете нейронками не закидаешь.
    Ответ написан
    4 комментария
  • Как вывести все поля из БД без повторов?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Или так, если постгрес:
    WITH data AS (
      SELECT 1 AS id, 'Стивен Лэнг, Уильям Сэдлер' AS name UNION
      SELECT 2 AS id, 'Гай Ричи' AS name UNION
      SELECT 3 AS id, 'Стивен Кинг, Стивен Лэнг' AS name
    )
    SELECT DISTINCT unnest(regexp_split_to_array(name, ',\s*'))
    FROM data
    Ответ написан