Блиц-опрос Scala-разработчиков — самые полезные и бесполезные вещи в работе
Смотрите подкаст «Криптонит говорит» о Scala! В нём айтишники обсуждают:
🔹Scala, Java и их перспективы;
🔹как успешно пройти собеседование в айти;
🔹что нужно делать, чтобы стать хорошим программистом;
🔹и когда нейросети смогут делать code review на уровне старшего разработчика и многое другое.
📺 VK Видео
📺 YouTube
📺 Rutube
💬 Подкаст в телеграме
🎵 Яндекс.Музыка
Смотрите и подписывайтесь на подкаст «Криптонит говорит» — обсуждаем айти, искусственный интеллект, языки программирования и криптографию.
Реклама АО НПК «Криптонит» ИНН 9701115253, erid: 2Vtzqw3vMbo
Смотрите подкаст «Криптонит говорит» о Scala! В нём айтишники обсуждают:
🔹Scala, Java и их перспективы;
🔹как успешно пройти собеседование в айти;
🔹что нужно делать, чтобы стать хорошим программистом;
🔹и когда нейросети смогут делать code review на уровне старшего разработчика и многое другое.
📺 VK Видео
📺 YouTube
📺 Rutube
💬 Подкаст в телеграме
🎵 Яндекс.Музыка
Смотрите и подписывайтесь на подкаст «Криптонит говорит» — обсуждаем айти, искусственный интеллект, языки программирования и криптографию.
Реклама АО НПК «Криптонит» ИНН 9701115253, erid: 2Vtzqw3vMbo
Forwarded from Библиотека девопса | DevOps, SRE, Sysadmin
Почему большинство инцидентов происходят ночью?
Если посмотреть на статистику SRE-команд, почти 70% серьёзных инцидентов случаются после 23:00. Причина не в “мистике”, а в том, что ночью сходятся три фактора:
1. Накопленный technical debt
Патчи, которые “временно” залили месяц назад, начинают стрелять именно в момент минимального трафика - когда сервисы активнее пересобираются, переезжают, чистят очереди, крутят бэкапы.
2. Скедуленные задачи
Cron, ETL, бэкапы, реплики - всё это стартует после полуночи. Если что-то где-то неправильно рассчитано, concurrency внезапно уходит в космос.
3. Усталость дежурного
Даже идеальный инженер ночью реагирует медленнее. Отсюда более долгая диагностика, выше вероятность ошибки и неправильного rollback-а.
Как снизить риск?
- Отдельный staging для всех nightly-джобов.
- Автоматический анализ cron-нагрузки перед релизом.
- Progressive Delivery: тёмные релизы, canary, feature flags.
- Аналитика “частоты ночных ошибок” и профилактическая оптимизация.
Самый мощный прием - не выкатывать ночью. Ни один SLA не стоит бессонной ночи и кривого деплоя.
Подпишись 👉@devopslib
Если посмотреть на статистику SRE-команд, почти 70% серьёзных инцидентов случаются после 23:00. Причина не в “мистике”, а в том, что ночью сходятся три фактора:
1. Накопленный technical debt
Патчи, которые “временно” залили месяц назад, начинают стрелять именно в момент минимального трафика - когда сервисы активнее пересобираются, переезжают, чистят очереди, крутят бэкапы.
2. Скедуленные задачи
Cron, ETL, бэкапы, реплики - всё это стартует после полуночи. Если что-то где-то неправильно рассчитано, concurrency внезапно уходит в космос.
3. Усталость дежурного
Даже идеальный инженер ночью реагирует медленнее. Отсюда более долгая диагностика, выше вероятность ошибки и неправильного rollback-а.
Как снизить риск?
- Отдельный staging для всех nightly-джобов.
- Автоматический анализ cron-нагрузки перед релизом.
- Progressive Delivery: тёмные релизы, canary, feature flags.
- Аналитика “частоты ночных ошибок” и профилактическая оптимизация.
Самый мощный прием - не выкатывать ночью. Ни один SLA не стоит бессонной ночи и кривого деплоя.
Подпишись 👉@devopslib
👍3❤1
Челлендж по обработке миллиарда строк на Go: от 1 минуты 45 секунд до 4 секунд
Пару недель назад я прочитал о запавшем мне в душу челлендже по обработке миллиарда строк, поэтому захотел решить его на Go.
Я немного опоздал, соревнования проводились в январе. И на Java. Меня не особо интересует Java, зато давно интересует оптимизация кода на Go.
Этот челлендж был очень прост: обработать текстовый файл названий метеорологических станций и температур, и для каждой станции вывести минимальное, среднее и максимальное значение. Чтобы упростить задачу, было ещё несколько ограничений, однако я проигнорировал те, что относятся только к Java.
https://habr.com/ru/articles/798215/
📲 Мы в MAX
👉 @Bookflow
Пару недель назад я прочитал о запавшем мне в душу челлендже по обработке миллиарда строк, поэтому захотел решить его на Go.
Я немного опоздал, соревнования проводились в январе. И на Java. Меня не особо интересует Java, зато давно интересует оптимизация кода на Go.
Этот челлендж был очень прост: обработать текстовый файл названий метеорологических станций и температур, и для каждой станции вывести минимальное, среднее и максимальное значение. Чтобы упростить задачу, было ещё несколько ограничений, однако я проигнорировал те, что относятся только к Java.
https://habr.com/ru/articles/798215/
👉 @Bookflow
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤1🤷♂1🔥1
Ни одна реализация элементарных функций не соответствует стандарту IEEE 754
Введённый в 1985 году стандарт IEEE-754 для чисел с плавающей запятой был предназначен для решения проблемы разнородности реализаций чисел с плавающей запятой, мешавших портируемости кода, а также для повышения стабильности между платформами.
Он получил широкое применение и многократно пересматривался в течение прошедших лет. Если вы когда-нибудь работали с любыми вещественными числами в своих приложениях, то они, вероятно, отвечали этому стандарту.
Моя работа в течение последнего года заключалась в анализе погрешности различных математических функций, накопления этой погрешности и способов её уменьшения при помощи различных программных паттернов. Одной из исследованных мной тем были базовые математические функции, используемые в функциях активации нейронных сетей, а также способы их аппроксимации для повышения производительности. В процессе работы нам пришлось столкнуться с противодействием со стороны людей, активно стремящихся к корректной реализации математических функций и к соответствию их стандартам, в частности, к соблюдению обеспечения корректности одной наименее значимой единицы измерения (unit in last place, ULP) для элементарных функций.
https://habr.com/ru/companies/ruvds/articles/881698/
📲 Мы в MAX
👉 @Bookflow
Введённый в 1985 году стандарт IEEE-754 для чисел с плавающей запятой был предназначен для решения проблемы разнородности реализаций чисел с плавающей запятой, мешавших портируемости кода, а также для повышения стабильности между платформами.
Он получил широкое применение и многократно пересматривался в течение прошедших лет. Если вы когда-нибудь работали с любыми вещественными числами в своих приложениях, то они, вероятно, отвечали этому стандарту.
Моя работа в течение последнего года заключалась в анализе погрешности различных математических функций, накопления этой погрешности и способов её уменьшения при помощи различных программных паттернов. Одной из исследованных мной тем были базовые математические функции, используемые в функциях активации нейронных сетей, а также способы их аппроксимации для повышения производительности. В процессе работы нам пришлось столкнуться с противодействием со стороны людей, активно стремящихся к корректной реализации математических функций и к соответствию их стандартам, в частности, к соблюдению обеспечения корректности одной наименее значимой единицы измерения (unit in last place, ULP) для элементарных функций.
https://habr.com/ru/companies/ruvds/articles/881698/
👉 @Bookflow
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
std::exception — это базовый класс для всех стандартных исключений в C++Почему стоит наследоваться от std::exception?
• Единообразие в обработке исключений: Когда вы наследуетесь от
std::exception, ваш класс исключения приобретает интерфейс, который делает его совместимым с другими стандартными исключениями•
what() метод: std::exception предоставляет важный метод what(), который возвращает строковое представление исключения. Это позволяет вам предоставлять информативные сообщения об ошибке при обработке исключений• Легкость в поддержке кода: Если вы используете сторонние библиотеки или фреймворки, они также могут ожидать обработку исключений, производных от
std::exception• Стандартные типы исключений:
std::exception имеет несколько стандартных подклассов, таких как std::runtime_error, std::logic_error и другие. Вы можете использовать эти подклассы вместо базового std::exception, чтобы более точно определить характер ошибки👉 @Bookflow
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🔥2
Облачные базы данных: Шпаргалка
В современном мире, основанном на данных, выбор правильной базы данных имеет решающее значение и в то же время сложен. Сейчас облако предлагает больше возможностей для структурированных, полуструктурированных и неструктурированных баз данных, чем когда-либо. Эта шпаргалка поможет выбрать наиболее подходящую для ваших нужд.
Структурированные базы данных📌
Структурированные базы данных организуют данные в предопределенные схемы и модели.
Реляционные базы данных, такие как MySQL и PostgreSQL, хранят данные в таблицах со строками и столбцами.
Колоночные базы данных, такие как Amazon Redshift и Google BigQuery, также имеют структурированную модель данных, но хранят их по-другому, оптимизируя для аналитических запросов.
Преимущества:
- Эффективные SQL-запросы
- Возможность применения ограничений и валидации
- Последовательность там, где это необходимо
Примеры использования: CRM-системы, управление запасами, бухгалтерский учет, аналитика
Полуструктурированные базы данных📌
Полуструктурированные базы данных обеспечивают гибкость, храня данные без соблюдения формальной схемы. Данные часто хранятся в виде JSON или других гибких форматов.
Примеры включают в себя документ-базы данных, такие как MongoDB, графовые базы данных, наподобие Neptune, широкие колоночные хранилища, такие как ScyllaDB, и хранилища ключ-значение, такие как DynamoDB.
Преимущества:
- Гибкость для изменяющихся данных
- Масштабируемость на разных серверах
Примеры использования: Электронная коммерция, ленты социальных сетей, данные IoT
Неструктурированные базы данных📌
Неструктурированные базы данных оптимизированы для хранения и обработки огромных объемов разнородных данных, таких как документы, изображения, видео. Примеры: AWS S3, Azure Blob Storage.
Преимущества:
- Хранение огромных объемов данных
- Высокая масштабируемость
Примеры использования: Медиарепозитории, управление контентом, океаны данных, журнальные данные, резервное копирование.
📲 Мы в MAX
👉 @Bookflow
В современном мире, основанном на данных, выбор правильной базы данных имеет решающее значение и в то же время сложен. Сейчас облако предлагает больше возможностей для структурированных, полуструктурированных и неструктурированных баз данных, чем когда-либо. Эта шпаргалка поможет выбрать наиболее подходящую для ваших нужд.
Структурированные базы данных📌
Структурированные базы данных организуют данные в предопределенные схемы и модели.
Реляционные базы данных, такие как MySQL и PostgreSQL, хранят данные в таблицах со строками и столбцами.
Колоночные базы данных, такие как Amazon Redshift и Google BigQuery, также имеют структурированную модель данных, но хранят их по-другому, оптимизируя для аналитических запросов.
Преимущества:
- Эффективные SQL-запросы
- Возможность применения ограничений и валидации
- Последовательность там, где это необходимо
Примеры использования: CRM-системы, управление запасами, бухгалтерский учет, аналитика
Полуструктурированные базы данных📌
Полуструктурированные базы данных обеспечивают гибкость, храня данные без соблюдения формальной схемы. Данные часто хранятся в виде JSON или других гибких форматов.
Примеры включают в себя документ-базы данных, такие как MongoDB, графовые базы данных, наподобие Neptune, широкие колоночные хранилища, такие как ScyllaDB, и хранилища ключ-значение, такие как DynamoDB.
Преимущества:
- Гибкость для изменяющихся данных
- Масштабируемость на разных серверах
Примеры использования: Электронная коммерция, ленты социальных сетей, данные IoT
Неструктурированные базы данных📌
Неструктурированные базы данных оптимизированы для хранения и обработки огромных объемов разнородных данных, таких как документы, изображения, видео. Примеры: AWS S3, Azure Blob Storage.
Преимущества:
- Хранение огромных объемов данных
- Высокая масштабируемость
Примеры использования: Медиарепозитории, управление контентом, океаны данных, журнальные данные, резервное копирование.
👉 @Bookflow
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2❤1
This media is not supported in your browser
VIEW IN TELEGRAM
DBDiagram
Бесплатный, простой инструмент для построения ER-диаграмм путем простого написания кода.
Предназначен для разработчиков и аналитиков данных.
https://dbdiagram.io/home
📲 Мы в MAX
👉 @Bookflow
Бесплатный, простой инструмент для построения ER-диаграмм путем простого написания кода.
Предназначен для разработчиков и аналитиков данных.
https://dbdiagram.io/home
👉 @Bookflow
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
1 - Индексация:
Проверьте шаблоны запросов вашего приложения и создайте подходящие индексы.
2 - Материализованные представления:
Предварительно вычислите результаты сложных запросов и сохраните их для быстрого доступа.
3 - Денормализация:
Уменьшите количество сложных соединений (join), чтобы улучшить производительность запросов.
4 - Вертикальное масштабирование:
Увеличьте мощность вашего сервера базы данных, добавив больше ЦП, оперативной памяти или хранилища.
5 - Кэширование:
Сохраните часто запрашиваемые данные в более быстром слое хранения, чтобы снизить нагрузку на базу данных.
6 - Репликация:
Создайте реплики вашей основной базы данных на разных серверах для масштабирования чтений.
7 - Шардинг:
Разделите таблицы базы данных на более мелкие части и распределите их по серверам. Используется для масштабирования как записей, так и чтений.
👉 @Bookflow
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥2
This media is not supported in your browser
VIEW IN TELEGRAM
FTXUI
Простая кроссплатформенная библиотека C++ для пользовательских интерфейсов на базе терминала!
• Функциональный стиль
• Простой и элегантный синтаксис
• Создаваемые консольные UI поддерживают навигацию с помощью клавиатуры и мыши
• Поддержка UTF8
• Поддержка анимации
• Поддержка рисования
• Нет зависимостей
• Кроссплатформенность: Linux/MacOS, WebAssembly, Windows
https://github.com/ArthurSonzogni/FTXUI
📲 Мы в MAX
👉 @Bookflow
Простая кроссплатформенная библиотека C++ для пользовательских интерфейсов на базе терминала!
• Функциональный стиль
• Простой и элегантный синтаксис
• Создаваемые консольные UI поддерживают навигацию с помощью клавиатуры и мыши
• Поддержка UTF8
• Поддержка анимации
• Поддержка рисования
• Нет зависимостей
• Кроссплатформенность: Linux/MacOS, WebAssembly, Windows
https://github.com/ArthurSonzogni/FTXUI
👉 @Bookflow
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Как выполнять периодические обновления данных в PostgreSQL?
Для выполнения периодических обновлений данных в PostgreSQL можно использовать несколько подходов, в зависимости от требований к частоте обновлений и архитектуры системы. Вот основные методы:
1. CRON и SQL скрипты
- CRON (или аналогичный планировщик задач) — это системный планировщик задач, который может запускать SQL-скрипты в определенное время или с определенной периодичностью.
- Вы создаете SQL-скрипт, который выполняет необходимые обновления данных, и настраиваете CRON для его запуска.
- Пример команды в CRON:
Этот пример выполняет задачу каждую минуту.
2. pg_cron
-
- Пример:
Это задание выполняет функцию каждый час.
3. pgAgent
-
- Пример задания:
4. Встроенные средства PostgreSQL
- Если задача достаточно простая, и вы хотите обойтись без внешних инструментов, можно использовать механизм LISTEN/NOTIFY или bgworker (бэкграундные воркеры).
- LISTEN/NOTIFY: используется для уведомления процессов о событиях в базе данных. Рабочие процессы могут запускаться при получении уведомления.
- bgworker: позволяет создавать фоновый процесс, который будет периодически выполнять необходимые задачи.
5. Сервисные задачи на стороне приложения
- Если ваше приложение подключается к базе данных PostgreSQL, оно может содержать задачи, которые будут запускать обновления данных через определенные промежутки времени.
- Это подход особенно удобен, если вы хотите, чтобы приложение контролировало выполнение обновлений, а также легко интегрировало бизнес-логику.
6. Использование логических репликаций и триггеров
- В некоторых случаях, вместо периодических обновлений, может быть лучше настроить триггеры или использовать логическую репликацию для обработки изменений в данных.
7. Materialized Views
- Если вам нужно обновлять агрегированные или сложные запросы, можно использовать материализованные представления с автоматическим обновлением.
- Вы можете создать материализованное представление и настроить его автоматическое обновление через CRON или pg_cron:
Заключение
Выбор метода зависит от конкретных требований и доступных инструментов. Если вам нужно периодически выполнять задачи непосредственно в базе данных и с минимальными усилиями,
📲 Мы в MAX
👉 @Bookflow
Для выполнения периодических обновлений данных в PostgreSQL можно использовать несколько подходов, в зависимости от требований к частоте обновлений и архитектуры системы. Вот основные методы:
1. CRON и SQL скрипты
- CRON (или аналогичный планировщик задач) — это системный планировщик задач, который может запускать SQL-скрипты в определенное время или с определенной периодичностью.
- Вы создаете SQL-скрипт, который выполняет необходимые обновления данных, и настраиваете CRON для его запуска.
- Пример команды в CRON:
* * * * * psql -U user -d database -c "CALL your_update_function();"
Этот пример выполняет задачу каждую минуту.
2. pg_cron
-
pg_cron — это расширение для PostgreSQL, которое позволяет планировать задания непосредственно из базы данных, используя SQL-синтаксис для задания расписания.- Пример:
SELECT cron.schedule('0 * * * *', $$CALL your_update_function();$$);
Это задание выполняет функцию каждый час.
3. pgAgent
-
pgAgent — это более сложный планировщик задач, который интегрируется с PostgreSQL. Он позволяет создавать и управлять заданиями через интерфейс PgAdmin или SQL-команды.- Пример задания:
CREATE JOB update_job
STEP 1
WHEN '0 * * * *'
EXECUTE PROCEDURE your_update_function();
4. Встроенные средства PostgreSQL
- Если задача достаточно простая, и вы хотите обойтись без внешних инструментов, можно использовать механизм LISTEN/NOTIFY или bgworker (бэкграундные воркеры).
- LISTEN/NOTIFY: используется для уведомления процессов о событиях в базе данных. Рабочие процессы могут запускаться при получении уведомления.
- bgworker: позволяет создавать фоновый процесс, который будет периодически выполнять необходимые задачи.
5. Сервисные задачи на стороне приложения
- Если ваше приложение подключается к базе данных PostgreSQL, оно может содержать задачи, которые будут запускать обновления данных через определенные промежутки времени.
- Это подход особенно удобен, если вы хотите, чтобы приложение контролировало выполнение обновлений, а также легко интегрировало бизнес-логику.
6. Использование логических репликаций и триггеров
- В некоторых случаях, вместо периодических обновлений, может быть лучше настроить триггеры или использовать логическую репликацию для обработки изменений в данных.
7. Materialized Views
- Если вам нужно обновлять агрегированные или сложные запросы, можно использовать материализованные представления с автоматическим обновлением.
- Вы можете создать материализованное представление и настроить его автоматическое обновление через CRON или pg_cron:
REFRESH MATERIALIZED VIEW CONCURRENTLY your_view;
Заключение
Выбор метода зависит от конкретных требований и доступных инструментов. Если вам нужно периодически выполнять задачи непосредственно в базе данных и с минимальными усилиями,
pg_cron и pgAgent — отличные варианты. Если хотите контролировать задачи с уровня операционной системы, то CRON или системные задачи на стороне приложения будут лучшим решением.👉 @Bookflow
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2❤1
Прошиваем программу не только в начало FLASH памяти STM32
Знаете ли вы куда попадает ваша программа после того, как вы нажали кнопку RUN или DEBUG в IDE? Если да, то как изменить этот адрес или даже выйти за пределы постоянной памяти и прожигаться сразу в оперативную память.
Я работаю в CubeIDE и весь мой интерфейс будет именно из этой среды разработки.
Начнем с ответа на первый вопрос, если использовать стандартные настройки IDE и взять стандартный ST-LINK (не важно оригинал или свисток), то при прожигании микроконтроллера будет очищено нужное количество секторов во FLASH памяти и на их место будет записана программа, причем в самое начало FLASH памяти по адресу 0x08000000.
Тут немного остановимся. Для большинства проектов этого достаточно, программа находится во FLASH памяти, при перезагрузке микроконтроллера ни куда не исчезает и исправно запускается. Проблемы начинаются, когда приходит задача, встроить загрузчик, который будет самостоятельно принимать прошивку по одному из интерфейсов, будь то UART/USART, I2C или CAN и сохранять ее в требуемом месте FLASH памяти, а после перезагрузки должен самостоятельно подготовить и передать управление требуемой программе.
https://habr.com/ru/articles/831016/
📲 Мы в MAX
👉 @Bookflow
Знаете ли вы куда попадает ваша программа после того, как вы нажали кнопку RUN или DEBUG в IDE? Если да, то как изменить этот адрес или даже выйти за пределы постоянной памяти и прожигаться сразу в оперативную память.
Я работаю в CubeIDE и весь мой интерфейс будет именно из этой среды разработки.
Начнем с ответа на первый вопрос, если использовать стандартные настройки IDE и взять стандартный ST-LINK (не важно оригинал или свисток), то при прожигании микроконтроллера будет очищено нужное количество секторов во FLASH памяти и на их место будет записана программа, причем в самое начало FLASH памяти по адресу 0x08000000.
Тут немного остановимся. Для большинства проектов этого достаточно, программа находится во FLASH памяти, при перезагрузке микроконтроллера ни куда не исчезает и исправно запускается. Проблемы начинаются, когда приходит задача, встроить загрузчик, который будет самостоятельно принимать прошивку по одному из интерфейсов, будь то UART/USART, I2C или CAN и сохранять ее в требуемом месте FLASH памяти, а после перезагрузки должен самостоятельно подготовить и передать управление требуемой программе.
https://habr.com/ru/articles/831016/
👉 @Bookflow
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
CppCoreGuidelines
Основные принципы C++ - это набор проверенных рекомендаций, правил и лучших практик по программированию на C++.
https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines
📲 Мы в MAX
👉 @Bookflow
Основные принципы C++ - это набор проверенных рекомендаций, правил и лучших практик по программированию на C++.
https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines
👉 @Bookflow
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1🤮1💩1🤡1🤣1
Анатомия Kubernetes - как это работает изнутри? ☸️
Часто мы используем
1. Control Plane (Панель управления) - «Мозг» кластера 🧠
Это центр принятия решений. Именно здесь определяется, что и где должно работать.
🔴 API Server (в центре): Единая точка входа. Все компоненты общаются только через него (и вы через CLI тоже). Примечание: на схеме иконка подписана как Kube-Scheduler, но функционально и визуально (надпись API) это именно API Server.
🔴 etcd: «Память» кластера. Надежное хранилище типа «ключ-значение», где лежит вся конфигурация и текущее состояние системы.
🔴 Kube-Scheduler: Логист. Решает, на какую именно ноду (узле) запустить новый Pod, исходя из свободных ресурсов.
🔴 Controller Manager: Смотритель. Следит, чтобы текущее состояние кластера совпадало с желаемым (например, если упал под - он его перезапустит).
🔴 Cloud-Controller Manager: Связной с облаком. Управляет ресурсами, специфичными для облачного провайдера (AWS, Azure, GCP).
2. Worker Nodes (Рабочие узлы) - «Мускулы» кластера 💪
Здесь крутятся ваши приложения.
🔴 Pod (Под): Минимальная единица в K8s. Внутри пода живет один или несколько контейнеров.
🔴 Container Runtime (Docker): Движок, который фактически запускает контейнеры.
🔴 Kubelet: Главный агент на узле. Получает задачи от Control Plane и гарантирует, что контейнеры в поде запущены и работают.
🔴 Kube-Proxy: Сетевой регулировщик. Отвечает за сетевые правила и проброс трафика к подам.
3. Kubernetes Extensions - Инструменты 🛠
То, с чем взаимодействуем мы или системы мониторинга:
🔴 CLI: Консольная утилита (
🔴 Web Admin UI: Дашборд для визуального управления.
🔴 DNS: Для обнаружения сервисов внутри кластера.
🔴 Monitoring: Сбор метрик ресурсов.
💡Control Plane командует, Worker Nodes исполняют, а Extensions помогают нам этим управлять.
Сохраняй шпаргалку, чтобы не путаться в компонентах! 👇
#devops #kubernetes #k8s #architecture #docker
📲 Мы в MAX
👉 @Bookflow
Часто мы используем
kubectl, не задумываясь, что происходит «под капотом». На этой схеме отлично разложено устройство кластера Kubernetes. Давайте разберем три главных уровня архитектуры.1. Control Plane (Панель управления) - «Мозг» кластера 🧠
Это центр принятия решений. Именно здесь определяется, что и где должно работать.
2. Worker Nodes (Рабочие узлы) - «Мускулы» кластера 💪
Здесь крутятся ваши приложения.
3. Kubernetes Extensions - Инструменты 🛠
То, с чем взаимодействуем мы или системы мониторинга:
kubectl).💡Control Plane командует, Worker Nodes исполняют, а Extensions помогают нам этим управлять.
Сохраняй шпаргалку, чтобы не путаться в компонентах! 👇
#devops #kubernetes #k8s #architecture #docker
👉 @Bookflow
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
🔌 API против SDK: В чем реальная разница?
Мы часто слышим эти аббревиатуры вместе, но это не одно и то же. Давайте разберем шпаргалку с картинки.
1️⃣ API (Application Programming Interface)
На картинке сверху.
Это «мессенджер». Набор правил, по которым одна программа может попросить что-то у другой.
🔴 Задача: Обеспечить общение (To Communicate).
🔴 Как это работает: Вы отправляете запрос (Request) на конкретный адрес (Endpoint) с определенными параметрами. Сервер отвечает (Response) данными (обычно JSON) или кодом ошибки.
🔴 Пример: Ваше приложение доставки еды «стучится» в Google Maps API, чтобы просто показать точку на карте. Оно не строит карту само, оно просит её у Google.
2️⃣ SDK (Software Development Kit)
На картинке снизу.
Это «ящик с инструментами». Полноценный комплект для создания приложений под конкретную платформу (Android, iOS, Windows).
🔴 Задача: Дать инструменты для стройки (Tool Box to Build Apps).
🔴 Что внутри: SDK - это «старший брат». Он гораздо больше и обычно включает в себя API, а также библиотеки кода, документацию, дебаггеры и примеры.
🔴 Пример: Чтобы написать приложение под Android на Kotlin, вам нужен Android SDK. Вы берете этот чемоданчик, достаете оттуда готовые кнопки, окна и инструменты для вызова API.
💡 Главное отличие в одной фразе:
API - это интерфейс для взаимодействия с сервисом (как меню в ресторане), а SDK - это набор инструментов для создания чего-то нового (как полностью оборудованная кухня).
#dev #api #sdk #learning #coding #architecture
📲 Мы в MAX
👉 @Bookflow
Мы часто слышим эти аббревиатуры вместе, но это не одно и то же. Давайте разберем шпаргалку с картинки.
1️⃣ API (Application Programming Interface)
На картинке сверху.
Это «мессенджер». Набор правил, по которым одна программа может попросить что-то у другой.
2️⃣ SDK (Software Development Kit)
На картинке снизу.
Это «ящик с инструментами». Полноценный комплект для создания приложений под конкретную платформу (Android, iOS, Windows).
💡 Главное отличие в одной фразе:
API - это интерфейс для взаимодействия с сервисом (как меню в ресторане), а SDK - это набор инструментов для создания чего-то нового (как полностью оборудованная кухня).
#dev #api #sdk #learning #coding #architecture
👉 @Bookflow
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥5
This media is not supported in your browser
VIEW IN TELEGRAM
Как выполняются SQL-запросы 👨💻
Порядок выполнения SQL-запроса определяет последовательность выполнения различных частей запроса SQL. Этот порядок важен, потому что он определяет, как данные фильтруются, группируются и упорядочиваются.
Вот упрощённое объяснение порядка выполнения SQL:
🔴 FROM / JOIN - оператор
🔴 WHERE - оператор
🔴 GROUP BY - оператор
🔴 HAVING - оператор
🔴 SELECT - оператор
🔴 DISTINCT - ключевое слово
🔴 ORDER BY - оператор
🔴 LIMIT - оператор
📲 Мы в MAX
👉 @Bookflow
Порядок выполнения SQL-запроса определяет последовательность выполнения различных частей запроса SQL. Этот порядок важен, потому что он определяет, как данные фильтруются, группируются и упорядочиваются.
Вот упрощённое объяснение порядка выполнения SQL:
FROM указывает таблицы, из которых будут извлечены данные. JOIN может использоваться для объединения данных из нескольких таблиц.WHERE используется для фильтрации данных по заданным условиям.GROUP BY группирует данные по одной или нескольким колонкам.HAVING фильтрует уже сгруппированные данные по условиям.SELECT определяет столбцы, которые будут возвращены в результат.DISTINCT используется для возврата только уникальных строк.ORDER BY сортирует результаты по возрастанию или убыванию.LIMIT ограничивает количество возвращаемых строк.👉 @Bookflow
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥3
Media is too big
VIEW IN TELEGRAM
Сборка C++ проектов. Оптимизации компилятора. Inline, constexpr, alignment. Game Engine серии
0:00:00 - Введение
0:02:26 - Дизассемблер
0:09:31 - Общие оптимизации
0:20:46 - Inline
0:35:24 - Constexpr
0:45:28 - Compile-time raytracer
0:52:40 - Internal vs. external linkage
0:55:18 - Выравнивание структур
1:06:46 - Pragma optimize
источник
📲 Мы в MAX
👉 @Bookflow
0:00:00 - Введение
0:02:26 - Дизассемблер
0:09:31 - Общие оптимизации
0:20:46 - Inline
0:35:24 - Constexpr
0:45:28 - Compile-time raytracer
0:52:40 - Internal vs. external linkage
0:55:18 - Выравнивание структур
1:06:46 - Pragma optimize
источник
👉 @Bookflow
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Media is too big
VIEW IN TELEGRAM
Стив Джобс полная биография и история успеха
Это видео представляет собой подробный биографический обзор, посвященный жизни и профессиональным достижениям Стива Джобса.
В видео освещаются ключевые этапы его пути: от рождения в Сан-Франциско и воспитания в приемной семье до создания таких технологических гигантов, как Apple и Pixar. Особое внимание уделяется истории разработки революционных продуктов, включая Macintosh, iPod и iPhone, которые изменили индустрию персональной электроники.
Так же мы расскажем про личную жизнь предпринимателя, его кратковременный уход из Apple в NeXT и триумфальное возвращение в компанию. Завершается обзор описанием его наследия, многочисленных наград и мирового признания после смерти в 2011 году. Это комплексное описание позволяет понять вклад Джобса в современную культуру и мировую экономику.
📺 Смотреть на youtube
📲 Мы в MAX
👉 @Bookflow
Это видео представляет собой подробный биографический обзор, посвященный жизни и профессиональным достижениям Стива Джобса.
В видео освещаются ключевые этапы его пути: от рождения в Сан-Франциско и воспитания в приемной семье до создания таких технологических гигантов, как Apple и Pixar. Особое внимание уделяется истории разработки революционных продуктов, включая Macintosh, iPod и iPhone, которые изменили индустрию персональной электроники.
Так же мы расскажем про личную жизнь предпринимателя, его кратковременный уход из Apple в NeXT и триумфальное возвращение в компанию. Завершается обзор описанием его наследия, многочисленных наград и мирового признания после смерти в 2011 году. Это комплексное описание позволяет понять вклад Джобса в современную культуру и мировую экономику.
👉 @Bookflow
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3🤣1
🖥 Пишем свою операционную систему с нуля. Серьезно.
Многим кажется, что создание ОС это черная магия, доступная только избранным инженерам из Microsoft или создателям Linux. Но на самом деле, разобраться в том, как "железо" оживает после нажатия кнопки питания, может каждый разработчик.
На GitHub лежит легендарный репозиторий os-tutorial, который буквально за руку проведет вас от пустого файла до работающего ядра.
Это не теоретический учебник на 1000 страниц. Это набор последовательных шагов (от 01 до конца), где каждый новый урок наслаивается на предыдущий. Вы начинаете с того, что учите компьютер выводить "Hello World" без всякой ОС, и заканчиваете написанием простейшей файловой системы.
Что вы изучите на практике:
🔴 Boot sector: Как работает загрузочный сектор и почему в нем всего 512 байт.
🔴 Assembly: Основы ассемблера x86 (без боли, только необходимое).
🔴 Режимы процессора: Переход из 16-битного Real Mode в 32-битный Protected Mode.
🔴 C Kernel: Как запустить C-код на "голом" железе.
🔴 Драйверы: Написание простых драйверов для экрана и клавиатуры.
💡 Главная фишка: Автор объясняет почему мы делаем то или иное действие, а не просто дает код для копирования. Это идеальный способ понять, как работает компьютер "под капотом".
Для старта не нужны глубокие знания, только Linux (или WSL), QEMU и желание разобраться.
🔗 Ссылка на репозиторий: https://github.com/cfenollosa/os-tutorial
#github #os #lowlevel #assembly #cpp #tutorial
📲 Мы в MAX
👉 @Bookflow
Многим кажется, что создание ОС это черная магия, доступная только избранным инженерам из Microsoft или создателям Linux. Но на самом деле, разобраться в том, как "железо" оживает после нажатия кнопки питания, может каждый разработчик.
На GitHub лежит легендарный репозиторий os-tutorial, который буквально за руку проведет вас от пустого файла до работающего ядра.
Это не теоретический учебник на 1000 страниц. Это набор последовательных шагов (от 01 до конца), где каждый новый урок наслаивается на предыдущий. Вы начинаете с того, что учите компьютер выводить "Hello World" без всякой ОС, и заканчиваете написанием простейшей файловой системы.
Что вы изучите на практике:
💡 Главная фишка: Автор объясняет почему мы делаем то или иное действие, а не просто дает код для копирования. Это идеальный способ понять, как работает компьютер "под капотом".
Для старта не нужны глубокие знания, только Linux (или WSL), QEMU и желание разобраться.
🔗 Ссылка на репозиторий: https://github.com/cfenollosa/os-tutorial
#github #os #lowlevel #assembly #cpp #tutorial
👉 @Bookflow
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8❤2👍2🤣1
Media is too big
VIEW IN TELEGRAM
С++ фреймворк для описания пайплайнов распределенных вычислений
Огромное количество С++ кода в Яндексе можно описать словами «распределенные вычисления». Доклад посвящен активно разрабатываемому сейчас С++ фреймворку, вдохновленному библиотеками std::ranges и Apache Beam. Этот фреймворк позволяет достаточно компактно и просто описывать такие процессы и запускать их в MapReduce-режиме для обработки таблиц данных или в real-time режиме для обработки бесконечных потоков (очередей) данных.
Доклад не предполагает знакомства с какими-либо специфичными технологиями. Он будет полезен разработчикам и пользователям различных распределенных систем обработки данных и тем, кто интересуется этой темой.
источник
📲 Мы в MAX
👉 @Bookflow
Огромное количество С++ кода в Яндексе можно описать словами «распределенные вычисления». Доклад посвящен активно разрабатываемому сейчас С++ фреймворку, вдохновленному библиотеками std::ranges и Apache Beam. Этот фреймворк позволяет достаточно компактно и просто описывать такие процессы и запускать их в MapReduce-режиме для обработки таблиц данных или в real-time режиме для обработки бесконечных потоков (очередей) данных.
Доклад не предполагает знакомства с какими-либо специфичными технологиями. Он будет полезен разработчикам и пользователям различных распределенных систем обработки данных и тем, кто интересуется этой темой.
источник
👉 @Bookflow
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3