• Можно ли в одном микросервисе использовать Postgres и MongoDB?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Технически можно, но вряд ли нужно.
    Ответ написан
    5 комментариев
  • Как сделать свой почтовый ящик на flask?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Flask
    Седой и строгий
    Flask - это web-фреймворк, а приём и отправка почты осуществляются по протоколам POP, IMAP и SMTP, так что никак. Можете разве что web-интерфейс для почтовых сервисов написать.
    Ответ написан
    Комментировать
  • Подойдет ли backend на python?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    В этой постановке выглядит так, что подойдёт любой язык программирования и любой фреймворк.
    Ответ написан
    1 комментарий
  • Опасно ли не закрыть сокет сервера или клиента в Python?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Хэндлеры, хоть сокетов, хоть файлов - это конечный ресурс, а ОС и интерпретатор не дают вам никаких гарантий его автоматического освобождения. Так что если у вас интенсивно работающее приложение, то оно может в какой-то момент поставить раком машину, на которой работает. Готовы ли вы принять этот риск ради возможности говнокодить - вопрос к вам.
    Ответ написан
    5 комментариев
  • Почему в Go вакансиях требование знания PHP?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Или это просто такое количество кодовой базы на PHP накопилось, которую все дружно решили переписывать на Go

    Скорее всего.

    если да, то почему именно на Go?

    Если компания решилась вложиться в переписывание продукта на другом языке, то у неё на это точно очень веские причины, вероятнее всего - проблемы производительности. В этом случае Go - очевидный выбор. Python, Ruby и JS не дадут никакого выигрыша относительно PHP. Хоть на языках из мира jvm и .net можно писать высокопроизводительный софт, но они скорее решают проблемы сложности огромных кодовых баз. С++ и Rust очень сложны и для прикладного софта применяются только в крайнем случае. Всякая экзотика, типа Erlang, Elixir и Haskell - это вообще редкий случай в энтерпрайзе. Go же одновременно очень прост и ориентирован на высокую производительности.
    Ответ написан
    7 комментариев
  • Стоит ли делать отдельный микросервис для Баз данных?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Кто то счетает это хорошей идеей, как возможность связать все сервисы

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

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Ну, Netflix писали, что у них один узел стримит как раз до 40 Гбит/сек. Сколько все ЦОДы отдают - представить страшно.
    Ответ написан
    Комментировать
  • Про асинхронность & многопоточность & мультипроцессинг в программировании?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Многопоточность
    Седой и строгий
    С терминологией в этой области у многих путаница. Ситуацию усложняет то, что одни и те же термины могут по-разному использоваться в разных контекстах и разных средах. Например самый общий термин "асинхронность" в общем смысле синоним многозадачности, то есть одновременного выполнения произвольного количества задач. Но часто под "асинхронностью" подразумевают мультиплексирование неблокирующихся сокетов в цикле событий. Конкурентность в контексте выполняемой работы - это одновременное выполнение разных задач. Параллельность в том же контексте - это одновременное выполнение одной задачи на разных данных. В контексте же того, как задачи выполняются, первое может означать, что асинхронность выполнения задач лимитировано конкурентным доступом к некому общему ресурсу, например процессору, а второе - возможность задач выполняться независимо друг от друга, например на разных ядрах. Запускать асинхронные задачи можно различными способами:
    1. В отдельных процессах, что обычно называют мультипроцессингом, и это как раз то, что делает Celery;
    2. В отдельных потоках, что называются многопоточностью;
    3. В сопрограммах или легковесных потоках, управляемых циклом событий, что часто называют асинхронностью, как я уже писал.
    4. На GPU;
    5. На разных машинах, что обычно происходит в распределённых системах.

    Первый вопрос мой состоит вот в чем: в асинхронном коде задачи как бы не выполняются абсолютно параллельно. Они выполняются по очереди, просто не приостанавливая главный поток, как в синхронном коде. А вот многопоточные и мультипроцессорные программы действительно выполняются параллельно (? или не совсем ?).

    С этим поможет разобраться, во-первых, понимание кооперативной и совместной или вытесняющей многозадачности, а во-вторых, понимание того, что многозадачность реализована на каждом уровне абстракции, от железа и ядра операционной системы до прикладного кода. В модели кооперативной многозадачности задачи самостоятельно отдают друг другу управление, когда достигают некоторой точки, в которой продолжить работу не могут. Например, при ожидании поступления данных из сети. В вытесняющей многозадачности есть некий планировщик, который решает какую из задач остановить, а какую запустить и старается распределить процессор между задачами примерно поровну. То, что называют асинхронным кодом, обычно использует кооперативную многозадачность. Если грубо, где-то в глубине среды исполнения крутится бесконечный цикл, на каждой итерации которого запускается одна из сопрограмм, работает пока не решит отпустить управление, после чего происходит следующая итерация и запуск следующей сопрограммы. Тонкость в том, что например питонячий цикл событий крутится внутри потока, который выполняется внутри процесса интерпретатора, который вместе с другими процессами в системе делит процессор под управлением системного планировщика. Так что некая асинхронная функция в вашем коде выполняется одновременно и кооперативно, и совместно. Её так же, как и любой поток в любом процессе может остановить системный планировщик, чтобы отдать процессор другой задаче. Абсолютной параллельности добиться в принципе невозможно, даже если у вас будет тысяча ядер, всё равно выполняемые на них задачи будут останавливаться, как минимум механизмом когерентности кэшей.
    Ответ написан
    Комментировать
  • Есть ли альтернатива декораторам из Python в Java?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    В Java паттерн декоратор тоже работает. Хотя больше на питоновский вариант похожи аспекты АОП.
    Ответ написан
    Комментировать
  • Каждый раз создается новый бин. Почему?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Java
    Седой и строгий
    Это не так работает. Фактически внедряется в контроллер не сам бин, а прокси-объект, который в каждом запросе указывает на разный экземпляр LoginProccesor.
    Ответ написан
    3 комментария
  • Парсится только часть страницы. Как парсить всю страницу?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Добро пожаловать в современный web, где контент уже больше пятнадцати лет формируется динамически с помощью JavaScript, который BeautifulSoup выполнять не умеет.
    Ответ написан
    Комментировать
  • Как работает Jinja?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Jinja
    Седой и строгий
    Jinja, как и любой другой шаблонизатор, выполняется на бэкенде. Конкретно Jinja ещё и про html не знает вообще ничего, для него шаблон - это набор инструкций и какой-то текст, а результат работы - просто строка.
    Ответ написан
    Комментировать
  • PostgreSQL ON CONFLICT неожиданный токен?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега PostgreSQL
    Седой и строгий
    Потому что вы пытаетесь выполнить этот запрос на сервере MySQL.
    Ответ написан
    Комментировать
  • Как добавить jar с требуемым классом при ошибке ClassNotFoundException?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Java
    Седой и строгий
    Не надо добавлять ничего на исключениях, надо почитать про модульность.
    Ответ написан
    2 комментария
  • Где взять бэкенд для фронтенд учебного проекта?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Ответ написан
    Комментировать
  • Generic(и) или Pydantic для типизации?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Хочешь типизации, используй соответствующий ЯП.
    Ответ написан
  • Куда дальше расти сисадмину?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Во-первых, не сидеть по пять лет в компаниях, кроме случаев, когда все пять лет идёт интенсивный профессиональный рост и ценный стаж. Во-вторых, каждого нового работодателя искать крупнее предыдущего. В-третьих, использовать любую возможность для получения ценного опыта, практически всегда есть, что улучшить в системах заказчика. Наконец, не надо перегорать от того, что у заказчика нет потребности в том, что вам интересно и полезно. Как-то покрепче психику надо иметь.
    Ответ написан
    3 комментария
  • Куда двигаться дальше, чтобы создать web приложение?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Java
    Седой и строгий
    Чем больше знаешь, тем больше программист. Хороший разработчик Spring знает стандарты Java EE.
    Ответ написан
    Комментировать