• Код на Python написан правильно но вот система постоянна выдаёт ошибку пробовал обновлять все билиотеки но ошибка остаётся?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting

    File "C:\Peton\python\.venv\lib\site-packages\aiogram\dispatcher\__init__.py", line 2
    IndentationError: expected an indented block after class definition on line 1

    Похоже, что внутри __init__.py (aiogram\dispatcher) проблемы с табуляцией.
    Ответ написан
    1 комментарий
  • Почему система падает при большом трафике?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Описание проблемы проще чем кажется: чем больше трафика - тем больше работы.
    Это влечет за собой:
    - Больший нагрев процессора и других комплектующих + повышение их износа -> могут отвалиться
    - В каждом софте (даже стабильной ОС) есть ошибки, которые точно возникнут согласно ЗБЧ
    - Появляется слишком много прерываний, которые тормозят систему -> большие операционные издержки (переключение контекста, переход в режим ядра и т.д.)
    - Рано или поздно доступные ресурсы закончатся (ОЗУ, Диск, буфер сетевой карты), а не многие приложения могут такое обработать и упадут

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

    Сколько ресурсов должно быть для корректной работы при определенной нагрузке надо искать самим - тестировать систему (стресс/нагрузочное/объемное и т.д.).
    Создавать математические формулы - такое себе, т.к. слишком много важных параметров не будет учтено:
    - Топология сети
    - Используемые комплектующие
    - Охлаждение
    - Расположение серверов
    - Версия ОС + гипервизор

    UPD: + конечно же когда много трафика, то какие-то пакеты отбрасываются/теряются и необходимо слать их повторно, что увеличивает нагрузку на сеть + задержку запроса
    Ответ написан
    1 комментарий
  • Что такое культура программирования?

    xez
    @xez
    TL Junior Roo
    Почти то же самое, что культура коммуникации.
    - Следование код-стайлу. Адекватный нейминг.
    - Умение писать выразительный, понятный код. Без лапши, без убер-методов на миллион строк, без олимпиадных трюков (если нет такой необходимости); код, в котором можно будет легко разобраться.
    - Любовь к тестам. Понимание почему и зачем тесты писать и почему и зачем не писать.
    - Следование общепринятым инженерным практикам. В Гите не пушить без реквеста в мастер, не ребейсить без необходимости, подписывать комиты, описывать реквесты. В бд предпочитать миграции и не лазить в прод трясущимися, грязными ручонками. Релизы согласовывать, к стейджам относится уважительно. В очереди не срать. Рута избегать.
    - Скилл в декомпозиции и оценке. Умение прогнозировать разработку, умение давать обещания и умение их выполнять.
    - Отсутствие магического мышления. Понимание причино-следственных связей. Знание что такое логи и что такое метрики.
    - и т.д..
    Ответ написан
    Комментировать
  • Что такое культура программирования?

    otdameskapizm
    @otdameskapizm
    Помог ответ? Отметь решением...
    Все, что можно отнести, к "делай как надо, а как не надо - не делай"
    Ответ написан
    Комментировать
  • Актуален ли ассемблер на сегодняшний день?

    @PhpDesignGuru
    Конечно актуален, правда большинство задач можно решить на языках более высокого уровня.

    Области, навскидку, где можно использовать ассемблер:

    • Системное программирование (драйверы и тп)
    • Оптимизация производительности
    • Разработка встроенных систем и микроконтроллеров
    • Обратная инженерия и безопасность
    Ответ написан
    Комментировать
  • Как запушить проект webpаck на GitHub, но при этом не толкать все зависимости?

    yesbro
    @yesbro
    Думаю, помогаю думать
    Надо добавить папку node_modules в .gitignore

    Если файлы уже добавлены под контроль гит, то просто добавление этой папки в gitignore не поможет. Надо сперва удалить эти файлы, потом добавить папку в gitignore, а потом уже снова подтянуть зависимости.
    Ответ написан
    9 комментариев
  • Где и как хранить сообщения чата?

    yesbro
    @yesbro
    Думаю, помогаю думать
    Если бот будет не только считать статистику, но и модерировать, то хранить сообщения нужно. Его постоянно придется дообучать, вводить новые правила модерации. Истории сообщений очень поможет это новое тестировать.

    Советую использовать ту базу с которой больше работал. Postgresql - подойдет. Отдельно таблица сообщений, отдельно таблица агрегированных счетчиков что бы каждый раз тебе не делать тяжелые агрегирующие запросы к базе с count. Максимум у тебя должно быть что-то суммирующее. По дням/чатам/пользователям внутри чата.

    Если прочувствуешь, что упираешь в какой-либо потолок, то только тогда стоит задуматься о миграции на что-то более узкоспециализированное.
    Ответ написан
    5 комментариев
  • Какой ЯП подходит для производственного ERP?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Какой хочешь.
    Равнозначно

    UPD:
    Лично я, как предприниматель, бы делал выбор между C# / Java
    Причины:
    1. Сформированное, "взрослое" (mature) сообщество, которое может помочь
    2. Существуют проверенные/документированные фремворки
    3. Для общих случаев (настройка БД, создание диаграмм, документирование кода, какие-нибудь паттерны) уже есть удобные инструменты/фреймворки
    4. Рынок разработчиков большой
    5. Эти ЯП позволяют абстрагироваться от инфраструктуры или упростить работу с ней (управление памятью, вопросы ABI, версионирование, сборка и т.д.)
    Ответ написан
    1 комментарий
  • Как оптимизировать сервер на python?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    как можно улучшить код, чтобы данные с сервера к клиенту предавались быстрее

    Я бы использовал следующее:
    - Асинхронность с Asyncio.
    - Сжимать аудио перед отправкой на клиент.

    Если я правильно понимаю, Вы используете новое соединение для каждого запроса? Может лучше постоянное?
    Ответ написан
    2 комментария
  • Что выбрать WP или Python+Django для сайта?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Короткий ответ (с учетом указанного ТЗ) - WP.

    Длинный ответ:
    публиковать страницы, создавать иерархию страниц, чпу url, какой то слайдер с картинками

    Учитывая типовое ТЗ, ответ - WP (все это уже реализовано, преимущественно бесплатно и в большом количестве).
    небольшое количество услуги в регионе

    Вы на старте выхода в интернет, предположу, что количество оказываемых услуг оффлайн - будет примерно равнозначно количеству оказываемых услуг онлайн, а значит производительность инструмента не первостепенна, ответ - WP.
    Нашли компанию, предлагает разработку сайта на WP или на Python+Django (дороже и дольше)

    Начнем с того, что это не равнозначные инструмент, ибо WP - это готовый движок/CMS для сайта + сам сайт (готовые шаблоны), развернул на хостинге и готово. А вот Django - это фреймворк, т.е. некий набор инструментов, да он позволяет сделать из него что угодно (ах*енно сделать (на правах отвечающего)), но потом. Соответственно, если вопроса в функционале и производительности не стоит (и предположу - сделать быстро) - выбираем WP, будет дешевле и быстрее.

    Что обычно я использую (от начального проекта к финальному):
    1. WP в стоке + сборка фронта (webpack) с оптимизацией + кэширование.
    2. Докупка железа и горизонтальное масштабирование п1 балансировщиком.
    3. Профилирование и переписывание определенных запросов под конкретные задачи в самом WP, обычно добавляет производительности в 2-3 раза (от wp там мало что остается, но ценник и сроки еще не такие, как в п4).
    4. Python + Django + кэширование (если нужно быстрее любого WP и более специфический функционал).
    5. П4 + FastAPI (если прям совсем прижало по производительности).
    Ответ написан
    6 комментариев
  • Ошибка при использовании grep на сервере?

    fzfx
    @fzfx
    18,5 дм
    У меня стойкое ощущение, что ваш греп залип на работе с каким-то устройством или FIFO-буфером. Можете попробовать добавить параметр --devices=skip, чтобы пропускать (игнорировать) всё, кроме файлов и симлинков.
    Ответ написан
    1 комментарий
  • Ошибка при использовании grep на сервере?

    Adamos
    @Adamos
    grep -R "Вечность" /dev/urandom
    grep, начиная с корня системы

    Не начинайте с корня, начинайте с тех мест, где реально надо искать. В корне куча виртуальных папок, примонтированные шары, блочные устройства... не надо в нем запускать команды с -R. Вообще не надо.
    Ответ написан
    5 комментариев
  • Как скормить звук python чтобы после его распознания выполнялось действие?

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

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

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

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

    Изучать нужно по теме "Цифровая обработка сигналов", "сравнение звуков"
    Ответ написан
    3 комментария
  • Где найти сервис дающий ссылку на файл с расширением файла в конце (пример: https://**********.dat)?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Почему бы не использовать использовать какое-нибудь S3 хранилище?
    Ответ написан
    Комментировать
  • Какие программы есть для индексации и контекстного поиска в офисных файлах и файлах PDF?

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    https://docfetcher.sourceforge.io/ru/index.html из фри,

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

    yarkov
    @yarkov
    Помог ответ? Отметь решением.
    база данных светится наружу в интернет

    Для чего? Почему просто не выставлять наружу порт?
    Ответ написан
    4 комментария
  • Почему не открывается страница на 3000 порту?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    - server.listen(port, hostname, () => {
    + server.listen(port, hostname, (error) => {
    +   if (error) {
    +     console.error(error);
    +   } else {
          console.log(`Server running at http://${hostname}:${port}/`);
    +   }

    Ну и проверьте, что порт не блокируется файрволом
    Ответ написан
    4 комментария
  • При каких обстоятельствах запущен данный процесс python-программы?

    leahch
    @leahch Куратор тега Linux
    3D специалист. Dолго, Dорого, Dерьмово.
    Посмотреть, что происходит с программой можно через lsof -p PID-процесса, если это линукс.

    Также можно через gdb подключиться к процессу - https://wiki.python.org/moin/DebuggingWithGdb
    и есть еще pyrasite https://gist.github.com/reywood/e221c4061bbf2eccea...

    PS. Если ничего не помогает, то можно воспользоваться strace -p PID
    Но в системе его желательно включить командой # echo 0 > /proc/sys/kernel/yama/ptrace_scope
    Ответ написан
    5 комментариев
  • При каких обстоятельствах запущен данный процесс python-программы?

    Vindicar
    @Vindicar
    RTFM!
    Я бы попробовал использовать аудит-хук.
    Многие функции питона генерят события аудита, на которые можно подписаться.
    Есть полная таблица событий для CPython, но тебя будут интересовать события типа subprocess.Popen, os.system, os.spawn, os.startfile, os.exec, os.fork и так далее.
    Внутри хука можешь попробовать вызвать traceback.format_stack() чтобы узнать текущий стек вызовов, и записать его в какой-нибудь журнал работы.
    import sys
    import traceback
    # хук который ловит событие импорта модуля
    def hook(event, args):
        if event != 'import':
            return
        name, filename = args[0], args[1]
        callstack = traceback.extract_stack(limit=None)
        print(event, name, filename)
        for item in traceback.format_list(callstack):
            print('    ', item.strip())
    
    sys.addaudithook(hook)
    
    import json
    
    print('Done')


    Это сработает только если процессы спавнятся средствами питона, а не каким-нибудь скомпилированным расширением.

    Также можешь поискать использование модуля multiprocessing, это тоже вероятный кандидат.
    Ответ написан
    1 комментарий
  • Кто нибудь применял или видел generics в серьезных Go проектах?

    Одно из самых полезных применений дженериков, которое у меня было — это написание врапперов, которые добавляют строгую типизацию в обработку чего-либо и уменьшают бойлерплейт. Например, обработка http-запросов. Обычно используется роутер и в него регистрируются хендлеры для разных путей, например:
    router := httprouter.New()
    
    router.POST("/api/products", productsHandler.Handle)
    router.POST("/api/get_free_slots", getFreeTimeSlotsHandler.Handle)
    router.POST("/api/create_visit", createVisitHandler.Handle)


    При этом, функция Handle у каждого хендлера это обычно что-то типа func(w http.ResponseWriter, r *http.Request)
    Хендлер уже внутри себя сам читает тело, парсит его из json, потом формирует ответ, итд.

    Хотелось добавить сюда типизацию и какую-то структуру, поэтому я написал
    простой враппер

    type Validatable interface {
    	Validate() error
    }
    
    func Wrap[Req Validatable, Res any](fn func(ctx context.Context, req Req) (Res, error)) httprouter.Handle {
    	handler := func(writer http.ResponseWriter, request *http.Request, _ httprouter.Params) {
    		writeError := func(statusCode int, err error) {
    			writer.WriteHeader(statusCode)
    			_, _ = writer.Write([]byte(err.Error()))
    		}
    
    		var req Req
    
    		bytes, err := io.ReadAll(request.Body)
    		if err != nil {
    			writeError(http.StatusBadRequest, err)
    			return
    		}
    
    		if err := json.Unmarshal(bytes, &req); err != nil {
    			writeError(http.StatusBadRequest, err)
    			return
    		}
    
    		if err := req.Validate(); err != nil {
    			writeError(http.StatusBadRequest, err)
    			return
    		}
    
    		resp, err := fn(request.Context(), req)
    		if err != nil {
    			writeError(http.StatusInternalServerError, err)
    			return
    		}
    
    		respBytes, err := json.Marshal(resp)
    		if err != nil {
    			writeError(http.StatusInternalServerError, err)
    			return
    		}
    		writer.WriteHeader(http.StatusOK)
    		_, _ = writer.Write(respBytes)
    	}
    
    	return handler
    }



    Он берет на себя весь бойлерплейт по парсингу и валидации запроса, формированию ответа, работы с кодами, итд. Причем, через стандартный errors.Is иногда добавлял сюда еще возможность из хэндлера указать врапперу, какой http-код ответа отдавать. Обычно все функции враппера делал под конкретную задачу в конкретном проекте (можно, например, не только json тела парсить, но и урл и хедеры, итд).

    Использование враппера выглядит так.
    Мы пишем хэндлер, используя конкретные типы

    type Handler struct {
    	userService *usersvc.Service
    }
    
    type Request struct {
    	UserID int64 `json:"user_id"`
    }
    
    func (c Request) Validate() error {
    	if c.UserID == 0 {
    		return errors.New("empty user id")
    	}
    	return nil
    }
    
    type Response struct {
    	Name string `json:"name"`
    	Age  int    `json:"age"`
    }
    
    func New(userService *usersvc.Service) *Handler {
    	return &Handler{userService: userService}
    }
    
    func (h Handler) Handle(ctx context.Context, req *Request) (*Response, error) {
    	user, err := h.userService.UserByID(ctx, req.UserID)
    	if err != nil {
    		return nil, err
    	}
    
    	return &Response{
    		Name: user.Name,
    		Age:  user.Age,
    	}, nil
    }



    Через dependency injection даем хэндлеру все источники данных, изолируем хэндлер в отдельном пакете, четко прописываем ему типы Request и Response, пишем валидацию для запроса. Открыв хэндлер, разработчик сразу видит его контракты, весь бойлерплейт во враппере, остается написать только логику.

    В итоге использование такого хэндлера+враппер выглядит так:
    getUserHandler := getuser.New(userSvc)
    
    router := httprouter.New()
    
    router.POST("/api/get_user", wrapper.Wrap(productsHandler.getUserHandler))


    Причем, тут даже не видно, что Wrap() имеет дженерик-параметры, потому что гошка самостоятельно выводит эти параметры из типов Request и Response из хэндлера и проверяет, что у Request есть метод Validate.

    Подобные дженерик-врапперы применял в нескольких разных задачах. Кроме обработки запросов еще была система для запуска фоновых джоб по обработке данных, нужно было положить джобы в один слайс, но при этом, чтобы контракты джоб были типизированы. Поэтому враппером приводил конкретные типы структур из джоб к более универсальному виду с типами в interface{}. Получилось, что и типы все на компиляции проверяются и могу положить все джобы в одну коллекцию.
    Ответ написан
    Комментировать