<?xml version="1.0" encoding="UTF-8"?>

<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" >

  <channel>
    <title><![CDATA[Статьи]]></title>
    <link>https://habr.com/ru/users/maxedzx/publications/articles/</link>
    <description><![CDATA[Хабр: статьи пользователя maxedzx]]></description>
    <language>ru</language>
    <managingEditor>editor@habr.com</managingEditor>
    <generator>habr.com</generator>
    <pubDate>Sun, 26 Apr 2026 01:43:56 GMT</pubDate>
    
    
      <image>
        <link>https://habr.com/ru/</link>
        <url>https://habrastorage.org/webt/ym/el/wk/ymelwk3zy1gawz4nkejl_-ammtc.png</url>
        <title>Хабр</title>
      </image>
    

    
      
        
    
    <item>
      <title><![CDATA[Представляем Owlcat Mono Profiler для Unity]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/531248/</guid>
      <link>https://habr.com/ru/articles/531248/?utm_campaign=531248&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/6a7/68f/c54/6a768fc54442c3ba01d59c9ead50e073.png" /><p>Добрый день. Я работаю программистом в компании Owlcat Games, которая выпустила одну из самых успешных российских компьютерных RPG Pathfinder: Kingmaker и сейчас работает над её продолжением, Pathfinder: Wrath of the Righteous. В ходе портирование первой игры нашей студии на консоли, мы столкнулись с проблемой поиска утечек памяти. Штатные инструменты движка Unity и целевых платформ оказались по разным причинам не слишком удобны для борьбы с утечками, и поэтому мы решили написать свой инструмент, о котором я и расскажу ниже.</p><p>Owlcat Mono Profiler предназначен для исследования использования памяти Mono в играх на движке Unity. Он доступен всем желающим в виде собранных бинарных файлов (под Windows) и исходного кода на <a href="https://github.com/OwlcatGames/OwlcatMonoProfiler" rel="noopener noreferrer nofollow"><u>Github</u></a>. В отличие от встроенного профайлера Unity, а также пакета Memory Profiler, он не требует снятия снимков состояния памяти, а производит постоянный мониторинг состояния Mono-кучи, что позволяет выявлять не только утечки, но и пики аллокаций, и избыточные повторяющиеся аллокации. По сравнению с платформо-специфичными инструментами, такими как Memory Analyzer для PS4, он корректно отображает события, происходящие с памятью, управляемой сборщиком мусора.</p><p>На этом покончим с формальностями, и перейдём к cool story.</p> <a href="https://habr.com/ru/articles/531248/?utm_campaign=531248&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Fri, 04 Dec 2020 08:45:34 GMT</pubDate>
      <dc:creator><![CDATA[MaxEdZX]]></dc:creator>
      <category><![CDATA[Программирование]]></category><category><![CDATA[Разработка игр]]></category><category><![CDATA[Unity]]></category>
      <category><![CDATA[Unity]]></category><category><![CDATA[Mono]]></category><category><![CDATA[Profiler]]></category><category><![CDATA[память]]></category><category><![CDATA[отладка]]></category><category><![CDATA[утечки памяти]]></category><category><![CDATA[игростроение]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Более эффективная запись массивов в постоянную память смарт-контракта в Solidity]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/423639/</guid>
      <link>https://habr.com/ru/articles/423639/?utm_campaign=423639&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[В последнее время, мне пришлось немного поработать с блокчейном <a href="https://www.ethereum.org/">Ethereum</a>. Идея, над которой я работал, требовала хранить прямо в блокчейне некоторое достаточно большое количество целых чисел, так, чтобы смарт-контракт имел к ним удобный доступ. Большинство уроков по разработке смарт-контрактов говорят нам «не храните много данных в блокчейне, это дорого!». Но сколько это «много», и с какого количества цена становится слишком высокой для практического использования? Это мне надо было выяснить, потому что нам наши данные выносить офф-чейн было никак нельзя, рушилась вся затея.<br>
<br>
Я только начинаю работать с Solidity и EVM, поэтому эта статья не претендует на истину в последней инстанции, но других материалов по этой теме ни на русском, ни на английском мне найти не удалось (хотя очень плохо, что <a href="https://habr.com/post/415791/">вот эта статья</a> мне не попалась раньше), поэтому я надеюсь, что она может оказаться кому-то полезна. Ну или в крайнем случае, она может оказаться полезна мне, если опытные товарищи расскажут, насколько и где именно я в ней не прав.<br>
<br>
Для начала, я решил быстро прикинуть — получится ли у нас? Давайте возьмём стандартный, широко распространённый тип контракта — токен <a href="https://en.wikipedia.org/wiki/ERC-20">ERC20</a>. По крайней мере, такой контракт хранит в блокчейне соответствие адресов людей, который купили токены, их балансам. В реальности, хранятся только балансы, каждый из которых занимает 32 байта (на деле здесь экономить не имеет смысла из-за особенностей <a href="https://ru.wikipedia.org/wiki/Solidity">Solidity</a> и EVM). У более-менее успешного токена легко могут быть десятки тысяч обладателей, и таким образом получаем, что хранить в блокчейне около 320000 байт — вполне допустимо. А нам больше и не надо!<br>
<br>
<h2>Наивный подход</h2><br>
Ну что же, попробуем наши данные сохранить. Значительная их часть — 8-битные целые беззнаковые числа, поэтому передадим их массив в контракт, и попробуем записать их в постоянную память:<br> <a href="https://habr.com/ru/articles/423639/?utm_campaign=423639&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать дальше →</a>]]></description>
      
      <pubDate>Tue, 18 Sep 2018 10:08:35 GMT</pubDate>
      <dc:creator><![CDATA[MaxEdZX]]></dc:creator>
      <category><![CDATA[Solidity]]></category><category><![CDATA[Программирование]]></category>
      <category><![CDATA[solidity]]></category><category><![CDATA[ethereum]]></category><category><![CDATA[blockchain]]></category><category><![CDATA[массивы]]></category><category><![CDATA[оптимизация]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Детективная история с участием CMake 3.10 и Android Studio]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/357712/</guid>
      <link>https://habr.com/ru/articles/357712/?utm_campaign=357712&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<i>Disclaimer: всё описанное ниже не является хорошей практикой. Не следует читать этот текст как руководство к действию — его роль, скорее, развлекательная. По этой же причине, не имеет смысла советовать автору (мне) сменить язык, инструменты, ОС, железо, пол и страну пребывания.</i><br>
<br>
У меня есть один проект. Для сборки он использует CMake, а также менеджер пакетов для C++ под названием <a href="https://docs.hunter.sh/en/latest/">Hunter</a>, хорошо с CMake интегрированный. Проекту необходимо собираться для нескольких платформ, одна из которых — Android. Hunter собирает зависимости под Android без проблем — но ему нужна версия CMake &gt;= 3.7, поскольку именно в 3.7 была добавлена улучшенная поддержка этой платформы. Эта очень важная деталь.<br> <a href="https://habr.com/ru/articles/357712/?utm_campaign=357712&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать дальше →</a>]]></description>
      
      <pubDate>Tue, 19 Dec 2017 10:13:08 GMT</pubDate>
      <dc:creator><![CDATA[MaxEdZX]]></dc:creator>
      <category><![CDATA[Программирование]]></category>
      <category><![CDATA[Android Studio]]></category><category><![CDATA[Android]]></category><category><![CDATA[CMake]]></category><category><![CDATA[C++]]></category><category><![CDATA[слабоумие и отвага]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[QtQuick/QML в качестве игрового UI]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/303722/</guid>
      <link>https://habr.com/ru/articles/303722/?utm_campaign=303722&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/files/cf7/ae7/bf9/cf7ae7bf9b3a4905bf24974292a5523e.png" width="50%" align="left"/><i>Статья обновлена с учётом полезных комментариев. Большое спасибо всем комментаторам за важные уточнения и дополнения.</i><br/>
<br/>
В играх со сложным UI создание собственной библиотеки для его отображения и инструментов для удобного редактирования может стать очень долгой и сложной задачей. Которую очень хочется решить раз и навсегда, а не делать это заново в каждом новом проекте, и даже в каждой новой компании.<br/>
<br/>
Выходом является использование готовых универсальных UI библиотек. Текущее их поколение представлено такими «монстрами» как <a href="http://www.autodesk.com/products/scaleform/overview">Scaleform</a> и <a href="http://coherent-labs.com/">Coherent UI</a>, хотя если вам так хочется писать UI на HTML, то можно и просто взять <a href="http://www.awesomium.com/">Awesomium</a>.<br/>
<br/>
К сожалению, у этой троицы, при всех её преимуществах, есть один существенный недостаток — жуткие тормоза, особенно на мобильных устройствах (несколько лет назад, я лично наблюдал, как практически пустой экран на Scaleform потреблял 50% от времени кадра на iPhone4).<br/>
<br/>
На этом фоне, мне всегда было интересно, почему никто не использует в играх <a href="http://www.qt.io/developers/">Qt</a> — библиотеку, неплохо зарекомендовавшую себя в десктопных приложениях. На самом деле, это утверждение не совсем верно — в Wiki проекта Qt есть <a href="https://wiki.qt.io/Qt_Based_Games">список</a> игр, однако в нём почти нет современных профессиональных проектов.<br/>
<br/>
Впрочем, причина, по которой именно привычные старые <a href="http://doc.qt.io/qt-5/qtwidgets-index.html">Qt Widgets</a> не используются в играх, лежит на поверхности: они не рассчитаны на использование совместно с OpenGL или DirectX рендером. Попытки их скрестить дают довольно плохую производительность <a href="http://www.shamusyoung.com/twentysidedtale/?p=15904">даже на десктопе</a>, а про мобилки и говорить нечего.<br/>
<br/>
Однако, уже довольно давно в Qt есть гораздо более подходящая для этой задачи библиотека: <a href="http://doc.qt.io/qt-5/qtquick-index.html">QtQuick</a>. Её контролы по умолчанию рендерятся ускоренно, а возможность задавать описание UI в текстовом формате отлично подходит для быстрой настройки и изменения внешнего вида игры.<br/>
<br/>
Тем не менее, я до сих пор не слышал об использовании Qt в профессиональном геймдеве. Статей на тему тоже не нашлось, поэтому я решил разобраться сам — то ли все что-то знают, чего не знаю я (но не рассказывают!), то ли просто не видят хорошую возможность сэкономить на времени разработки.<br/>
 <a href="https://habr.com/ru/articles/303722/?utm_campaign=303722&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать дальше &rarr;</a>]]></description>
      
      <pubDate>Tue, 21 Jun 2016 06:28:30 GMT</pubDate>
      <dc:creator><![CDATA[MaxEdZX]]></dc:creator>
      <category><![CDATA[C++]]></category><category><![CDATA[Qt]]></category><category><![CDATA[Программирование]]></category><category><![CDATA[Разработка игр]]></category>
      <category><![CDATA[c++]]></category><category><![CDATA[ui]]></category><category><![CDATA[qt]]></category><category><![CDATA[gamedev]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Некоторые особенности разработки под Ubuntu Touch]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/280404/</guid>
      <link>https://habr.com/ru/articles/280404/?utm_campaign=280404&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/files/e7e/20c/dc2/e7e20cdc2dba40dab344bcd11608fc25.png"/><br/>
<br/>
Пришла весна. Коты думаю о кошках, мужчины о женщинах, а программист — куда бы ещё портировать имеющийся код. Я ещё прошлой осенью стал обладателем Meizu MX4 Ubuntu Edition, и поэтому выбор был давно очевиден. А тут нашлось и время, и силы. <br/>
 <a href="https://habr.com/ru/articles/280404/?utm_campaign=280404&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать дальше &rarr;</a>]]></description>
      
      <pubDate>Mon, 04 Apr 2016 07:05:17 GMT</pubDate>
      <dc:creator><![CDATA[MaxEdZX]]></dc:creator>
      <category><![CDATA[Open source]]></category><category><![CDATA[Программирование]]></category><category><![CDATA[Разработка игр]]></category><category><![CDATA[Разработка мобильных приложений]]></category><category><![CDATA[Linux]]></category>
      <category><![CDATA[ubuntu touch]]></category><category><![CDATA[ubuntu sdk]]></category><category><![CDATA[C++]]></category><category><![CDATA[CMake]]></category><category><![CDATA[QMake]]></category><category><![CDATA[документации нет и не будет]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Разработка Return of Dr. Destructo: до чего дошёл Прогресс]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/257497/</guid>
      <link>https://habr.com/ru/articles/257497/?utm_campaign=257497&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[Недавно я выпустил в свет свой первый законченный «домашний» проект — ремейк игры <a href="http://www.youtube.com/watch?v=xi2inDOIz-U">«Island of Dr. Destructo»</a> (также известной как просто Destructo) с ZX Spectrum. В этом посте я хотел бы рассказать немного о том, как шла разработка и поделиться некоторыми интересными замечаниями о кросс-платформенной разработке и архитектуре кода.<br/>
<br/>
<div style="text-align:center;"><img  src="https://habrastorage.org/files/2c7/bb7/0d0/2c7bb70d0d1b428790eb638f0da54688.png"/></div><br/>
 <a href="https://habr.com/ru/articles/257497/?utm_campaign=257497&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать дальше &rarr;</a>]]></description>
      
      <pubDate>Thu, 07 May 2015 13:41:10 GMT</pubDate>
      <dc:creator><![CDATA[MaxEdZX]]></dc:creator>
      <category><![CDATA[Разработка игр]]></category>
      <category><![CDATA[инди-игры]]></category><category><![CDATA[история создания]]></category>
    </item>
  

  

  

	
  

  

  

      

      

      

    
  </channel>
</rss>
