• Как убрать скобки?

    Dr_Elvis
    @Dr_Elvis Куратор тега Python
    В гугле забанен
    Почитать про списки. И про то как выдают данные бд. И ещё основы, чтобы наверняка, Марка Лутца хотя бы.
    Ответ написан
    Комментировать
  • Как правильно вести "документацию"/ заметки сис админу?

    Lopar
    @Lopar
    системный администратор
    Раз в несколько лет вы будете кочевать туда сюда. Блокнот, Обсидиан, Ноушен, Докувики, Эксель\Ворд, Блокнот в клеточку. Постоянно мигрируешь туда-сюда потому что задачи меняются, старые записи устаревают и удаляются, новые записи подпадают под новые требования - что-то для себя, что-то на отдел расшарить итд. Были пароли в Кипасс, не хватало шашечек, переехал на битварден, пока переезжал и привыкал, за пару тройку лет шашешчки подъехали и в кипасс, теперь думаешь про обратный переезд.

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

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

    Но ты можешь практически любую сишную библиотеку, скомпилированную в виде динамической библиотеки
    (.dll на Windows) использовать в практически любом языке средствами ffi.
    Ответ написан
    Комментировать
  • Как правильно построить логику приложения?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Первое, что приходит в голову: если уж классы, то и трэки - класс. Со всеми вытекающими. Но это отдельная история.

    Второе - для списков добавление элемента - метод .append()
    Можно и «плюсовать», но лучше явно, чем неявно.
    Т.е. self.data['tracks'].append({…})
    Но тут мы подходим к третьему: если у тебя класс проигрывателя, зачем внутри него делать вот этот словарь self.data?
    Пусть у класса проигрывателей будут атрибуты «self.tracks: list» и «self.queueloop_status: bool».
    Т.е.
    self.tracks.append({…})
    self.queueloop_status = True

    И, наверное, для управления всем этим классу проигрывателя надо оформить соответствующие методы (add, remove, сеттеры/геттеры и т.д.),
    Ответ написан
    Комментировать
  • Как остановить поток python?

    Vindicar
    @Vindicar
    RTFM!
    Метод join() приостанавливает тот поток, в котором он вызван до момента завершения указанного потока. Он никак не сигнализирует указанному потоку, что пора завершаться, это твоя задача.
    Я не вижу, чтобы ты присваивал True переменной schedule_stop.
    Ответ написан
    2 комментария
  • Как сделать условие в SQLite Python?

    Vindicar
    @Vindicar
    RTFM!
    Ну так у тебя второй запрос запршивает всех пользователей, без условия.
    А вообще приведённый код не имеет смысла и не должен работать вообще никак.
    for i in cursor.fetchone("SELECT ID FROM user_info WHERE RANK = '1'"):

    Ты перебираешь столбцы в первой строке (fetchone), для которой RANK = '1'. Это при том, что запрос возвращает тебе только один столбец - ID. А ещё метод fetchone() не принимает параметров. Ты пропустил вызов execute()?

    Потом ты почему-то берёшь 0й символ этого столбца. Если он равен 1 (а он не будет равен 1, так как это символ, а не число).
    Потом ты перебираешь всех пользователей, и отправляешь им сообщения (при этом у тебя в вызове send_message() две опечатки - в имени переменной и незакрытая скобка).

    А ещё у тебя отступы кривые - почему for i с отступом?

    В общем, по такой бредятине понять, в чём дело, нереально.
    Ответ написан
    4 комментария
  • Как правильно работать с секретами?

    Прокидывай секреты через переменные среды. Благо по умолчанию IConfiguration умеет работать со слоёными конфигами, где по порядку применяются следующие слои:
    1. appsettings.json
    2. appsettings.Environment.json
    3. переменные среды
    4. аргументы командной строки

    Соответственно никакие трансформации не нужны - можно спокойно пушить конфиг в репозиторий, заменяя секреты какими-нибудь заглушками (например мы туда кладём строки, которые похожи на тот секрет, который должен быть)

    Локально (на машине разработчика) переменные среды можно хранить в .env файлах, либо можно продолжать иметь дополнительные appsettings - это тоже ок.

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

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

    shabelski89
    @shabelski89
    engineer
    Проще простого, вот мой ответ на аналогичный вопрос.
    Ответ написан
    Комментировать
  • Объясните/заккоментируйте как работает эта програмка?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    такую программу можно написать в 5 раз короче
    и именно такое решение от вас и ожидается - примитивное, показывающее что вы понимаете самые базовые элементы языка - циклы, работу с переменными, строками.
    Никакие списки тут не нужны.
    От вас требуется продумать в голове алогоритм, и потом реализовать его на Питоне.

    Главное здесь - алгоритм
    Попробуйте для начала изложить его просто словами.
    Ответ написан
    21 комментарий
  • Добавляю в sqlite3 через python в таблицу данные и выдает ошибку почему?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Элементарно, Ватсон!
    В области видимости переменных функции passw переменная loginDb - не определена, поэтому функция ищет такую переменную в вышележащей области видимости - в глобальной. А там эта переменная определена и ссылается на класс str (кстати, зачем???)
    В то же время в области видимости переменных функции auth переменная loginDb определена, поэтому она там не имеет никакого отношения ни к одноименной переменной в глобальной области, ни к одноименной переменной в функции passw.
    На вход execute попадает значение str - а это - класс, а не строка, поэтому execute и ругается, что тип не подходящий.

    Что делать?
    • Изучить и понять области видимости переменных.
    • Передавать в явном виде необходимые переменные на вход функций, а также явно возвращать их измененные значения из функций и явно передавать в другие функции.
    Ответ написан
    Комментировать
  • Как перевести декартовые координаты в полярные и найти полярный угол?

    Vindicar
    @Vindicar
    RTFM!
    Тригонометрию в школе проходили?
    Есть прямоугольный треугольник. Одна точка - начало координат О, вторая - искомая точка в декартовых координатах A, третья - её проекция на ось X (назовем точка B).
    Тогда гипотенуза - это отрезок ОA, а катеты - OB и AB. Тебе нужно найти угол AOB.
    Вспоминаем определения:
    sin AOB = |AB| / |OA| =>
    cos AOB = |OB| / |OA|
    tg AOB = |AB| / |OB|

    Как найти длину гипотенузы OA ты уже знаешь.
    Длина AB будет координатой y, а длина OB - координатой x.
    Используй любое из указанный выражений для нахождения AOB, только не забывай про коррекцию знаков (так, cos AOB не изменится, если сменить знак координаты y, а вот знак угла при этом должен измениться).
    Ответ написан
    Комментировать
  • Pool vs ThreadPool или как задействовать все процессоры с максимальной отдачей?

    @mgearr
    Ну а как вообще запускать параллельные треды на питоне?
    На чистом питоне - видимо, никак. Ведь именно для того знаменитый GIL и сделали, чтоб нельзя было. На C и CPython - можно, но это уже выход за рамки питона

    Стандартный питоновский путь - вместо тредов использовать процессы. При этом, естественно, расходуется больше памяти и прочих ресурсов, зато легче избегать конфликтов чтения-записи (race conditions)

    Также можно поискать библиотеки с распараллеливанием нужной задачи. Или можно просто запускать внешние процессы, которые "умеют в треды". Причём всё равно лучше это делать через пул процессов, потому что проц хорошо нагружается, если процессов больше, чем ядер/потоков. Размер пула надо подбирать опытным путём, потому что с какого-то количества одновременных задач общая производительность начнёт падать из-за перегрузки планировщика и ввода-вывода
    Ответ написан
    Комментировать
  • Как распаковать вложенный список?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Наверное, надо проверять элемент исходного списка, является ли он списком, и только тогда распаковывать?
    Если уровень вложенности у нас один, то так и написать
    chained = []
    for item in posl:
        if isinstance(item, list):
            for subitem in item:
                chained.append(subitem)
        else:
            chained.append(item)

    Это будет самый кондовый алгоритм. Задачу можно реализовать и короче, и оптимальнее. Но при изучении программирования надо сначала научиться составлять самому простейшие алгоритмы и их реализовывать, а не просто пытаться использовать по очереди какие-то магические заклинания - авось какое-то сработает. А если не сработает - то идти на Хабр, чтобы тебе его написали.
    Любой красивый код следует применять только тогда, когда ты понимаешь, как он работает, что делает внутри. А если не понимаешь, то лучше сначала разобраться, реализовать тот же алгоритм руками. Иначе ты будешь не программист, а обезьяна с гранатой.

    Если вложенность неограниченная, то придется познакомиться с таким понятием, как рекурсия.
    Ответ написан
    Комментировать
  • Какую книгу прочитать про SQL?

    @User2017
    SQL для начинающих

    https://sqlbolt.com/ - онлайн тренажер - здесь каждый урок проходишь на практике
    Ответ написан
    Комментировать
  • Какую книгу прочитать про SQL?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Изучать SQL как сферический язык в вакууме - нет особого смысла. Особенно если ты спрашиваешь про хинты. Хинты - это опция конкретной реализации DBMS. У Оракла - свои хинты. У Microsoft - свои. И знания между ними - совершенно не переносимые. И сами хинты кажется не стандартизированы в SQL стандарте. Здесь я могу ошибаться - пускай знающие подскажут.

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

    Я в своё время тоже искал теоретическую литературу по оптимизации SQL. Нет толком ничего. Есть Ден Тоу. Настройка SQL для профессионалов. Он пытается подогнать под оптимизацию свою теорию. Считает селективности и кардинальности для суб-запросов и рисует "облачки" - диаграммы пытаясь вывести формулу cost. Но это всё не работает. Это разбивается о практику. Ни одна практика Oracle/PG/MSQL/MySQL не подрверждает эффеткивности диаграмм Тоу. Вобщем я зря потратил время на чтение этой книги. И тебе не советую.

    Бери конкретные книги от вендора и по ним смотри.

    И в твоём вопросе не хватает еще одного хеш-тега.
    Ответ написан
    Комментировать
  • Можно ли в модели добавить несколько элементов циклом?

    fox_12
    @fox_12 Куратор тега Django
    Расставляю биты, управляю заряженными частицами
    В Django модели есть IntegerField в нем 8 байт - вполне достаточно чтобы хранить 64 битовых состояний.
    Ну либо строку в CharField из 80 "0" или "1"
    Ну или ArrayField из bool
    Или JSONField в котором хранить dict из состояний чекбоксов
    и т.п.

    В общем - достаточно вариантов чтобы избавиться от такой дичи вроде создания циклом полей в модели.
    Ответ написан
    1 комментарий
  • На каких фриланс биржах искать заказы?

    Starina_js
    @Starina_js
    full-stack web dev
    Вы из РФ? Сейчас ситуация такая, что несколько бирж закрыты для РФ.

    Вот какие работают
    https://fl.ru - самая большая по заказам. Больше всего заданий там генерируется
    https://freelance.habr.com - меньше, но задания в большинстве своем более сложные
    https://freelance.ru - много тоже заданий
    https://kwork.ru/ - фриланс, только такого, магазинного плана. Немного другой подход к покупке фриланс услуг

    Какие сейчас отпали:
    freelancehunt.com , weblancer.net, зарубежная upwork.com

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

    Лучше искать работу на джуна в студии либо искать партнерство на заявки в тех же самых студиях, более опытных фрилансерах или партнерка у смежных IT профессий.

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

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Правильно задумались. Добавьте в ваши таблицы Userid и храните все в одной базе. Бэкапить 100500 баз то ещё удовольствие
    Ответ написан
    1 комментарий
  • Зачем функции нужны магические методы класса?

    AlexNest
    @AlexNest Куратор тега Python
    Работаю с Python/Django
    Собственно, функции в питоне - объекты, так-же как и классы. Методы, да рудименты.
    Ответ написан