Обновить
105.51

C# *

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

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

Первый проект длиною в полтора года…

Время на прочтение5 мин
Охват и читатели22K

На дворе 2021 год, я занимаюсь ремонтом электроники уже на протяжении десяти лет. Свободное от работы время посвящаю изучению 3D-моделирования и печати. Для этих целей в 2018 году были куплены два самодельных FDM-принтера.

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

Уже вечером этого дня я изучаю плату и узнаю такие слова, как "Asic", майнер, майнинг. Понимаю, что имею на руках плату одного такого устройства, а в данном случае — AntMiner S9.

Читать далее

Изучаем подозрительные места в коде AWS SDK для .NET

Уровень сложностиПростой
Время на прочтение13 мин
Охват и читатели3.1K

1057_AWS_SDK_NET_ru/image1.png


Сегодня под нашим скальпелем оказался проект AWS SDK для .NET. Мы посмотрим на подозрительные места из исходного кода, разберёмся, что в них происходит, и попробуем воспроизвести некоторые проблемы. Заваривайте кофе и устраивайтесь поудобнее.

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

Использование C# и NPOI для работы с файлами Excel

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

NPOI - это .NET-версия проекта POI на Java, расположенного по адресу http://poi.apache.org/. POI является проектом с открытым исходным кодом, который может помочь вам читать/записывать файлы xls(x), doc(x), ppt(x). Он имеет широкое применение.
Например, вы можете использовать его для:

• создания отчета Excel без установленного на сервере пакета Microsoft Office и более эффективной работы, чем вызов компонента Microsoft Excel ActiveX в фоновом режиме;
• извлечения текста из документов Office для реализации функции полнотекстового индексирования;
• извлечения текста и изображений из документов Excel, Word и PowerPoint;
• создания листов Excel, содержащих формулы.

В этой статье я собираюсь познакомить вас с тем, как создавать, читать и обновлять файлы .XLSX с использованием NPOI на языке C#.

Читать далее

ThreadPool.Workers

Время на прочтение13 мин
Охват и читатели8K

На этот раз длинная история. Но длинная она в основном из-за множества примеров, которые вы можете легко повторить у себя.

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

Читать далее

Паттерн спецификация в .NET

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

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

Свою идею я реализовывал постепенно на основании опыта использования в реальном проекте.

Читать далее

Универсальный Автономный Модуль в Unity

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

Один из секретов быстрой и качественной разработки это унификация. В этой статье мы рассмотрим пример реализации Универсального Автономного Модуля UAM (Universal Autonomous Module). 

В прошлой статье мы уже говорили о концепции модульной архитектуры, если вы еще не знакомы, то переходите по ссылке Модульная архитектура в Unity. Та концепция хоть и имела кучу плюсов, но не подходила ко всем типам проектов/жанрам. Сегодня же мы рассмотрим более распространенный и универсальный подход к реализации модулей. Подобные модули в Unity сообществе иногда называют более обобщенно - ассетами, в статье не будет использоваться такое обобщение. 

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

Цель ясна, осталось расписать задачи и реализовать модуль.

Читать далее

Обзор Top-3 Open Source игр на C# и ошибок в их коде

Уровень сложностиПростой
Время на прочтение8 мин
Охват и читатели8.6K

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

Читать далее

TDD и unit тесты: не сотвори себе монолит

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

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

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

Посмотреть код

Как я делал руку с картами для своей карточной игры

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели8.2K

Зона, с которой игрок чаще всего взаимодействует в карточной игре — это его рука (не путать с рукой в играх с 18+ контентом). Рука — это набор карт, которые игрок может разыграть в текущий ход. И раз это одно из самых важных мест, я решил уже на этапе прототипа сделать руку приятной и красивой.

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

Вот как раз во время работы с рукой (не путать с «во время работы рукой») я понял отличие качественной игры от поделки на уровне прототипа для тестирования геймплея. Все дело в мелочах и деталях. Посмотрите, как ведут себя карты в руке в Slay the Spire:

Читать далее

Как я познакомился с BouncyCastle в .NET 7

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

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

Данная работа написана исключительно в рамках моих рабочих будней и не является профессиональным гайдом.

Читать далее

GraphQL в .NET: Введение

Время на прочтение4 мин
Охват и читатели2.6K

Две основные формы проектирования и взаимодействия, которые мы используем в современной разработке API, — это REST и GraphQL.

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

