Как стать автором
Обновить

Riot Games: анатомия технического долга

Время на прочтение15 мин
Количество просмотров19K
Привет, меня зовут Билл «LtRandolph» Кларк. Я работаю техническим руководителем команды создания чемпионов LoL. За последние несколько лет я успел поработать в разных отделах разработки League, но единственное, чем я был постоянно одержим — это технический долг. Мне нужно найти его, понять его и, при возможности, устранить его.

Когда разработчики обсуждают любую существующую технологию, например патч 8.4 League of Legends, то часто упоминают технический долг. Я называю техническим долгом код или данные, за которые придётся расплачиваться будущим разработчикам. Этой печальной стороне разработки ПО посвящено бесчисленное количество постов, статей и определений. В своём посте я хочу обсудить виды технического долга, с которыми мне пришлось встретиться при работе в Riot, и рассказать о модели, которую мы начали использовать в компании. Если бы меня попросили выделить самый важный урок, который можно извлечь из этой статьи, то я сказал бы, что это описанная ниже метрика «инфицирования».


Метрики


Чтобы принимать правильные решения о том, какие проблемы необходимо устранить сейчас, а какие можно ставить на потом (или, будем реалистичными, совершенно забыть о них), нам нужен какой-то способ измерения каждого конкретного элемента технического кода. Я выбрал для оценки три основные оси измерения: влияние, затраты на устранение и инфицирование.
Читать дальше →
Всего голосов 33: ↑32 и ↓1+31
Комментарии16

Введение в юнит-тестирование в Unity

Время на прочтение16 мин
Количество просмотров49K
image

Вам любопытно, как работает юнит-тестирование в Unity? Не знаете, что такое юнит-тестирование в целом? Если вы ответили положительно на эти вопросы, то данный туториал будет вам полезен. Из него вы узнаете о юнит-тестировании следующее:

  • Что это такое
  • Его польза
  • Достоинства и недостатки
  • Как оно работает в Unity при использовании Test Runner
  • Как писать и выполнять юнит-тесты, которые будут проходить проверку

Примечание: в этом туториале предполагается, что вы знакомы с языком C# и основами разработки в Unity. Если вы новичок в Unity, то изучите сначала другие туториалы по этому движку.

Что такое юнит-тест (Unit Test)?


Прежде чем углубляться в код, важно получить чёткое понимание того, что такое юнит-тестирование. Если говорить просто, то юнит-тестирование — это тестирование… юнитов.

Юнит-тест (в идеале) предназначен для тестирования отдельного «юнита» кода. Состав «юнита» может варьироваться, но важно помнить, что юнит-тестирование должно тестировать ровно один «элемент» за раз.
Читать дальше →
Всего голосов 18: ↑15 и ↓3+12
Комментарии4

Как мы оптимизировали скрипты в Unity

Время на прочтение14 мин
Количество просмотров19K
Существует множество отличных статей и туториалов о производительности в Unity. Этой статьёй мы не пытаемся заменить или улучшить их, это всего лишь краткое изложение шагов, сделанных нами после прочтения этих статей, а также шагов, позволивших решить наши проблемы. Настоятельно рекомендую вам как минимум изучить материалы на https://learn.unity.com/.

В процессе разработки своей игры мы столкнулись с проблемами, время от времени вызывавшими торможения игрового процесса. Потратив какое-то время в Unity Profiler, мы обнаружили два типа проблем:

  • Неоптимизированные шейдеры
  • Неоптимизированные скрипты на C#

Большинство проблем было вызвано второй группой, поэтому я решил сосредоточиться в этой статье на скриптах C# (возможно, ещё и потому, что за свою жизнь я не написал ни единого шейдера).

Поиск слабых мест


Цель этой статьи — не написать туториал по использованию профилировщика; я хотел просто рассказать о том, что нас в основном интересовало в процессе профилирования.

Unity Profiler — всегда самый лучший способ поиска причин задержек в скриптах. Настоятельно рекомендую профилировать игру непосредственно в устройстве, а не в редакторе. Поскольку наша игра создавалась для iOS, мне нужно было подключить устройство и использовать показанные на изображении Build Settings, после чего профилировщик подключался автоматически.


Build Settings (параметры сборки) для профилирования

Если вы попробуете загуглить «Random lag in Unity» или другой похожий запрос, то обнаружите, что большинство людей рекомендует сосредоточиться на сборке мусора, поэтому именно так я и поступил. Мусор генерируется каждый раз, когда вы прекращаете использовать какой-то объект (экземпляр класса), после чего время от времени запускается сборщик мусора Unity для уборки беспорядка и освобождения памяти, что требует безумного количества времени и приводит к падению частоты кадров.
Читать дальше →
Всего голосов 14: ↑14 и ↓0+14
Комментарии3

Иерархическое логирование приложения в Базу Данных

Время на прочтение10 мин
Количество просмотров6.6K

Всем, привет!


