Pull to refresh
1
0

Пользователь

Send message

300 книг для разработчиков игр: обновление Gamedev библиотеки

Level of difficulty Easy
Reading time 12 min
Views 20K

С Новым Годом уважаемые читатели! Год назад я публиковал подборку из 150-ти книг для тех, кто делает игры и в ней я обещал, что буду постоянно обновлять ее и добавлять в нее новые книги. Время не заставило себя ждать и количество книг в подборке увеличилось в двое и если вы ищите что почитать, то заходите или добавляйте в закладки!

Читать далее...
Total votes 12: ↑10 and ↓2 +8
Comments 0

Прекратите клепать базы данных

Reading time 15 min
Views 62K

В жизни каждого инженера-фронтендера наступает момент, когда осознаёшь: далее не обойтись без кэширования данных из API. Всё может начаться с самых невинных вещей: сохраняем предыдущую страницу с данными, чтобы кнопка «Назад» срабатывала мгновенно; реализуем простенькую логику отмены действия или обеспечиваем слияние нескольких состояний от различных запросов к API. Но все мы знаем, чем такое кончается. Один за другим возникают запросы на новые фичи, и вскоре мы уже не покладая рук реализуем кэши данных, индексы для работы вручную, оптимистические мутации и рекурсивную инвалидацию кэша.

Эти фичи явственно смахивают на внутренние механизмы баз данных. Действительно, в любом достаточно сложном клиентском приложении программисту непременно придётся реализовывать такое множество фич для управления данными, что эта работа будет напоминать построение предметно-ориентированной базы данных. Такая дополнительная сложность удваивается в каждом проекте, над которым мы работаем, поэтому приходится тратить время на решение бизнес-проблем, а радовать пользователя – уже как успеем.

Поэтому сегодня предлагаю вам составить мне компанию – и мы вместе рассмотрим распространённые паттерны работы с данными приложений, а также разберёмся, как они соотносятся с фичами баз данных. Далее мы рассмотрим решения, которые могли бы стать альтернативами этим паттернам – например, как сделать в клиентской части оптимизированный стек базы данных, который позволил бы нам сосредоточиться на разработке приложения, а не на мелкой возне с данными.

Читать далее
Total votes 49: ↑43 and ↓6 +37
Comments 45

TypeScript: infer и conditional types. Продвинутый TS на примерах

Level of difficulty Medium
Reading time 4 min
Views 19K

Разбираемся, что же такое conditional types и как написать свои утилиты, такие как ReturnType, InstanceType, NonNullable и др., при помощи ключевых слов infer и extends.

Читать далее
Total votes 7: ↑7 and ↓0 +7
Comments 3

Перемещение частиц по 3D-геометрии

Level of difficulty Medium
Reading time 5 min
Views 2.8K

В данной статье я постараюсь рассказать каким образом можно реализовать движение объектов по поверхности 3D геометрии.

Читать далее
Total votes 24: ↑24 and ↓0 +24
Comments 5

Разбираемся с FSD — самой надёжной архитектурой для фронтенда

Reading time 7 min
Views 31K
image

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

Вот почему в этой статье мы хотим рассказать вам об архитектуре FSD (Feature-Sliced Design, дословно «послойное проектирование фич»), одной из самых современных, надёжных и спроектированной специально для фронтенд-проектов. Она подходит почти для любых бизнес-условий, позволяет решать повседневные проблемы и интуитивно понятна разработчикам-новичкам.

В данной статье мы разберём основы этого подхода и сообщим вам необходимый минимум знаний, позволяющий с ней работать. Конечно же, в конце статьи мы добавим ссылку на оригинальную документацию. Довольно слов, начнём!
Читать дальше →
Total votes 11: ↑11 and ↓0 +11
Comments 10

Учимся писать сложные Typescript типы на примере роутинга в React

Level of difficulty Medium
Reading time 12 min
Views 16K

Вы используете TypeScript, но впадаете в ступор перед, когда видите типы в сторонних библиотеках? Generics, generic constraint, infer, rest infer, conditional и recursive types, satisfies вызывают головную боль? Мы постараемся снизить градус сложности и напишем типы для роутинга в React приложении. Данный материал будет полезен как фронтендерам, так и бекендерам.

