Посты | OTUS
Socket backlog

Linux_Deep_21-5020-e6199d.09_site.png

Преамбула: как сервер принимает подключения?

Сервер делает так: listen_socket_fd = socket(AF_INET, SOCK_STREAM, 0) – создаём сокет; setsockopt(listen_socket_fd, _flag_, _value_) – настраиваем его (необязательно); bind(listen_socket_fd, _address_) – привязываем адрес, где будем слушать; listen(listen_socket_fd, **_backlog_size_**) – говорим, что это «слушающий сокет»; int connected_socket_fd = accept(listen_socket_fd, NULL, 0) – садимся и ждём клиентов.

Миграция NONCDB в PDB

SUBD_Deep_14-5020-6ebc59.09_site.png

По итогам апгрейда с 11 на 12 логичным показался шаг превращения базы в pluggable. Казалось бы, три простых действия — и проблема решена. Но во время миграции вылез ряд нетривиальных ошибок.

CDI Interceptors

JavaEE_Deep_12-5020-1ade4a.09_site.png

В спецификации CDI предусмотрен механизм «перехватчиков», который позволяет реализовывать в прикладном коде приёмы аспектно-ориентированного программирования. Иначе говоря, разработчику становится доступна сквозная функциональность (cross cutting concerns), то есть прежде, чем обратиться к некоторому методу CDI-бина, у программиста появляется возможность выполнить предобработку, сам бизнес-метод и постобработку.

Для этих целей и существует механизм CDI Interceptors, причём применяется он не только для спецификации CDI, но и активно используется в технологии Enterprise JavaBeans.

Backup на Google Drive

Linux_Deep_20-5020-d25c24.09_site.png

Была поставлена задача — организовать резервное копирование на Google Drive. Анализ имеющихся решений в интернете не сильно порадовал.

google-drive-ocamlfuse — устанавливает кучу разного непонятного софта и требует браузер для своей работы, что несколько неприменимо к серверным системам.

Знакомство с преподавателем: Дмитрий Шебордаев

Cplus_Deep_23.11_site-5020-596359.png

За плечами Дмитрия Шебордаева более чем 20-летний опыт работы сначала разработчиком, а потом и руководителем. Он закончил «Московский государственный университет экономики, статистики и информатики» (МЭСИ) по специальности «Прикладная математика» в 1997 году. Будучи студентом последних курсов, работал в ЦГЭ программистом С++, где занимался созданием внутреннего языка, обработкой каротажных данных и анализом массивных объемов информации.

Расширения и настройки VS Code для DevOps-специалистов

DevOps_Deep_11.3_site-5020-223cd0.png

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

О новом подходе к интеграции TravisCI с GitHub

DevOps_Deep_6.11_site-5020-4ad3ad.png

В мае 2018 года разработчики TravisCI анонсировали объединение коммерческой и Open Source версий. Теперь, чтобы добавить TravisCI в свой проект на гитхабе, нужно использовать не Services, как раньше, а GitHub Marketplace.

Trunk-based Development

DevOps_Deep_11-5020-1f219d.09_site.png

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

Синхронная асинхронность в C++

С___Deep_10-5020-8d2073.09_site.png

Наверняка все, кто изучал старый добрый стандарт C++11, знают о существовании в стандартной библиотеке вызова std::async, который позволяет выполнить некий код асинхронно (более точно – поведение указывается первым параметром вызова).

Согласно документации, вызов с параметром std::launch::async обещает выполнить пользовательский код в отдельном потоке. Посмотрим на приведённый ниже код.

Популярное
Сегодня тут пусто