В статье я хотел бы рассказать об одном из подходов к логированию приложения, который сильно помогал мне и коллегам при отладке, поиске ошибок и анализе проблем производительности. Про необходимость логирования было написано множество хороших статей в том числе и на Хабре, поэтому здесь нет большого смысла повторяться. Я начинал карьеру в IT с Oracle и изучал эту БД по книгам главного эксперта — Тома Кайта. Мне запомнилась его фраза по поводу логирования из книги "Effective Oracle by Design":

Instrumentation is not overhead. Overhead is something you can remove without losing much benefit. Removing (or not having) instrumentation takes away considerable functionality. You wouldn’t need to do this if your systems never break, never need diagnostics, and never suffer from performance issues. If that is true, you don’t need to instrument your system (and send me your email address, because I have a job offer for you).


С работой над Oracle проектами всё и началось.

Читать дальше →
Всего голосов 5: ↑5 и ↓0+5
Комментарии6

Учим LLDB уточнять указатели на локальные переменные

Время на прочтение7 мин
Количество просмотров3.1K

Представим процесс отладки программы на С++: перед нами есть указатель на какую-то переменную, и мы хотим знать, на что он указывает. Два варианта: если переменная глобальная, то любой современный отладчик назовет ее имя, и мы будем довольны. А вот если переменная локальная, то никакой полезной информации мы не получим.

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

Читать далее
Всего голосов 14: ↑14 и ↓0+14
Комментарии3

Krumo — помощник для отладки php кода

Время на прочтение1 мин
Количество просмотров1.4K
Довольно часто для отладки кода приходится просматривать содержимое переменных, как правило для этого используется такие команды как echo, print_r(), var_dump(). Но тут много неудобств, бывает что переменных много, бывает что вобще не знаем какие переменные используются (например при разборе чужого кода).
Перечеслять неудобства можно долго, тут каждый выкручивается по своему, кто-то пишет свои функции, кто-то еще что-то выдумывает. Совсем недавно столкнувшись в очередной раз с такой проблемой нашел на меня псих, результат день в гугле, а итог вот этот простой класс Krumo
Читать дальше →
Всего голосов 12: ↑10 и ↓2+8
Комментарии6

JetBrains WebIDE — третья публичная сборка

Время на прочтение1 мин
Количество просмотров3.2K
Вышла третья предварительная сборка (номер 445) новой среды разработки для PHP — JetBrains Web IDE PHP developers edition.
В этой версии мы приняли во внимания пожелания пользователей (в том числе и фидбэк с хабра:) и добавили несколько новых функций — YAML, дополнение членов объявленных через теги PHPDOC @property и method, а также усовершенствовали дебаггер. Исправлено множество различных ошибок и серьезно улучшена производительность автодополнения в редакторе.

Загрузка новой версии с официальной страницы «программы ранней доступности» Web IDE.
Детальный список изменений — в блоге Web IDE.

UPD: Напоминаю всем что это даже не бета — мы просто демонстрируем над чем работаем. Вы главное пишите чего ВАМ в вашем любимом IDE не хватает и что вы больше всего цените — а мы позаботимся чтобы появилась достойная альтернатива!

YAML + structure PHPDOC completion
Всего голосов 36: ↑32 и ↓4+28
Комментарии220

JetBrains WebIDE — четвертая публичная сборка (#470)

Время на прочтение1 мин
Количество просмотров1.5K
Мы продолжаем нашу борьбу за идеальное IDE для PHP ^) Анонс предыдущей сборки на хабре подарил нам огромное количество информации и указал основные направляния для совершенствования. В этот раз мы сосредоточились на выведении типов, (авто)дополнении и производительности. Под «выведением типов» подразумевается определение типов переменных, выражений и функции на основе анализа кода (а не PHPDOC @аннотаций)

В этой сборке мы добавили:
— автоматическое выведение типов возвращаемых значений функций на основе анализа операторов return
— автоматическое определение фактических свойств класса и их типов путем анализа кода конструктора (см. скриншоты)
анализ функций
анализ конструктора
— автоопределение типов глобальных переменных без аннонаций
— полную поддержку аннотаций var и global
— автовызов дополнения после $ и ->
— дополние внутри PHPDOC @тегов (частично), $переменных (из следующей декларации) и видимых типов
— сокрытие __magic() методы при первом вызове (если есть другие члены класса)
— ограничили дополение внутри catch() подклассами Exception

Производительность улучшли, настолько насколько это возможно в экспериментальной версии. По мере приближения к релизу ей будет уделяться основное внимание.

Скачать Анонс Подробный список изменений

Приглашаем всех пробовать и продолжать дискуссию :)