Хочу писать типы как профессионал
Total votes 15: ↑15 and ↓0 +15
Comments 0

Немного о безопасности Kubernetes

Reading time 8 min
Views 6.6K

Сегодняшняя статья будет посвящена обеспечению безопасности Kubernetes. Мы рассмотрим специфику защиты Kubernetes, и начнем мы с рассмотрения вопросов безопасности контейнеров.  

Читать далее
Total votes 10: ↑10 and ↓0 +10
Comments 0

Шаблон backend сервера на Golang — часть 3 (Docker, Docker Compose, Kubernetes (kustomize)

Level of difficulty Hard
Reading time 27 min
Views 8.3K

Шаблон backend сервера на Golang — часть 3 (Docker, Docker Compose, Kubernetes (kustomize)


Схема развертывания в Kubernetes


Первая часть шаблона посвящена HTTP серверу.


Вторая часть шаблона посвящена прототипированию REST API.


Третья часть посвящена развертыванию шаблона в Docker, Docker Compose, Kubernetes (kustomize).


Четвертая часть будет посвящена развертыванию в Kubernetes с Helm chart и настройке Horizontal Autoscaler.


Пятая часть посвящена оптимизации Worker pool и особенностям его работы в составе микросервиса, развернутого в Kubernetes.


Для корректного развертывания в Kubernetes, в шаблон пришлось внести изменения:


  • способа конфигурирования — YAML, ENV, Kustomize
  • подхода к логированию — переход на zap
  • способа развертывания схемы БД — переход на liquibase
  • добавление метрик prometheus

Ссылка на новый репозиторий.


Шаблон goapp в репозитории полностью готов к развертыванию в Docker, Docker Compose, Kubernetes (kustomize), Kubernetes (helm).


Настоящая статья не содержит детального описание используемых технологий


Содержание


  1. Изменение подхода к конфигурированию
  2. Добавление метрик prometheus
  3. Изменение подхода к логированию
  4. Развертывание схемы БД
  5. Сборка Docker image
  6. Сборка Docker-Compose
  7. Схема развертывания в Kubernetes
  8. Подготовка YAML для Kubernetes
  9. Kustomization YAML для Kubernetes
  10. Тестирование Kubernetes с kustomize
Читать дальше →
Total votes 1: ↑1 and ↓0 +1
Comments 0

Пример микросервисной архитектуры с Saga на MassTransit

Reading time 9 min
Views 15K

Привет, Хабр! В общем работаю я значит Архитектором Программных Решений. Мы тут монолиты на микросервисы переводим поэтому я решил для наших разработчиков написать пример проекта с сагой и за одно может оно и вам понадобиться поэтому выложил сюда. Статья будет дополняться по мере поступления вопросов от вас и от наших разработчиков

Читать далее
Total votes 15: ↑8 and ↓7 +1
Comments 25

Как за день потерять 30% онлайна и за два месяца сделать батлрояль

Reading time 18 min
Views 27K

Однажды в своем PvP-шутере мы за один день потеряли 30% от 60 тысяч одновременного онлайна. Это был 2018-й, в тот день на iOS вышел Fortnite. И хотя хайп был уже около года, а PUBG регулярно бил рекорды, без королевской битвы нам жилось вполне спокойно. Но тут стало очевидно, что батлрояль нельзя игнорировать, игрокам он нравится и нужно разрабатывать свой.

За два месяца мы проделали много интересной и сложной работы. Например, сделали свой редактор террейна, чтобы отрисовывать ландшафт не в 500 тысяч треугольников, как это делал Unity Terrain, а всего в 30 тысяч. Или написали мешбейкер, сократив количество запросов на отрисовку с 800 до 100, а освещение научились запекать за 5 минут вместо 30 часов. 

И это не говоря уже об огромном количестве разных оптимизаций ассетов, подгрузки объектов и так далее. Обо всем этом и многом другом подробно расскажу под катом.

Читать далее
Total votes 66: ↑66 and ↓0 +66
Comments 20

Еще пять инструментов против читеров на мобильном проекте с DAU 1 млн пользователей

Reading time 10 min
Views 8.5K

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

Про «первые» пять решений — обфускацию, хранение данных, миграцию прогресса и систему бана — шла речь в этой статье. Сегодня расскажу про остальные, а именно: 

• Защита от измененных версий.
• Photon Plugin.
• Серверная валидация инаппов.
• Защита от взлома оперативной памяти.
• Собственная аналитика.

И немного про то, почему так важен был одновременный релиз всех решений.

Читать далее
Total votes 41: ↑41 and ↓0 +41
Comments 10

VueUse — обязательная библиотека для Vue 3

Reading time 6 min
Views 13K

Для тех, кто незнаком с этой библиотекой, советую попробовать, так она может де-факто стать стандартом для использования в проектах на Vue 3, как, например, в свое время была библиотека lodash для почти любых проектов на js.

Остальные наверное уже успели заценить весь обширный функционал, который она предоставляет. Некоторые уже использовали ее на Vue 2, но далеко не все новые функции поддерживают старую версию. Арсенал библиотеки впечатляет, тут и простые утилиты вроде клика вне элемента, и различные интеграции с Firebase, Axios, Cookies, QR, локальным хранилищем, браузером, RxJS, анимации, геолокации, расширения для стандартных Vue-хуков, медиа-плеер и многое другое. Среди спонсоров отмечен сам Эван Ю, что как бы намекает. Библиотека регулярно получает обновления, баги закрываются, а сообщество растет. В общем у нее есть все для успеха.

Update: Исправлен баг очистки предыдущей истории изменений.
Update 2: Добавлен более актуальной код примеров.

Читать далее
Total votes 16: ↑10 and ↓6 +4
Comments 17

Мои machine learning тулы для инвестирования

Reading time 17 min
Views 35K

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

Читать далее
Total votes 55: ↑54 and ↓1 +53
Comments 39

Как пересчитать электронную таблицу

Reading time 13 min
Views 6.3K
Предположим, я заказываю буррито для двоих друзей и хочу рассчитать общую стоимость заказа:



Поток данных в этой таблице немного сложно проследить, поэтому вот эквивалентная диаграмма, которая представляет таблицу в виде графа:



Округляем стоимость буррито El Farolito super vegi до 8 долларов, поэтому при доставке стоимостью 2 доллара общая сумма составит 20 долларов.
Читать дальше →
Total votes 22: ↑21 and ↓1 +20
Comments 6

10 антипаттернов деплоя в Kubernetes: распространенные практики, для которых есть другие решения

Reading time 21 min
Views 11K

Команда Kubernetes aaS от Mail.ru Group продолжает серию переводов о правильном использовании Kubernetes. В этот раз — об антипаттернах разработки на Kubernetes с рекомендациями, как сделать по-другому.

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

В этой статье рассмотрим десять распространенных практик развертывания Kubernetes, для которых есть другие решения. Автор не вдается в детали практик, поскольку реализация может различаться у разных пользователей.

Читать далее
Total votes 39: ↑38 and ↓1 +37
Comments 12

Приседания по программе Пола Уэйда

Reading time 22 min
Views 48K

image


Техника / как выполнять


Правило первое: правильная постановка ног


Перед началом приседаний надо посмотреть на позицию ног. Также как ладони продолжают руки, так и от положения ступней зависит позиция ног. Начинайте, расположив ступни симметрично с носками развёрнутыми наружу под углом 30-40 градусов. Однако, продолжайте экспериментировать, чтобы добиться удобного положения под себя. Колени смотрят в ту же сторону, что и носки. Они не должны быть параллельны друг другу.


image


Это может показаться неправильным, но так задумано природой, и так мы устроены. Слегка развернутые наружу носки помогут занять устойчивое положение. Однако, это не сработает, разверни вы только одну ногу. В общем, просто займите удобное естественное положение.


Во время приседаний на одной или двух ногах, держите бёдра естественно и не скручивайте их. Выпрямляя ноги, не надо держать их в напряжении в верхней позиции. Колени рассчитаны на удержание тела в течение всего дня, поэтому обязательно выпрямляйте их так, как будто просто стоите.

Читать дальше →
Total votes 44: ↑32 and ↓12 +20
Comments 32

Как убрать из Git-репозитория файлы с конфиденциальной информацией

Reading time 4 min
Views 30K
Файлы проиндексированы, написано сообщение коммита, данные отправлены на сервер… И вдруг хочется повернуть время вспять. В коммит попал файл, которого там быть не должно. Когда такое случается, приходит время обращаться к поисковику.

Каждый разработчик когда-то по ошибке коммитил в общедоступный репозиторий файлы с конфиденциальной информацией. Как справиться с такой проблемой? Как сделать так, чтобы ничего подобного больше не случилось бы?

В этой статье я расскажу о том, что делать в том случае, если в репозиторий случайно попал файл, которому там совершенно нечего делать. Здесь же я приведу команды Git, которые позволят подправить историю, и поделюсь некоторыми рекомендациями по организации безопасной работы с конфиденциальной информацией.


Удаление файлов с конфиденциальной информацией из Git-репозитория (изображение большого размера)
Читать дальше →
Total votes 62: ↑56 and ↓6 +50
Comments 19

Как однажды была чуть не сорвана разработка Gardenscapes

Reading time 5 min
Views 10K
Disclaimer: Эта история произошла несколько лет назад. Но кажется, что она и до сих пор не утратила актуальности.


… Мы разрабатывали Gardenscapes. В нём всё ещё оставались следы старого Gardenscapes под Windows. Он даже был не Match-3, а Hidden Object. И никто даже и представить не мог высот, которых достигнет игра.

И вот в один прекрасный день…
Читать дальше →
Total votes 45: ↑39 and ↓6 +33
Comments 46

Организация разработки крупномасштабных React-приложений

Reading time 13 min
Views 15K
Эта публикация основана на серии материалов о модернизации jQuery-фронтенда с использованием React. Для того чтобы лучше разобраться в причинах, по которым написан этот материал, рекомендуется взглянуть на первый материал этой серии.



В наши дни очень легко организовать разработку маленького React-приложения, или начать работу над ним с нуля. В особенности — при использовании create-react-app. Некоторым проектам, скорее всего, понадобится лишь несколько зависимостей (например — для управления состоянием приложения и для интернационализации проекта) и папка src, в которой, как минимум, имеется директория components. Я полагаю, что именно с такой структуры начинается работа над большинством React-проектов. Обычно, правда, по мере того, как растёт количество зависимостей проекта, программисты сталкиваются с ростом количества компонентов, редьюсеров и других входящих в его состав механизмов, предназначенных для многократного использования. Иногда всем этим становится очень неудобно и сложно управлять. Что делать, например, если больше неясно то, почему нужны некоторые зависимости, и то, как они сочетаются друг с другом? Или, как быть, если в проекте накопилось так много компонентов, что становится сложно найти среди них именно тот, который нужен? Как поступить в том случае, если программисту нужно найти некий компонент, имя которого забыто?
Читать дальше →
Total votes 27: ↑25 and ↓2 +23
Comments 8

Опыт портирования legacy enterprise проекта c Net Framework на Net Core

Reading time 10 min
Views 11K

Опыт портирования legacy enterprise проекта c Net Framework на Net Core


net framework to net core


Вводная часть


Постараюсь дать информацию о том, как легко портировать существующее Enterprise-решение C .Net Framework на .Net Core. Пройдусь по всем важным разделам и не буду углубляться, чтобы не увеличивать размер статьи, ниже будет множество ссылок на разделы Microsoft, но в первую очередь идея заключается в том, чтобы дать вам представление о том, как переносить конкретную часть вашей системы и чтобы можно было обсудить в комментариях. В общем, эту статью можно считать руководством на коленке.

Читать дальше →
Total votes 27: ↑25 and ↓2 +23
Comments 12
1

Information

Rating
Does not participate
Location
Токио, Токио, Япония
Registered
Activity