Как стать автором
Поиск
Написать публикацию
Обновить
0
@constantin_ukrread⁠-⁠only

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

Отправить сообщение

X.Spectator – мониторинг состояния в .NET

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров5.6K


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

Некоторые аспекты оптимизации LINQ-запросов в C#.NET для MS SQL Server

Время на прочтение6 мин
Количество просмотров24K
LINQ вошел в .NET как новый мощный язык манипуляции с данными. LINQ to SQL как часть его позволяет достаточно удобно общаться с СУБД с помощью например Entity Framework. Однако, достаточно часто применяя его, разработчики забывают смотреть на то, какой именно SQL-запрос будет генерировать queryable provider, в вашем случае — Entity Framework.
Читать дальше →

Инструменты Node.js разработчика. Удаленный вызов процедур на веб-сокетах

Время на прочтение7 мин
Количество просмотров6.5K
О технологии websocket часто рассказывают страшилки, например что она не поддерживается веб-браузерами, или что провайдеры/админы глушат трафик websocket — поэтому ее нельзя использовать в приложениях. С другой стороны, разработчики не всегда заранее представляют подводные камни, которые имеет технология websocket, как и любая другая технология. По поводу мнимых ограничений сразу скажу, что технологию websocket сегодня поддерживают 96.8% веб-браузеров. Вы можете сказать, что оставшиеся за бортом 3,2% — это много, это миллионы пользователей. Я с Вами вполне соглашусь. Только все познается в сравнении. Тот же XmlHttpRequest, который все и уже не первый год используют в технологии Ajax, поддерживается 97.17% веб-браузеров (не сильно больше, правда?), а fetch — вообще, 93.08% веб-браузеров. В отличие от websocket, такой процент (а раньше он был еще меньше) уже давно никого не останавливает при использовании технологии Ajax. Так что использовать в настоящее время fallback на long polling не имеет никакого смысла. Хотя бы потому, что веб-браузеры, которые не поддерживают websocket — это те же самые веб-браузеры, которые не поддерживают XmlHttpRequest, и в реальности никакого fallback не произойдет.

Вторая страшилка, про бан на websocket со стороны провайдеров или админов корпоративных сетей — также необоснована, так как сейчас все используют протокол https, и понять что открыто соединение websocket (не взломав https) невозможно.

Что же касается реальных ограничений и способах их преодоления, я расскажу в этом сообщении, на примере разработки веб-админки приложения.
Читать дальше →

Разработка под Docker. Локальное окружение. Часть 1

Время на прочтение3 мин
Количество просмотров74K
Возможно, одна из самых основных причин почему мне нравится докер это то, что он позволяет избавиться от необходимости установки на компьютер различных сервисов. К их числу можно отнести и сам веб-сервер Apache или Nginx, базы данных и прочие компоненты инфраструктуры приложения. Вся инфраструктура прописана в конфигурационном файле docker-compose.yml и запускается одной командой вместе с вашим приложением. Все что нужно разработчику работающему с докером, это по сути сам докер и любимая среда разработки и ВСЕ!
Читать дальше →

Несколько малоизвестных возможностей docker-compose

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

Во многих инструкциях с просторов интернета описывают некий минимум действий, и как следствие минимум команд и возможностей.


Я решил сделать некую подборку мало освещенных возможностей, особенностей. Статья не претендует на уникальность, это и мне, как памятка, и возможно некоторым падаванам поможет, начинающим свой путь с docker-compose.

Читать дальше →

.NET: Инструменты для работы с многопоточностью и асинхронностью. Часть 2

Время на прочтение13 мин
Количество просмотров93K
Публикую на Хабр оригинал статьи, перевод которой размещен в блоге Codingsight.

Я продолжаю создавать текстовую версию своего выступления на митапе по многопоточности. С первой частью можно ознакомиться здесь или здесь, там речь больше шла о базовом наборе инструментов, чтобы запустить поток или Task, способах просмотреть их состояние и некоторых сладких мелочах, вроде PLinq. В этой статье хочу больше остановится на проблемах, которые могут возникнуть в многопоточной среде и некоторых способах их решения.

Содержание



Читать дальше →

Разработка под Docker. Локальное окружение. Часть 2 — Nginx+PHP+MySql+phpMyAdmin

Время на прочтение6 мин
Количество просмотров55K
Для лучшего понимания нижеследующего материала сначала рекомендуется ознакомится с Предыдушим постом

Рассмотрим пример развертки локального окружения состоящего из связки Nginx+PHP+MySql+phpMyAdmin. Данная связка очень популярна и может удовлетворить ряд стандартных потребностей рядового разработчика.

