Задать вопрос
  • Где посмотреть wi-fi адаптер с поддержкой mode monitor?

    CityCat4
    @CityCat4
    Дома с переломом ноги
    Нет, не нужен :) Нужно снести то, в чем нифига не понимаете - и вернуться уже к майнкрафту :)

    Mode monitor - режим мониторинга трафика, "беспорядочный" захват. В таком режиме карта, ессно не работает :) она только "слушает". И выясняется это пятью минутами гуглинга.
    Ответ написан
    Комментировать
  • Как отправить процесс в фон?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    Здравствуйте.
    На Ubuntu server после ввода команды bg <номер процесса> ничего не происходит, просто возвращается строка на ввод.

    Так и должна просто возвращаться строка на ввод. Во первых если процесс уже был запущен и работал в фоне, то вы ничего не делаете. Если он был приостановлен, он просто должен перейти в running.
    Но для того, чтобы вам помочь, было бы неплохо чтобы вы привели лог своей консоли, как вы выполняете jobs, как вы указываете номер процесса. То есть выполнить jobs, bg номер, jobs

    При вводе команды bg <номер процесса> на экране начинает отображается вывод этого процесса, при этом окно терминала наглухо зависает и я ничего не могу сделать, даже остановить процесс (ctr+C)

    Как докажете что окно терминала именно зависает?
    для начала, если вы запустили процесс в фоновом режиме, то Ctrl+C естественно не может его остановить. Он же в фоне выполняется. Скорее всего вы не понимаете, что вам доступен терминал, в котором вы можете вводить другие команды.
    Фоновый процесс просто может писать текст в терминал.
    Напишите вслепую clear, например, проверьте что экран очистился ненадолго.
    И запускать процессы в фон, которые шлют много текста в терминал - в общем случае бессмысленно
    Ответ написан
    Комментировать
  • Как автоматически проставлять группу пользователя при создании файла через winscp?

    ky0
    @ky0
    Миллиардер, филантроп, патологический лгун
    Делаете нужную группу основной у пользователей - и она начинает проставляться при создании файлов.
    Ответ написан
    Комментировать
  • Как правильно масштабировать Django с Kubernetes?

    @deliro
    Хочу такой вариант пропустить и сразу перейти к kubernetis

    "You think you do, but you don't"

    Знаю, что могу вынести DB и pgbouncer на отдельные сервера

    Чтобы увеличить RTT?

    Для поддержки кубика нужна целая выделенная команда, которая, помимо кубика, ещё настроит и будет поддерживать ёлку (ELK), какой-нибудь vault, графану, прометей, консул, докер реджистри, s3 (типа minio или seaweedfs, ведь контейнеры теперь stateless и хранить на них ничего нельзя) и кучу других сложных штук. Если у тебя нет сотни разработчиков в компании, то не нужно играть в гугл.

    Во-первых, какая у тебя нагрузка? Сколько тысяч запросов в секунду приходит и отмасштабировал ли ты вертикально и упёрся уже в потолок? gunicorn оптимально настроен? сколько процессов/потоков, какой тип воркеров? json парсишь и сериализуешь orjson'ом? Приложение профилировал?
    Во-вторых, 12 factor
    В-третьих, у базы есть реплики? read запросы раскидал на реплики? а редис? Действительно ли нужен zero downtime (это исходит из вопроса про нагрузку)

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

    P.S. DRF — медленное нетипизированное говно, выкинь его
    Ответ написан
    5 комментариев
  • Как ловить статус и от этого выводить результат?

    Vindicar
    @Vindicar
    RTFM!
    Вместо строки возвращай кортеж или словарь. Короче, структуру данных.
    from typing import NamedTuple
    
    class Result(NamedTuple):
        text: str  # текст запроса
        success: bool  # успешен ли запрос
        status: str  # статус
    
    async def check_text(text: str) -> Result:
        url = f'https://сайт.com/?query={text}'
    
        async with aiohttp.ClientSession() as session:
            async with session.get(url) as response:
                if response.status != 200:
                    return Result(text=text, success=False, status='Не удалось определить результат')
                html = await response.text()
                soup = BeautifulSoup(html, 'html.parser')
                status_element = soup.find('div', class_='table-block')
                if not status_element:
                    return Result(text=text, success=False, status='Не удалось определить результат')
                status_text = status_element.get_text().strip()
                # тебе нужно будет решить, когда запрос был успешен (True), а когда нет (False)
                if "ok" in status_text:
                    return Result(text=text, success=True, status='Можно')
                elif "no" in status_text:
                    return Result(text=text, success=False, status='Данный вариант недоступен')
                elif "no1" in status_text:
                    return Result(text=text, success=True, status='Можно под заказ')
                else:
                    return Result(text=text, success=False, status='Неизвестно')

    Тогда можно будет анализировать результат просто:
    result = await check_text(text)
    if result.success:
        ...  # реагируем на успешный запрос
        logger.info('%s: %s', result.text, result.status)
    else:
        ...  # реагируем на неудачный запрос
        logger.info('%s: %s', result.text, result.status)
    Ответ написан
  • Как сделать так чтобы данные перезаписывались, а не добавлялись новые?

    Maksim_64
    @Maksim_64
    Data Analyst
    Ты используешь pandas датафрейм, потом начинаешь чего то изобретать. Pandas фрейм имеет метод to_sql https://pandas.pydata.org/docs/reference/api/panda.... Ему надо передать имя таблицы, объект соединения, так же у него есть параметр if_exists, которому можно присвоить значение replace. И будет перезапись.

    Раз уж у тебя есть фрейм то и оставайся в рамках датафрема сформируй необходимый подсет. И без cursor.execute отправляй в любую базу в том числе и в sqlite.
    Ответ написан
    8 комментариев
  • Astra Linux 1.6 Смоленск: "Вход неудачен"?

    CityCat4
    @CityCat4
    Дома с переломом ноги
    Яу, это ты на special edition сделал обновление пакета? Ты хотя бы источники обновления не менял? А то ведь сертификация эта хваленая, ради которой смоленск покупается - она испарится, как дым, как только ты систему обновишь с неавторизованного источника...

    Смотри модуль Pam, который отвечает за вход, что там изменилось.

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

    Maksim_64
    @Maksim_64
    Data Analyst
    Ну смотри, я так понимаю задача сделать это на чистом python, если что у numpy массива имеется reshape() метод, который делает все это прекрасно, просто введешь размерности и если операция возможна n*m должно давать длинна массива он выполнит преобразование.

    На чистом python задача указать количество колонок, это будет размер внутреннего списка. То есть ну как то так
    l = [int(i) for i in '1 2 3 4 5 6 7 8 9'.split()]
    m=3
    result = [l[i:i+m] for i in range(0, len(l), m)]
    Ответ написан
    4 комментария
  • Развертывание VPS из локально настроенного образа. Так вообще делают?

    ValdikSS
    @ValdikSS
    Собирайте образы с помощью mkosi, он и bare metal собирать умеет, и контейнерные. На выходе получите именно то и в том виде, в каком хотите.
    Ответ написан
    Комментировать
  • Как асинхронно использовать gui и несколько бесконечных циклов?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Асинхронный код запустить в отдельном потоке, а все взаимодействия с интерфейсом из этого кода делать сигналами. Есть ещё библиотеки, позволяющие использовать цикл событий asyncio в качестве цикла событий окна, что звучит здорово, но сам я их в бою не пробовал.

    UPDATE:
    Надо же, с 2019-го многое поменялось в интересную сторону. Для PyQt и PySide есть qasync, который активно развивается, а для Tk вообще не нужны сторонние библиотеки:
    import tkinter as tk
    from tkinter import ttk
    import asyncio
    
    
    class App:
        async def exec(self):
            self.window = Window(asyncio.get_event_loop())
            await self.window.show();
    
    
    class Window(tk.Tk):
        def __init__(self, loop):
            self.loop = loop
            self.root = tk.Tk()
            self.animation = "░▒▒▒▒▒"
            self.label = tk.Label(text="")
            self.label.grid(row=0, columnspan=2, padx=(8, 8), pady=(16, 0))
            self.progressbar = ttk.Progressbar(length=280)
            self.progressbar.grid(row=1, columnspan=2, padx=(8, 8), pady=(16, 0))
            button_block = tk.Button(text="Calculate Sync", width=10, command=self.calculate_sync)
            button_block.grid(row=2, column=0, sticky=tk.W, padx=8, pady=8)
            button_non_block = tk.Button(text="Calculate Async", width=10, command=lambda: self.loop.create_task(self.calculate_async()))
            button_non_block.grid(row=2, column=1, sticky=tk.W, padx=8, pady=8)
    
        async def show(self):
            while True:
                self.label["text"] = self.animation
                self.animation = self.animation[1:] + self.animation[0]
                self.root.update()
                await asyncio.sleep(.1)
    
        def calculate_sync(self):
            max = 3000000
            for i in range(1, max):
                self.progressbar["value"] = i / max * 100
    
        async def calculate_async(self):
            max = 3000000
            for i in range(1, max):
                self.progressbar["value"] = i / max * 100
                if i % 1000 == 0:
                    await asyncio.sleep(0)
    
    
    asyncio.run(App().exec())
    Ответ написан
    Комментировать
  • Как исправить ошибку с file.tell()?

    Vindicar
    @Vindicar
    RTFM!
    Ну раз проблема в цикле for, то вместо for line in data: делай цикл вручную, например так:
    while True:
        line = data.readline()
        if not line:
            break
        ...  # тут выполняем дальнейшие операции

    Этот код полагается на тот факт, что чтение в конце файла вернёт пустую строку (а "пустая" строка в середине файла всё равно будет иметь хотя бы один символ - символ перевода строки).
    Ответ написан
    Комментировать
  • Несколько пользователей или контейнеризация?

    @Drno
    lxd контейнеры
    ставится и настраивается в 2 клика, запускаете каждому свой контейнер и пусть там развлекается
    ну и ssh каждому прокинуть в нужный контейнер
    Ответ написан
    Комментировать
  • Как совместить работу psycopg2 и multiprocessing в python?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Не надо в многозадачном коде использовать глобальные переменные. Ну и непонятно зачем вам мультипроцессность, если задачи I/O bound.
    Ответ написан
    2 комментария
  • Логи, ошибки Ubuntu человеческим языком, как?

    Alex_Geer
    @Alex_Geer
    System Engineer
    В ubuntu есть такая утилита с одноименным названием журналы.
    6524266668216717257222.png

    А более подробно почитать про логи и работе с ними можно тут
    https://losst.pro/kak-posmotret-logi-v-linux
    Ответ написан
    Комментировать
  • Почему 3 секунд не хватает для выполнения кода?

    wataru
    @wataru Куратор тега Алгоритмы
    Разработчик на С++, экс-олимпиадник.
    У вас решениe за O(n^3), ибо у вас там 2 вложенных цикла до n, а внутри еще и постоянно вызываются min/max, которые проходятся по всему массиву.

    Ограничения же в задаче n<10^5. С такими ограничениями максимум O(n log n) решение уложится в 3 секунды.

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

    Что можно сделать с входным массивом, чтобы можно было получать несколько самых маленьких элементов быстро? Помните, что вам надо уложиться в O(n log n).
    Ответ написан
    Комментировать
  • Ошибка NameError: name 'np' is not defined?

    Maksim_64
    @Maksim_64
    Data Analyst
    Попробуй установить если не установлен numpy и импортировать его import numpy as np
    Ответ написан
    Комментировать
  • Зеркала Arch linux почему то всегда выдают 404 что делать?

    xotkot
    @xotkot
    ответы это убийцы вопросов
    перед установкой чего либо всегда желательно обновить систему(-Syu) чтобы не встречать подобных казусов о чем в принципе и написал выше в комментариях к вопросу Василий Дёмин .
    В локальной базе версия пакета, судя по выхлопу, у вас edk2-ovmf-202308-2 (модификация 2), которую pacman и пытается запросить у внешнего сервера, НО на серверах она уже другая edk2-ovmf-202308-3 (модификация 3) что можно видеть если запросить информацию с сервера по данному пакету
    pacman -Si edk2-ovmf
    или даже посмотреть на оффсайте арча edk2-ovmf

    чтобы pacman увидел новую версию нужно синхронизировать локальный репозиторий с удалённым, для этого служит команда
    pacman -Sy
    информацию по ключу можно глянуть в хелпе(-h, --help)
    pacman -Sh
    ...
      -y, --refresh        загрузить обновленные базы данных с серверов
                           (-yy принудительно обновить даже если обновленные)


    после чего pacman уже сможет скачать и установить нужный пакет с сервера, но если система давно не обновлялась то такая установка будет считаться как частичное обновление системы что для дистрибутивов с ролинг-релизом настоятельно рекомендуется этого не делать, поэтому перед установкой необходимо обновить все пакеты в системе добавив ключ -u, --sysupgrade
    в целом команда будет выглядеть так:
    pacman -Syu edk2-ovmf
    Ответ написан
    Комментировать
  • Есть ли необходимость или очевидные плюсы перехода на linux?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    Работать нужно теми инструментами, которые удобны.
    В Линукс очень удобно запускать и выполнять код, который предназначен для линукса.
    Если ваш "продакшен" работает в Линукс, то удобнее было бы и локально сделать себе Линукс. Но не факт что вам будет удобно именно писать код в Линуксе.

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

    В общем хорошо иметь под рукой Линукс, если код в продакшене работает на Линукс.
    Ответ написан
    6 комментариев
  • Есть ли необходимость или очевидные плюсы перехода на linux?

    Adamos
    @Adamos
    Вопрос поставлен однобоко - это не взвешенный выбор, а нытье "мне же и так хорошо, дайте мне оправдание ничего не делать".
    Если развернуть вопрос - есть ли необходимость или очевидные плюсы оставаться на Виндах? - вполне может оказаться, что кроме привычки и "синдрома утенка" никаких аргументов и не найдется.
    При этом знание Линуксов человеку, который работает с серверами, как минимум полезно. А вот знание Виндов в этой же области не дает ничего, кроме плохих привычек...
    Ответ написан
    2 комментария
  • Как реализовать SQL движок в своём приложении?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    1. GraphQL - специальный язык запросов. Можно изменять/обновлять/добавлять/читать. Есть полноценный пакет, который парсит запрос и выполняет его. Можно к In memory коллекциям подкрутить. Но это не SQL

    2. OData - тоже язык запросов. Можно изменять/добавлять/читать/удалять. Он достаточно старый и разобраться сложнее. Тоже есть фреймворк, который автоматизирует работу по парсингу/выполнению. Это также не SQL

    3. In Memory sqlite - можно запустить SQLite в памяти и проксировать запросы уже ему.
    Ответ написан
    Комментировать