Обновить
89.02

C# *

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

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

WPF: контролы лишенные внешнего вида и неразрешимая задача выбора конфигурации темплейта

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

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

Возможно, кому‑то будет интересно сравнить то, что предлагает WPF, с концепциями реализованными, например, в JavaFX.

Читать далее

Гайд по настройке IoC-контейнера в консольном приложении .NET core

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

Статья‑гайд от ведущего.NET‑разработчика «ITQ Group» Александра Берегового.

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

Читать далее

Как изменять строки в dotnet

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

Строки в dotnet являются предназначенной только для чтения последовательностью Char-ов. Об этом явно написано в документации Microsoft, посвященной строкам. Там же в секции "Неизменность строк" сказано следующее: "Может показаться, что все методы String и операторы C# изменяют строку, но в действительности они возвращают результаты в новый строковый объект". Согласно документации, изменить строки нельзя, но жизнь не всегда согласуется с документацией, поэтому предлагаю взглянуть на способы, позволяющие изменять строки в dotnet (к тому же это иногда спрашивают на собеседованиях!).

Читать далее

Rust vs C#: два способа решить проблему ссылок в структурах

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

Возврат ссылки на структуру из метода, объявленную в этом самом методе, является одним из самых классических примеров "висячих ссылок". Но что если возвращается не ссылка, а структура, содержащая ссылку? И не явно, а через вызов другого метода? Как понять, где у нас явный "провис ссылки", а где нормальный код? Звучит как какая то "дичь", но подобный кейс - вполне реальная боль для автором языков программирования.

Давайте посмотрим на примере Rust и C# как авторы решают эту неоднозначную проблему.

Читать далее

Доказательство с нулевым разглашением на примере реализации SRP в ProtonMail

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

Привет, Хабр! Это команда Eppie. Подробнее о нашем проекте бессерверной электронной почты можно почитать в этом посте.

Мы, параллельно с созданием собственного децентрализованного протокола, интегрируем в клиентское приложение Eppie популярные классические сервисы. Осенью мы познакомились с основателем Proton Энди Йеном и договорились добавить в Eppie возможность подключения почтового ящика ProtonMail. Насколько нам известно, ни один нативный десктопный клиент не умеет авторизоваться на сервере Proton — Eppie будет первым.

В Proton реализована собственная версия протокола SRP (Secure Remote Password). Наш криптограф портировал библиотеку на C#. Если хотите посмотреть код, вот ссылка на репозиторий в GitHub.

SRP — пример «доказательства с нулевым разглашением». Смысл процедуры в том, чтобы доказать факт владения определенной информацией, не раскрывая при этом саму информацию. В частности, аутентификация по SRP позволяет пользователю ProtonMail доказать, что он знает пароль, не передавая пароль серверу. Сейчас расскажем, как это устроено изнутри.

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

Читать далее

OpenAPI Comparator — детектор изменений, ломающих [большие] API

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

Защита от изменений API, которые могут повлиять на ваших клиентов, — одна из самых больших проблем при разработке HTTP API. Если вы вносите критические изменения, то создаете клиентам серьёзные проблемы. Стабильный API — ключ к удовлетворенности клиентов и, в конечном счете, к успеху в бизнесе.


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

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

Совсем чуть-чуть про UniRx для Unity

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

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

Читать далее

C# и обработка медиафайлов средствами FFmpeg, Pandoc и ImageMagick

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

Приветствую читатели, в этой статье я бы хотел рассказать о написанной мной OpenSource библиотеке MediaFileProcessor под платформу .NET (.netstandart 2.0).

Читать далее

Создание обертки геометрического ядра C3D для использования на разных языках и платформах

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

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

Рассмотрим процесс создания обертки для библиотеки геометрического ядра C3D Labs.

Читать далее

Из Unity в Unigine. NavMesh

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

Представлена сцена в Unity, по которой передвигается зеленый куб, управляемый игроком мышкой, и синяя капсула, которая всегда следует за кубом. Они перемещаются по белому плейну вокруг красных препятствий. Пример реализации в Unigine.

Читать

CSLA .NET: земля обетованная для вашей бизнес-логики

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

Инструменты, которыми мы располагаем как .NET-разработчики, поистине впечатляют. Вы можете позволить себе выбирать наиболее подходящий из многочисленных фреймворков пользовательского интерфейса, таких как UWP, WPF, Windows Forms, и различных фреймворков пользовательского интерфейса для веб-клиентов, среди которых можно выделить Angular и React. И у нас даже есть несколько вариантов взаимодействия с базами данных, таких как Entity Framework, Dapper и т.д.

Читать далее

Конвертация MIDI-времени в такты и доли

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

Представьте: вы создаёте новый шедевр в любимой DAW, вставляете в проект MIDI-файл, редактор показывает, что ноты в нём имеют восьмую длительность. Не обращая на это внимания, вы продолжаете творить. Но, постойте. А как DAW, собственно, понимает, что ноты в файле восьмые?

В статье попробуем разобраться, как времена в MIDI-файле соотносятся с главным форматом времени при работе с музыкой – тактами и долями. Результатом наших исследований будет законченный алгоритм на C#.