Как и в прошлом посте акцент будет смещен в сторону утилиты docker-compose, чем докера в чистом виде.

Итак, поехали!
Читать дальше →

Встраиваем Lua интерпретатор в проект для микроконтроллера (stm32)

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


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

Так как большинство программ для микроконтроллеров пишется на С/C++, то для этих целей обычно используют абстрактные классы, предоставляющие интерфейсы к низкоуровневым сущностям (в случае, если проект пишется только с использованием C, то зачастую используются структуры указателей на функции). Данный подход предоставляет требуемый уровень абстракции над железом, однако чреват надобностью в постоянной повторной компиляции проекта с последующим программированием энергонезависимой памяти микроконтроллера бинарным файлом прошивки большого объема.

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

В качестве скриптового языка я выбрал Lua.
Читать дальше →

Чистая архитектура решения, тесты без моков и как я к этому пришел

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

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

Читать дальше →

Собственная реализация библиотеки ECS

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

На этой неделе я начал работать над своим движком для игры Vagabond и приступил к реализации шаблона entity-component-system.

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

Введение


Мотивация


Я не буду рассказывать о преимуществах ECS перед объектно-ориентированным подходом, потому что с этим хорошо справились многие люди до меня. Одним из первых про ECS рассказал на GDC 2002 Скотт Билас. Среди других знаменитых введений в тему можно назвать Evolve Your Hierarchy Майка Уэста и главу Components из потрясающей книги Game Programming Patterns Роберта Нистрома.

Вкратце скажу, что задача ECS — создание ориентированного на обработку данных подхода к игровым сущностям и удобное разделение данных и логики. Сущности (Entities) составляются из компонентов, содержащих данные. А системы, содержащие логику, обрабатывают эти компоненты.

Если вдаваться в детали, то вместо наследования в ECS используется композиция. Более того, этот подход, ориентированный на обработку данных, оптимальнее использует кэш, а значит, достигает отличной производительности.
Читать дальше →

Справочник по источникам событий в Rx

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


RxJava используется в большом количестве android-приложений, но при этом многие не знают других источников событий, кроме Observable и, может быть, Flowable. Они забывают о специализированных классах Single, Maybe и Completable, которые зачастую способны добавить больше ясности в код.

Под катом вас ждёт шпаргалка по источникам событий, которые существуют в RxJava.
Читать дальше →

Как стреляет шутер

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

[Статья Armin Ronacher о принципах вычисления коллизий в сетевых шутерах. Носит скорее обзорный и исследовательский, нежели технический характер. Здесь и далее в квадратных скобках примечание переводчика]

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

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

Настройка параметров PostgreSQL для оптимизации производительности

Время на прочтение6 мин
Количество просмотров111K
По умолчанию конфигурация PostgreSQL не настроена для рабочей нагрузки. Значения по умолчанию установлены для обеспечения работоспособности PostgreSQL везде с наименьшим количеством ресурсов. Имеются настройки по умолчанию для всех параметров базы данных. Главной обязанностью администратора базы данных или разработчика является настройка PostgreSQL в соответствии с нагрузкой их системы. В этом блоге мы изложим основные рекомендации по настройке параметров базы данных PostgreSQL для повышения производительности базы данных в соответствии с рабочей нагрузкой.

Имейте в виду, что, хотя оптимизация конфигурации сервера PostgreSQL повышает производительность, разработчик базы данных также должен быть внимательным при написании запросов. Если запросы выполняют полное сканирование таблицы, где можно использовать индекс, или выполнют тяжелые объединения или дорогостоящие операции агрегирования, тогда система все равно может работать плохо, даже если параметры базы данных настроены корректно. При написании запросов к базе данных важно обращать внимание на производительность.

Тем не менее, параметры базы данных тоже очень важны, поэтому давайте посмотрим на восемь, которые имеют наибольший потенциал для повышения производительности
Читать дальше →

Почему, зачем и когда нужно использовать ValueTask

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

Этот перевод появился благодаря хорошему комментарию 0x1000000.

image


В .NET Framework 4 появилось пространство System.Threading.Tasks, а с ним и класс Task. Этот тип и порождённый от него Task<TResult> долго дожидались, пока их признают стандартами в .NET в роли ключевых аспектов модели асинхронного программирования, которая была представлена в C# 5 с его операторами async/await. В этой статье я расскажу о новых типах ValueTask/ValueTask<TResult>, разработанных для улучшения производительности асинхронных методов в случаях, когда издержки на выделение памяти нужно принимать во внимание.