UPD: в этом билде был найден серьезный баг — дополнение часто не срабатывает для классов не из текущего файла :((( уже исправлено — будет доступно на следующей неделе.
Всего голосов 71: ↑63 и ↓8+55
Комментарии197

JetBrains WebIDE — публичная сборка #500

Время на прочтение1 мин
Количество просмотров1.3K
Квест «идеальное IDE для PHP» продолжается :) За прошедшую с предыдущей сборки неделю стали доступны две наиболее востребованые фичи — PHPUnit и FTP, ну и конечно мы постарались исправить как можно больше ошибок.

IDE
— начальная версия поддержки удаленных хостов — пока что только FTP upload. (Планируется: открытие удаленного проекта, автосинхронизация, SFTP/SSL/всякие cloud storage). Находится в меню Settings — Deploy&Run.
— Новые удобные закладки (F11)

PHP
— начальная версия поддержки PHPUnit (пока только локальный запуск)
— добавлено выведение типов для переменной в «foreach(...)», элемента массива «array[...]» и тернарного оператора "?:"
— добавлены поиск использований (Ctrl-Alt-F7) и переименование (Shift-F6) для глобальных переменных
— исправлены поиск использований и переименование для статических членов класса
— исправлены различные ошибки форматирования кода и комментариев

Загрузка Анонс

FTP PHPUnit
Всего голосов 51: ↑41 и ↓10+31
Комментарии117

JetBrains WebIDE — публичная сборка #701 / немного о ZendCon'09 / кое что о неочевидных возможностях

Время на прочтение3 мин
Количество просмотров1.5K
И снова «идеальное IDE для PHP» от JetBrains ^) За прошедшее с предыдущей сборки время мы успели обзавестись официальным сайтом, посетить ZendCon'09 и наконец заняться обещанной оптимизацией производительности. Нашлось время и на несколько новых фич. Пока качается билд загляните под кат — кроме обычных подробностей там будет пара слов о ZendCon и о уникальных функциях платформы/WI.



Читать дальше →
Всего голосов 44: ↑40 и ↓4+36
Комментарии200

HabraWars: Графический debug

Время на прочтение2 мин
Количество просмотров600
С идеей HabraWars Вы уже наверняка знакомы, крайний из топиков анонсирует первый турнир. Который случиться сегодня. Регистрация новых участников будет после 20 ноября.

Правил и кода sample robot достаточно чтобы начать писать своего покорителя пьедестала. Но отладка при помощи только консоли FireBug может быть не достаточно наглядна. Гораздо удобнее получать информацию а мыслях робота прямо на арену.
Читать дальше →
Всего голосов 13: ↑10 и ↓3+7
Комментарии3

JetBrains PhpStorm (AKA WebIDE) — публичная сборка 94.335

Время на прочтение2 мин
Количество просмотров3.5K
В этой сборке вас ждут:

Новое имя. Два варианта Web IDE получили свои официальные названия: JetBrains WebStorm и JetBrains PhpStorm. Брендинг еще не закончен так что вы увидите знакомые белые сплэши и иконки WI в самых разных местах. Цель разработки остается прежней — идеальный инструмент для PHP/JS разработчиков и веб-дизайнеров.

Полностью настраиваемый PHP formatter – эта фича получила наибольшее количество голосов в трекере.
Читать дальше →
Всего голосов 41: ↑35 и ↓6+29
Комментарии108

Эй, Симулятор! Покажи свой язык

Время на прочтение6 мин
Количество просмотров8.9K

Написанию этого материала способствовала статья Зачем язык Verilog программисту микроконтроллеров, где описывается возможность тестирования алгоритма (Си файла) проекта микроконтроллера в Verilog проекте. Т.е. симулятор Verilog HDL взаимодействует с Сишным кодом микроконтроллера и тестирует реализованный алгоритм на возможные логические ошибки.

Подобные методы отладки кода для микроконтроллеров уже реализованы производителями. За всех не поручусь, но могу показать на примере симулятора MPLAB SIM компании Microchip Technology Inc.

Читать дальше →
Всего голосов 8: ↑8 и ↓0+8
Комментарии4

Выключка кода комментарием: маленький лайфхак

Время на прочтение2 мин
Количество просмотров5.3K
Несмотря на простоту (и, в общем-то, тривиальность, если подумать) описываемого решения, наткнулся на него чисто случайно, во время разукрашивания комментарием законченной программы, готовой к сдаче.

В программистской практике регулярно случается ситуация, когда на время разработки и отладки требуется включать какой-то код и выключать другой. Это несложно делать специальными конструкциями типа #if true ... #else ... #endif, меняя true на false, или прибегая к более изощренным условиям.
Читать дальше →
Всего голосов 30: ↑7 и ↓23-16
Комментарии33

Бесплатные редакторы кода для разработчика: подборка для начинающих специалистов

Время на прочтение4 мин
Количество просмотров14K

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

Читать далее
Всего голосов 49: ↑24 и ↓25-1
Комментарии22

Как мы использовали Telekube для удаленной отладки приложений в Kubernetes

Время на прочтение7 мин
Количество просмотров1.9K

Привет, Хабр! Эта статья расскажет о способе, который мы в Just AI придумали и реализовали для локальной разработки и отладки сервиса, работающего в Kubernetes.

Допустим, у нас есть некий компонент (ядро системы), который обычно запускается в Kubernetes и имеет множество взаимосвязей с другими сервисами. У компонента два сетевых интерфейса, которыми активно пользуются другие части системы, также развернутые в Kubernetes. Наша задача — научиться запускать его в IDE на своем ноутбуке в режиме отладки, чтобы максимально удобно и быстро отлаживать этот компонент. Telekube предоставляет возможность это сделать

Читать далее
Всего голосов 1: ↑1 и ↓0+1
Комментарии2