Задать вопрос
  • Почему svg теряет качество при масштабировании?

    @Everything_is_bad
    ну так глянь исходники, у тебя внутри не вектор, а растр в png формате
    Ответ написан
    6 комментариев
  • Как хранить большие объёмы текста?

    @o5a
    База данных выглядит подходящим вариантом. Сможете хранить полностью свои тексты и обращаться к ним в любом нужном порядке. Даже простой встроенный в python sqlite подойдет, если не планируется совместный доступ к данным.

    В json тоже можно, но менее эффективно, т.к. каждый раз его придется полностью считывать, да и хранить большие объемы текста не совсем его предназначение.
    Ответ написан
  • Что будет с моим кодом если я удалю, и скачаю заново питон 3.9.5?

    Главное свой код по пути не удаляй
    Ответ написан
    Комментировать
  • Какое облачное хранилище выбрать для "вечного" хранения?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Бесплатного такого нет.
    Можно посмотреть самый дешевый холодный бэкап, типа 0,01 $ за гигабайт‑месяц
    Полтора бакса в год будет на ваших 13 гб.

    Бесплатно можно попробовать сделать пару аккаунтов с гуглдрайвом, и сделать несколько бэкапов.
    Но "залить и забыть нельзя". Меняются политики компании, меняются условия. Предсказать что будет через 5-10 лет нельзя.
    Ответ написан
    2 комментария
  • Насколько реально нужен консул девопсу?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Никто не заставляет использовать docker, systemd, ansible и вообще какие угодно системы оркестрации и оптимизации. Необязательно делать шаблоны конфигов или кластерные конфигурации сервисов, необязательно использовать библиотеки настраиваемого логгирования, возиться с балансерами и реприцируемыми базами. Но люди это делают, значит, смысл всё-таки есть?

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

    Консул - это тоже инструмент. Вряд ли хоть кто-то использует его возможности целиком и полностью, тем более что никто не заставляет. Кому-то достаточно того, что у него все сервисы зарегистрированы в одном месте и из коробки имеют автоматическое DNS-имя вида NAME.service.consul. Кто-то использует kv-хранилище для хранения параметров, а кто-то хранит в нём секреты и целые конфиги, настраивает токены с различными acl и скрещивает всё это с consul-template. Вообще, необязательно использовать именно консул, есть и другие инструменты для подобных задач. Например, zk/etcd.

    Консул чаще используют совсем не с ансиблом, а с инструментами оркестрации, в которых сервисы могут расширяться и сворачиваться, перезагружаться и мигрировать. Скажем, пусть у нас есть условный сервис rabbitmq на три ноды. Тогда у нас может быть три контейнера rabbitm{1..3}, при запуске они регистрируются в консуле скриптом запуска вместе с проверками, а далее consul отдаёт их все три в виде имени rabbitmq.service.consul. Если какой-то из них вдруг упадёт, consul оперативно это обнаружит и исключит из DNS проблемный узел. Если вдруг управляющий всем этим администратор или автоматическая система оркестрации посчитает нужным добавить новые узлы или перенести их куда-то ещё в кластере, то consul также отразит все нужные изменения. При этом использующее rabbitmq приложение должно будет знать только адрес rabbitmq.

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

    @antares4045
    Коннект надо поднять ОДИН раз в главном потоке а курсоров из него уже можете понаделать на все потоки (вроде). Если не поможет: то только открывать-закрывать подключение для каждой операции, например так: https://qna.habr.com/q/1062578#answer_2040432.

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

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

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

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

    Sqlite это просто файл у вас на диске, и еcли бы не та защита которая вам не даёт создать многопоточную программу, то вам бы казалось, что она вообще не работает: каждый поток видит в базе только то, что сделал в базе он сам, а после перезапуска вы вообще видите в лучшем случае версию базы от потока, закрывшего соединение последним (а то и вообще битый файл).
    Для того, чтобы всякие профессионалы не писали, что "этим вашим sqlite не возможно пользоваться", была встроена защита (куда более адекватный аналог которой есть на всех файлах microsoft office) если хоть кто-то сейчас работает с файлом, то его открывать нельзя и, если не оговорено обратное, падает с ошибкой.

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

    Правила организации этих очередей целая наука от которой сойти с ума можно, но в случае sqlite настраиваемый параметр у нас ровно один: сколько мы готовы ждать.

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

    cursor.execute(clause, props)
    result = cursor.fetchall()

    или что там у вас было пишем

    with sqlite3.connect(`Ваши параметры подключения`, timeout=`Какое-то зверски большое число секунд, которое мы готовы "стоять в очереди"`) as connect: 
      # создаём подключение к базе которое существует только в рамках блока with 
      # то что мы здесь напишем должно отработать максимально быстро
      cursor = connect.cursor()
      cursor.execute(clause, props)
      result = cursor.fetchall()

    В идеале вообще вынесите это в отдельную функцию

    p.s. если вы зашли сюда в поисках истины, то мы продолжили общение тут и в итоге победили.
    Ответ написан
    9 комментариев
  • Как выполнять запросы в БД одновременно?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    какие локальные (которые в одном файле) базы данных это поддерживают?

    1. Можно использовать sqlite3, но нужно будет настроить очереди на взаимодействие с бд, либо использовать sqlalchemy, который имеет поддержку пула соединений.
    2. Другие файловые бд не вижу смысла использовать, т.к. скорее всего настройка таких не популярных бд будет сложнее, чем п1.

    Как использовать sqlite python в многопоточности?
    Ответ написан
    2 комментария
  • Можно ли открыть доступ к папке через интернет?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Сервер - это программа, которая что-то раздает.
    Поэтому "Можно ли это сделать без apache и прочего?" - нет, нельзя. Чтобы раздавать, нужно чтобы это кто-то раздавал.
    А так - выбирай какой протокол интересует и выбирай удобный для тебя сервер который с этим протоколом работает.
    Ответ написан
    8 комментариев
  • Можно ли открыть доступ к папке через интернет?

    DevMan
    @DevMan
    a в чем вопрос собственно?
    можно через web-сервер, можно ftp, можно webdav, можно через специализированный софт.
    вариантов до усрачки в самом деле.
    Ответ написан
    Комментировать
  • Как запустить код на golang в vscode?

    @rtmprh Автор вопроса
    Очень сильно извиняюсь я затупок который забыл сохранить main файл)) все же оставлю тему вдруг найдутся такие же гении как я))
    Ответ написан
    2 комментария
  • Как добавить поддержку кастомных архивов?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Качаешь исходники и добавляешь свой формат, если умеешь программировать https://github.com/ip7z/7zip
    Ответ написан
    2 комментария
  • Чем распознать текст на картинках в PDF?

    Alex_Geer
    @Alex_Geer
    System Engineer
    Данная технология называется OCR.
    Можно использовать OCR движок для распознавания например tesseract-ocr
    Со списком команд и как экспортировать текст из PDF в TXT ознакомься уже сам )

    Пишешь скрипт который будет отправлять страницы с изображениями в OCR, далее так же скриптами на выходе склеиваешь обработанный текст с уже имеющимся.
    Ответ написан
  • Насколько актуальна книга Марка Саммерфильда?

    Не читал, но не осуждаю)

    Я считаю, что если многие советуют, то можно брать, если хотите.

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

    А создатели Go с самого начала заявили, что обратная совместимость будет одной из основных характеристик языка. Роб Пайк вообще говорил, что Go 2 никогда не будет.

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

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

    P. S. Совет лично от меня: читайте книги по программированию на английском. Очень часто переводчики просто бредят как ChatGPT, и некоторые книги просто невозможно читать.
    Ответ написан
    2 комментария
  • Почему конвертируемый код Python в EXE блокирует антивирус?

    @rPman
    Безотносительно к способу создания exe из python, рассылка exe по почте это уже маркер для антивирусов, это классический путь распространения вредоносов и нормальной практикой вообще считается блокировка этого типа контента.

    Типовые способы решения такой проблемы - упаковать exe файл (при необходимости с паролем), но это неправильное решение. Так же можно передавать на exe файл ссылку, для загрузки из интернета, а не сам файл. В этих случаях за проверку будут отвечать антивирусы уже на локальных машинах а не правила на почтовом сервере.

    Правильным решением является получение цифровой подписи (получать у майкрософт, не бесплатно, кажется что то типа 100$ в год) и подписывать свое приложение этой подписью, для антивирусников это четкий сигнал что приложение не вредонос (так как если оно таковым окажется, будет ясно кого наказывать).

    Так же, помимо получения цифровой подписи, настоятельно рекомендуется распространять свое приложение не в виде exe файла а в виде установочного пакета (например как приложение microsoft store или msi). При использовании microsoft store за обновлением приложений будет уже отвечать операционная система, т.е. доставкой и переустановкой пользователю не придется заниматься (на самом деле придется, но значительно проще, ведь автообновление не моментальное, а значит топать в настройки обновлений и кликать кнопку - скачать обновления) но это правильный способ.

    upd. https://learn.microsoft.com/ru-ru/windows/apps/pub...
    Ответ написан
    Комментировать
  • Работа с txt в python. Как работать с редактированием строк?

    @rPman
    Используй утилиту cut, она идеально подходит для решения твоей задачи
    cut --delimiter=; --fields=1 input_file.csv
    Результат будет выведен в консоль, можно перенаправить в фай, добавив в конец строки
    > out_file.txt
    Ответ написан
    Комментировать
  • Как определить тяжелые запросы?

    ky0
    @ky0
    Миллиардер, филантроп, патологический лгун
    Комментировать
  • Чем отличается XEN от OpenVZ?

    @rPman
    Вот популярные системы в порядке понижения функционала:
    Xen — на порядок сложнее и функциональнее, имеет помимо режима паравиртуализации (как openvz) режим полной виртуализации (в т.ч. поддержка соответствующих фич процессоров), есть механизмы переброса железа внутрь виртуалки (например, поддержка не самых слабых intel видеокарт), снапшоты, миграция,… много много вкусных фич.

    VMWare — как и xen, сложен, наворочен, приправлен соответствующей инфраструктурой и хорошими забористыми ценами :) режима полноценной паравиртуализации не имеет

    kvm/qemu — полная эмуляция процессора (а так же виртуализация через поддержку процессорами), есть вкусности от 'старших братьев' вида миграция запущенной виртуалки по сети, переброса железа (сильно хуже поддержка чем xen/vmware) и т.п. можно считать бакэндом, так как GUI в идеалогии не имеет, оно пилится желающим

    VirtualBox — эмуляция процессора, в т.ч. использование поддержки виртуализации процессоров, идеален как отдельное десктопное приложение, миграции по сети нет, есть снапшоты, некоторые вкусности скрыты от GUI в коммандной строке

    OpenVZ — это работа всех машин на одном ядре (патчи к нему так и зовутся openvz), нет виртуализации, максимальная скорость (так как фактически это расширенный chroot с изоляцией). Для запуска модуля ядра на поклон нужно идти к хост системе и ее администратору (например tun/tap адаптер у firstvds дают по запросу)
    Снапшотов нет (но их реализуют через lvm), миграция есть, есть сброс состояния контейнера на диск и возобновление работы…

    Lxc — еще проще чем openVZ, нет даже грамотной изоляции (если подсуетиться, можно, имея рут в контейнере, выйти в хост систему с рутовым доступом), прямой аналог jail во freebsd, имеет смысл для хитрых сетевых конфигураций, тестов и т.п.

    Chroot — это даже не виртуалка, это просто простейшая изоляция в пределах файловой системы, подмена путей в вызовах функций работы с файлами.
    p.s. lxc называют еще 'chroot на стероидах'

    OpenVZ/lxc/chroot поддерживают почти полноценное каскадирование виртуалок (т.е. к примеру можно внутри контейнера openvz запустить kvm/virtualbox при наличии модулей, даже с поддержкой аппаратного ускорения)
    Ответ написан
    6 комментариев
  • Что делает этот код на Python?

    Steel_Balls
    @Steel_Balls
    Это зловред
    Ответ написан
    Комментировать
  • Что по операционным системам лучше подтянуть Go разработчику?

    @rPman
    Так как вопрос общий и не конкретизирует будущую работу и выбор ОС, то настоятельно рекомендую почитать про сети и типовые конфигурации, с ними больше всего работы и она универсальна, для любой ОС.

    Следующий кандидат на изучение IPC (Inter Process Communication), мультипоточность, синхронизация, семафоры, мьютексы и т.п. Можно полистать про пайпы, они по разному работают в разных ОС т в каком то смысле это одновременно и сети и IPC.

    До кучи - работа со временем, не совсем ОС но она чуть чуть может отличаться от ОС или выбранного фреймворка.

    Ну и совсем голая практика - работа с GUI, базовые отличия и особенности (например почему в linux GUI это сервер, или почему в windows, 'схватив' заголовок окна мышкой, можно поставить на паузу стартовый поток).

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

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Ничего не пишите, поставьте minio.
    Ответ написан
    Комментировать