Читать далее

Сказка про For vs Foreach

Уровень сложностиПростой
Время на прочтение10 мин
Охват и читатели30K


Ходят слухи, что foreach быстрее for. А ещё ходят слухи, что for быстрее foreach. Пора разобраться, что быстрее!

Читать далее

Как использовать C# для разделения PDF документа

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

PDF является широко используемым форматом электронных документов, но иногда мы хотим разделить большой PDF файл на несколько отдельных файлов для более удобного управления и обработки. В этой статье мы расскажем, как с помощью языка C# и Free Spire.PDF for .NET разбить PDF документ.

Читать далее

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

Разделение контейнера зависимостей в ASP.NET Core

Уровень сложностиСредний
Время на прочтение5 мин
Охват и читатели7.7K

Разработчики AspNet Core (здесь и далее речь идёт об AspNet актуальных версий: 6 и 7, но может быть применимо и к более ранним версиям) хорошо знают, что механизм Dependency Injection встроен в этот фреймворк изначально и пронизывает его насквозь. И это здорово упрощает работу с зависимостями и сразу вводит разработку в идеологически правильное русло. Более того, в состав самого AspNet входит вполне приличный дефолтный DI-контейнер разработки Microsoft, что позволяет отказаться от использования сторонних решений. Во всяком случае, при отсутствии совсем уж специфичных требований.

Но иногда такие требования существуют...

Паттерн декоратор на примере .NET

Время на прочтение3 мин
Охват и читатели14K

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

Для самого изучения паттернов я постараюсь не погружаться в определения, а показать примеры, задать проблему, и решение проблемы с использованием паттерна. Мы возьмем компанию «Сесла Моторс» и будем решать поставленные ею задачи. Пускай название не вызывает у вас чувства, что якобы вы где‑то уже слышали про нее. Это не так. Ведь компания занимается только производством электрокаров. А такое редко в реальном мире. Должно быть интересно. Погнали!.

Читать далее

Опыт интеграции .NET Core+ приложений с HashiCorp Vault

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

Привет, Хабр! В этой статье я хотел бы поделиться опытом нашей команды в части интеграции .NET Core и выше приложений с корпоративным хранилищем секретов HashiCorp Vault.

Наши приложения, как и большинство приложений в компании, используют в процессе работы различные секреты (пароли, токены и т.д.). Их, с точки зрения информационной безопасности, нельзя хранить в коде или на компьютере, на котором запущено приложение. Поэтому в компании используется специальное ПО – хранилище секретов HashiCorp Vault.

В чем суть проблемы, с которой мы столкнулись: решение, используемое ранее для получения секретов из HashiCorp Vault в приложение, было не очень удобным и очевидным

Читать далее

Как записать данные в Excel, используя C#

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели23K

Excel - широко используемое электронное таблицы программное обеспечение, которое можно использовать для анализа данных, создания отчетов и многих других целей. Мы часто должны записывать данные в Excel для дальнейшей обработки и анализа. В программировании мы можем использовать различные способы записи данных в Excel, например, использование встроенных в Excel COM-компонентов, использование сторонних библиотек и т.д. Free Spire.XLS for .NET - это мощная сторонняя библиотека, которая может помочь нам легко записывать данные в Excel. В этой статье будет описано, как с помощью Free Spire.XLS for .NET записывать различные типы данных в Excel.

Читать далее

Дружим Flutter с С# и С++

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели15K

На Flutter`е очень удобно и хорошо пишутся интерфейсы для пользователей. Но использовать Dart для решения алгоритмических задач тяжко и неэффективно. Семейство Си справляется гораздо лучше и позволяет легко распараллеливать вычисления. Кроме того, за многолетнюю историю С++ и С# обзавелись множеством полезных библиотек, не все из которых имеют аналоги во Flutter.

Зная про существование библиотеки FFI для Flutter, что позволяет даже синхронно запускать Си-шный код, я решил закопаться в эту тему и попробовать объединить наследие Си и их эффективность с удобным фреймворком. Учитывая то, что в интернете маловато информации про использование FFI, особенно с C#, я решил поделиться своим опытом "построения мостов" на примере двух приложений в этой статье.

Читать далее

ThreadPool.Chain

Уровень сложностиПростой
Время на прочтение8 мин
Охват и читатели6.9K


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

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

Читать далее

Система сохранения на Unity для начинающих

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

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

Читать далее

Вклад авторов