Читать далее

Мало картинок, много лута: эмулятор Сферы, часть 4

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

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

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

Читать далее

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

Нужно ли проверять библиотеки перед их использованием? Разберём на примере MudBlazor

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

В нашей компании возникла потребность использования библиотеки для Blazor компонентов. Мы остановились на MudBlazor и перед внедрением проверили качество её кода. В результате нашли ряд странностей и даже воспроизводящееся падение, о чём и расскажем в статье.

Читать далее

.NET Reflection. Упрощаем работу и используем в тестировании

Уровень сложностиСложный
Время на прочтение28 мин
Охват и читатели12K

В данной статье хочу немного рассказать о классе Reflector, который был написан для облегчения работы с объектами и методами предоставляемыми.NET Reflection API из пространства имен System.Reflection. Отражение позволяет выполнять задачи по исследованию сборок, типов, интерфейсов, методов с их параметрами, полей, свойств и событий путем получения информации, описывающей их структуру. Эта информация хранится в метаданных сборки и получить ее можно, используя предназначенные для этого объекты и методы API отражения. Она может потребоваться как просто для получения метаданных об интересуемых объектах, так и для генерации используемого их кода в момент работы приложения либо через сам Reflection API из пространства имен System.Reflection.Emit, либо через API LINQ Expressions из пространства имен System.Linq.Expressions. В данной статье мы не будем касаться генерации кода, а рассмотрим другую возможность, которую предоставляет отражение — это доступ к членам типов или к членам их экземпляров, вызов их методов и активацию событий.

Читать далее

ООП мертв, да здравствует ООП

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

Концепцию ООП часто применяют для отражения объектов реального мира в коде программ. Так объект реального мира "Пользователь" может быть описан в коде как класс "Пользователь", у которого есть поля: имя и адрес электронной почты, а действия, которые можно совершить над объектами реального мира, превращаются в методы класса: назначить администратором, удалить учетную и т.д. 

Читать далее

Автомаппер для бедных

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

После первого знакомства с библиотекой AutoMapper многие испытали вау-эффект. Круто, можно маппить обьекты, можно писать запросы поверх DTO (проекции) и все магическим образом работает (ну или приходится верить, что работает). Это ли не чудо?

Однако, с опытом, стали очевидны недостатки использования этой библиотеки и их достаточное количество. А что если обойтись без автомаппера?

Читать далее

Введение в GraphQL для .NET-разработчиков: мутация

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

GraphQL представляет из себя язык запросов и манипулирования данными для API, а также среду для выполнения этих запросов с существующими данными. Он позволяет различным клиентам использовать API и запрашивать только те данные, которые им нужны, а также он помогает решить проблемы, которые есть у некоторых REST-сервисов, такие как избыток и недостаток данных. В этой статье я расскажу о мутациях в GraphQL. Для доступа и хранения данных буду использовать Entity Framework.

Читать далее

Сортировка слиянием — не так просто, как кажется

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

В одной конторе соискателю на позицию Senior C# developer выдали тестовое задание: отсортировать файл со строками определенного формата.

Требования такие:

* Формат строки: число, точка, пробел, далее любые символы до конца строки.

* Порядок сортировки — сначала сортируем текстовой части строки, потом по числу если текстовые части совпадают.

* Кодировка — UTF-8.

* Размер файла — 100гб - гарантированно больше объема ОП.

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

Как и многие другие программисты, узнав о таком тестовом задании, я возмутился. Внешнюю сортировку слиянием практически всех проходили в ВУЗе, но практически никто никогда не писал её. Задача очень непрактическая и непонятно какие навыки проверяет. Так мне казалось.

Эта задача вызвала бурные обсуждения о способах её решения. Многие программисты, причисляющие себя к рангу senior, предложили использовать базы данных, ибо не барское это дело - вручную писать алгоритмы сортировки. Некоторые даже попытались сделать решение на Apache Spark. Однако никто до конца задачу не решил, ибо мало кому удалось отсортировать в нужном порядке даже 10ГБ файл менее чем за 15 минут без SSD.

Я подумал, что стоит решить задачу до конца с помощью программирования, и тоже причислить себя к рангу senior developer.

Читать далее

Книга «C# 10 и .NET 6. Современная кросс-платформенная разработка»

Время на прочтение12 мин
Охват и читатели28K
image Привет, Хаброжители!

Шестое издание книги серьезно переработано, добавлены все новые функции, реализованные в версиях C# 10 и .NET 6.

Вы изучите принципы объектно-ориентированного программирования, научитесь писать, тестировать и отлаживать функции, реализовывать интерфейсы и наследовать классы. В издании рассматриваются API .NET, призванные решать такие задачи, как управление данными и их запросами, мониторинг и повышение производительности, а также работа с файловой системой, асинхронными потоками, сериализацией и шифрованием. В книге приведены примеры кода кросс-платформенных приложений, веб-сайтов и служб, которые вы можете создавать и развертывать на основе ASP.NET Core.
Читать дальше →

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