Читать дальше →

Создание шейдера травы в движке Unity

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

Из этого туториала вы научитесь писать геометрический шейдер для генерации травинок из вершин входящего меша и использовать тесселяцию для управления плотностью травы.

Статья описывает поэтапный процесс написания шейдера травы в Unity. Шейдер получает входящий меш, и из каждой вершины меша генерирует при помощи геометрического шейдера травинку. Ради интереса и реализма травинки будут иметь рандомизированные размеры и поворот, а ещё на них будет влиять ветер. Чтобы управлять плотностью травы, мы используем тесселяцию для разделения входящего меша. Трава сможет и отбрасывать, и получать тени.

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

Что (не)нужно знать для создания игр на Unity

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


Unity — игровой движок, с далеко не нулевым порогом вхождения (сравнивая с тем же Game Maker Studio), и в этой статье я расскажу с какими проблемами столкнулся начиная его изучение, и какие решения этих проблем нашел. Я буду описывать подобные моменты на примере своей 2d игры-головоломки для Android (которая, надеюсь, скоро выйдет в Play Market).
Читать дальше →

Инфраструктура сборки проекта с docker

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

На Хабре уже есть материалы про то, как настроить docker-контейнер для компиляции проекта. Например, Использование Docker для сборки и запуска проекта на C++. В этой статье, как и в предыдущей будет рассмотрен вопрос сборки проекта, но здесь я бы хотел выйти за рамки туториала и рассмотреть глубже вопросы использования контейнеров в таких задачах, а так же построения инфраструктуры сборки с docker.

Читать дальше →

Книга «Высокопроизводительный код на платформе .NET. 2-е издание»

Время на прочтение9 мин
Количество просмотров6.3K
image Эта книга научит вас добиваться максимальной производительности управляемого кода, в идеале не жертвуя ни одним из преимуществ среды .NET, а в худшем случае жертвуя минимальным их числом. Вы освоите рациональные методы программирования, узнаете, чего следует избегать и, что, наверное, наиболее важно, как использовать инструментальные средства, находящиеся в свободном доступе, чтобы без особых затруднений измерить уровень производительности. В учебном материале будет минимум воды — только самое необходимое. В книге дается именно то, что нужно знать, она актуальна и лаконична, не содержит лишнего. Большинство глав начинается с общих сведений и предыстории, за которыми следуют конкретные советы, изложенные наподобие рецепта, а в конце — раздел проведения пошаговых измерений и отладки для множества разнообразных сценариев.

Попутно Бен Уотсон погрузит в конкретные составляющие среды .NET, в частности в положенную в ее основу общеязыковую среду выполнения (Common Language Runtime (CLR)), и увидим, как происходит управление памятью вашей машины, генерируется код, организуется многопоточное выполнение и делается многое другое. Вам будет показано, как архитектура .NET одновременно и ограничивает ваше программное средство, и предоставляет ему дополнительные возможности и как выбор путей программирования может существенно повлиять на общую производительность приложения. В качестве бонуса автор поделится с вами историями из опыта создания в течение последних девяти лет очень крупных, сложных, высокопроизводительных .NET-систем в компании Microsoft.
Читать дальше →

Гайд: обновление интерфейсов с помощью дефолтных членов в C# 8.0

Время на прочтение5 мин
Количество просмотров7.8K
Начав работу с C# 8.0 на .NET Core 3.0, при создании члена интерфейса вы можете определить его реализацию. Наиболее распространенным сценарием является безопасное добавление членов к интерфейсу, уже выпущенному и используемому бесчисленным количеством клиентов.

В этом гайде вы узнаете как:


  • Безопасно расширять интерфейсы путем добавления методов с реализациями.
  • Создавать реализации с параметрами для обеспечения большей гибкости.
  • Получить право осуществлять более специфичные реализации с возможностью ручного контроля.

Читать дальше →

Введение в реверсинг с нуля, с использованием IDA PRO

Время на прочтение5 мин
Количество просмотров26K
Привет, Хабравчане!

Для тех, кто не знает, в своё время я взял на себя ответственность перевести испанский курс Introduccion Al Reversing Con Ida Pro Desde Cero под авторством Ricardo Narvaja на русский язык. Прошло 2,5 года и теперь я могу смело сказать, что курс переведен на русский язык. На данный момент это 67 частей. Но это ещё не всё. В конце 67 части, мы можем увидеть, что нас ждёт продолжение. Сейчас же я бы хотел рассказать, про то как я переводил курс, с чем столкнулся при переводе, что узнал и как всё это было.
Читать дальше →

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность