Unreal Engine 4. Новая сетевая модель: PushModel

Введение Данная статья не история успеха, а скорее руководство «как не надо делать». Весной 2020 для поддержания спортивного тонуса участвовал в студенческом хакатоне (спойлер: заняли 2-е место). Удивительно, но задача из полуфинала оказалась более интересной и сложной чем финальная. Как вы поняли, о ней и своём решении расскажу под катом. Задача Данный кейс был предложен […]

Метапрограммирование в реальной задаче

Введение Данная статья не история успеха, а скорее руководство «как не надо делать». Весной 2020 для поддержания спортивного тонуса участвовал в студенческом хакатоне (спойлер: заняли 2-е место). Удивительно, но задача из полуфинала оказалась более интересной и сложной чем финальная. Как вы поняли, о ней и своём решении расскажу под катом. Задача Данный кейс был предложен […]

Строгая десериализация YAML в Python c библиотекой marshmallow

Исходная задача Необходимо прочитать нетривиальный конфиг из .yaml файла. Структура конфига описана с помощью дата-классов. Необходимо, чтобы при десериализации были выполнены проверки типов, и, если данные невалидны, было брошено исключение. То есть, проще говоря, нужна функция вида: def strict_load_yaml(yaml: str, loaded_type: Type[Any]): """ Here is some magic """ pass И эта функция будет использоваться следующим […]

OAuth 2.0 -> OAuth 2.1. Что дальше?

Архитекторы ничего не выдумывают. Они трансформируют реальность. Алваро Сиза Виэйра Много всего уже сказано и написано про фреймворк авторизации OAuth 2.0 с 2012 года. И, казалось бы, все давно его знают, используют, все должно работать надежно и безопасно. Но, как обычно, на практике все иначе. В работе в реальности приходится сталкиваться с небезопасными реализациями процессов […]

Паттерн MFS для табличных представлений в iOS приложениях

Архитекторы ничего не выдумывают. Они трансформируют реальность. Алваро Сиза Виэйра Много всего уже сказано и написано про фреймворк авторизации OAuth 2.0 с 2012 года. И, казалось бы, все давно его знают, используют, все должно работать надежно и безопасно. Но, как обычно, на практике все иначе. В работе в реальности приходится сталкиваться с небезопасными реализациями процессов […]

STM32F429 + IL9341 = LVGL, DOOM1

Архитекторы ничего не выдумывают. Они трансформируют реальность. Алваро Сиза Виэйра Много всего уже сказано и написано про фреймворк авторизации OAuth 2.0 с 2012 года. И, казалось бы, все давно его знают, используют, все должно работать надежно и безопасно. Но, как обычно, на практике все иначе. В работе в реальности приходится сталкиваться с небезопасными реализациями процессов […]

Проектирование ПО с учетом требований стандартов безопасности

Архитекторы ничего не выдумывают. Они трансформируют реальность. Алваро Сиза Виэйра Много всего уже сказано и написано про фреймворк авторизации OAuth 2.0 с 2012 года. И, казалось бы, все давно его знают, используют, все должно работать надежно и безопасно. Но, как обычно, на практике все иначе. В работе в реальности приходится сталкиваться с небезопасными реализациями процессов […]

Запуск сложных C++ приложений на микроконтроллерах

Сегодня никого не удивить возможностью разрабатывать на C++ под микроконтроллеры. Проект mbed полностью ориентирован на этот язык. Ряд других RTOS предоставляют возможности разработки на С++. Это удобно, ведь программисту доступны средства объектно-ориентированного программирования. Вместе с тем, многие RTOS накладывают различные ограничения на использование C++. В данной статье мы рассмотрим внутреннюю организацию C++ и выясним причины […]

Углублённое руководство по JavaScript: генераторы. Часть 2, простой пример использования

Поведение генераторов, описанное в предыдущей статье, нельзя назвать сложным, но оно точно удивляет и поначалу может выглядеть непонятным. Поэтому вместо изучения новых концепций мы сейчас сделаем паузу и рассмотрим интересный пример использования генераторов. Пусть у нас есть такая функция: function maybeAddNumbers() { const a = maybeGetNumberA(); const b = maybeGetNumberB(); return a + b; } […]

Автоматическое обучение взаимодействию функций с помощью самонастраиваемых нейронных сетей

Поведение генераторов, описанное в предыдущей статье, нельзя назвать сложным, но оно точно удивляет и поначалу может выглядеть непонятным. Поэтому вместо изучения новых концепций мы сейчас сделаем паузу и рассмотрим интересный пример использования генераторов. Пусть у нас есть такая функция: function maybeAddNumbers() { const a = maybeGetNumberA(); const b = maybeGetNumberB(); return a + b; } […]