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

C# *

Объектно-ориентированный язык программирования

Сначала показывать
Порог рейтинга
Уровень сложности

Сглаживание битовых изображений

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

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

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

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

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

ThreadPool – инъекция потоков

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

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

С большой силой ThreadPool'а приходит большая ответственность! И поэтому наша ответственность – понимать устройство этого мощного иснтрумента, чтобы понимать его ограничения. А два главных способа понять: чтение кода и, конечно, эксперименты с многопоточностью...

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

BitImageTool — пиктограммы для кнопок и панелек приложений, закодированные в ASCII

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

Статья о том, как легко делать графические кнопки для панелей инструментов, не таская за приложением гору бинарных ресурсов с картинками. Этот метод платформонезависимый и может быть использован в различных языках и средах, позволяющих работать с графикой и растровыми изображениями. Ниже приводятся примеры для C# (WinForms / WPF), JavaScript, Python.

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

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

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

Пожалуй, самый простой способ спасти ваше .NET-приложение, или Prometheus (и не только) спешит на помощь

Уровень сложностиСредний
Время на прочтение32 мин
Количество просмотров7K
Существует множество возможных проблем приложений, которые удается заметить лишь с опозданием. Особенно когда релиз уже состоялся… К счастью, существует пара ключевых инструментов, которые выручают почти в любой ситуации, — и вряд ли найдется что-то проще.



Меня зовут Александр Пугач, я — Senior .NET Developer в проекте Data Warehouse «Лаборатории Касперского» (да-да, вы могли не знать, но у нас в компании широко используются .NET и «шарпы»).

В этой статье я расскажу, как работать с метриками в .NET на примере OpenTelemetry и Prometheus — систем, которые помогают отслеживать проблемы в работе приложений и быстро на них реагировать, обеспечивая стабильную и отказоустойчивую работу сервисов.

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

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

Истории

Создание игр на Unity: с чего начать?

Уровень сложностиПростой
Время на прочтение14 мин
Количество просмотров9.2K

Создание игр на Unity: с чего начать?

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

Читать подробнее
Всего голосов 8: ↑6 и ↓2+9
Комментарии9

Повышенная точность установки указателя мыши в играх

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров2.6K

Статья про настройку «Повышенная точность установки указателя» в панели управления Windows, почему она мешает в играх, но может быть удобной для работы с окнами и приложениями, и как программно автоматизировать её переключение с помощью короткого кода на C#.

Для динамичных игр особенно важна точность управления мышью, вернее равномерность и предсказуемость передвижения прицела, чтобы наведение на цель могло быть отработано рефлекторно. Для этого некоторые пользователи отключают настройку «Повышенная точность установки указателя» (Enhance Pointer Precision в англоязычной версии системы), доступную в панели управления Windows...

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

Слабоумие и отвага: Разработка игры Disciples 2 на Avalonia и WPF

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

Здравствуй, Хабр!

Поступая в университет на программиста, я мечтал стать разработчиком игр. Но жизненный путь привёл меня в десктоп на WPF (о чём я, на самом деле, не жалею). А в пет-проекте объединились опыт десктоп-разработчика и стремление писать игры. Так родился пингвинослон Disciples II на Avalonia и WPF.

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

Итак, Бетрезен умирает.

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

Как перенести 1,4 ТБ с MS SQL на PostgresSQL за 13 часов

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

Привет, Хабр! Меня зовут Павел Кузьмин, я работаю ведущим разработчиком в РСХБ-Интех. Однажды в своей работе мы столкнулись с острой необходимостью перенести БД объемом 1,4 ТБ (более 1,5 млрд строк) с MS SQL на PostgresSQL не более чем за 20 часов. Неожиданно для нас, все имеющиеся готовые варианты не подходили, поэтому мы решили взять библиотеку Npgsql на C# и написать свой код. В итоге созданное решение справилось с поставленной задачей за 13 часов. Рассказываем, как мы это сделали, и делимся кодом. Возможно, он вам пригодится в работе.

Читать далее
Всего голосов 26: ↑24 и ↓2+29
Комментарии23

Переизобрел ECS. Паттерн Entity-State-Behaviour

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

Привет, Хабр! 👋

Меня зовут Игорь, и я Unity Developer. В этой статье хотел бы показать
новый архитектурный паттерн, который внезапно открыл для себя в разработке игр.

Особенность паттерна Entity-State-Behaviour заключается в том, что ваш игровой объект представляет собой Entity, которая состоит из набора данных (State) и логики (Behaviour). За счет жесткого разделения данных и логики, разработчик может легко разрабатывать новые взаимодействия между игровыми объектами, системами и AI и подключать их в процессе выполнения программы...

Читать далее
Всего голосов 7: ↑6 и ↓1+8
Комментарии5

Программирование DeFi: Uniswap. Часть 1

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

Лучший способ научиться чему‑то — научить других. Второй лучший способ научиться чему‑то — сделать это самому. Я решил объединить эти два способа и научить себя и вас программировать DeFi сервисы на Ethereum (и любых других блокчейнах, основанных на EVM — Ethereum Virtual Machine).

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

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

.NET на SBC максимально канонично

Уровень сложностиПростой
Время на прочтение11 мин
Количество просмотров7.4K

В интернетах всегда кто‑то не прав. В этот раз, по моему максимально предвзятому мнению, оказался не прав @bodyawm. Для меня.NET в каждой бочке затычка, поэтому меня бобмануло от использования mono в 2024 году. В этой статье я покажу своё видение того, как максимально канонично и современно писать на.NET для GNU/Linux и SBC (Single‑board computer, aka одноплатник).

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

Орфография в 1С через COM на C#

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

Всем привет, недавно столкнулся с задачей проверки орфографии и исправления опечаток в 1С. Посмотрев варианты решений (MS Word, Yandex, т.д.), понял, что они мне не подходят. Решил копнуть глубже. Лично мне понравилось решение на базе спелчекера, встроенного в Windows. Поскольку в 1С нет возможности напрямую обратиться к этому функционалу ОС, я реализовал его в виде DLL на языке C# и сделал COM‑обертку. COM‑объект подключил в 1С.

В итоге получилась вот такая простая форма, на которой при нажатии кнопки «Проверить опечатки» текст в Строке ввода анализируется и исправляется.

Читать далее
Всего голосов 7: ↑3 и ↓4+1
Комментарии48

Организация игровых данных на примере игры Mind Over Magic

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

Mind Over Magic — это симуляционная игра, разработанная Sparkypants и изданная Klei Publishing.

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

Узнать что там внутри
Всего голосов 9: ↑7 и ↓2+7
Комментарии6

Ближайшие события

27 августа – 7 октября
Премия digital-кейсов «Проксима»
МоскваОнлайн
19 сентября
CDI Conf 2024
Москва
20 – 22 сентября
BCI Hack Moscow
Москва
24 сентября
Конференция Fin.Bot 2024
МоскваОнлайн
25 сентября
Конференция Yandex Scale 2024
МоскваОнлайн
28 – 29 сентября
Конференция E-CODE
МоскваОнлайн
28 сентября – 5 октября
О! Хакатон
Онлайн
30 сентября – 1 октября
Конференция фронтенд-разработчиков FrontendConf 2024
МоскваОнлайн
3 – 18 октября
Kokoc Hackathon 2024
Онлайн

Как уменьшить размер шрифтов в Unity до нуля

Уровень сложностиСложный
Время на прочтение5 мин
Количество просмотров2.2K

Если ты как и я постоянно сталкиваешься с проблемой размера шрифтов и их созданием для Text Mesh Pro — у меня есть для тебя решение, ныряй в статью там все очень просто!

Нырнуть!
Всего голосов 10: ↑10 и ↓0+13
Комментарии11

Как я улучшил производительность JSON-парсера в два раза

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

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

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

Основы работы с файлами и потоками в C#

Уровень сложностиПростой
Время на прочтение9 мин
Количество просмотров5.4K

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

В этой статье мы рассмотрим основы работы с файлами и потоками в C#.

Читать далее
Всего голосов 17: ↑11 и ↓6+8
Комментарии10

Бот поиска заявлений абитуриентов по СНИЛС

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

Многие из вас когда‑то поступали (или будут поступать) в вузы. Это происходит обычно 1 раз в жизни, поэтому абитуриенты часто не понимают всей специфики работы приёмной комиссии, построения списков, сроков зачисления и т. п. Часто этим просто лень заниматься. Да плюс ещё эти правила приёма меняются каждый год (более того скажу — чаще чем раз в год) и уследить за этим обычному человеку не представляется возможным.

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

«Некрасивое» получение TCP-статистики существующего сетевого соединения в desktop-приложении .NET для Windows

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

Некоторое время назад у одного из клиентов начало сбоить desktop‑приложение, в разработке которого я участвовал. Проблему локализовать не получалось очень долго — в том числе потому, что она никак не воспроизводилась на компьютерах и разработчиков, и тестировщиков.

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

Эта заметка о том, как без использования Wireshark добавить в приложение.NET Framework /.NET 5+ для Windows код получения статистики TCP‑соединения (количество перезапрошенных (retransmitted) и переупорядоченных (reordered) байт, а также некоторую другую информацию).

Вполне вероятно, эти данные пригодятся и вам — если вы используете долгоживущие или «бесконечные» TCP‑соединения (по типу Twitter Streaming API).

Итак, приступим!

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

Применение Identity Server 4 в распределенном монолите

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров1.8K

Некоторое время назад перед нами возникла задача разграничения прав доступа к ресурсам, то есть задача аутентификации и управления аутентификацией. Поскольку архитектура основных проектов представляла нечто похожее на распределенный монолит, мы решили остановиться на Identity Server.

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

От первокурсника до программиста: история 4 лет обучения в ВУЗе на программиста

Уровень сложностиПростой
Время на прочтение9 мин
Количество просмотров36K

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

Первый год, как и у всех, у нас преподавались общие предметы, такие как философия, русский язык, история, информатика, математика и логика. Всё это меня раздражало, но сейчас я понимаю, что эти предметы были полезными и не принесли никакого вреда. На информатике учились работать с Word и Excel. В начале мне это также не очень нравилось. Сидим, учим офисные программы, а ведь я сюда шел, чтобы учиться прогать. Однако со временем я осознал, что, хоть это и было неинтересно, умение работать с ними пригодилось на следующих курсах.

2 курс

Во втором курсе довольно много было предметов связанных с ...

Читать далее
Всего голосов 78: ↑63 и ↓15+54
Комментарии132