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

C# *

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

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

Арбитраж криптовалют — или переливаем из пустого в порожнее

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

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

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

Мне интересно

Нужно ли системному аналитику разбираться в программировании?

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

Мне стало интересно: насколько глубоко системный аналитик уровня Senior должен разбираться в программном коде? Где проходит грань между бизнес-фокусом и технической вовлечённостью?

Чтобы ответить на этот вопрос, я провёл исследование и опросил почти 200 системных аналитиков. Мы выяснили, какие технические навыки сегодня считаются must-have, а какие по-прежнему остаются "по желанию".

В статье я делюсь результатами опроса, реальными кейсами, мнениями коллег и выводами о том, как трансформируется роль системного аналитика в современных командах. Если вы аналитик, тимлид или архитектор - будет интересно.

Читать далее

Объясняем UniTask так, чтобы понял даже ребенок (для Unity разработчиков и не только)

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

Пишешь игру на Unity? Нужна производительность?
UniTask – решение!
Просто о сложном в этой статье. (Примеры про роботов, лего и машинки уже тут)

Читать далее

Гайд на полиморфизм. Основные идеи

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

Полиморфизм, сколько в этом слове красивого и даже таинственного. Происходит от греческого πολύμορφος что означает — многообразный.  В программировании это понятие встречается часто и  обыденно для понимания большинством программистов. Но так ли это на самом деле? 

Читать далее

.NET Digest #7

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

Добро пожаловать на седьмой выпуск нашего дайджеста, посвящённого новостям и событиям в мире .NET! В этот раз мы расскажем про .NET 10 preview 2 и 3, новый релиз Mono, множество интересных статей и, конечно же, AI. Команда PVS-Studio рада представить вам подборку самых интересных и полезных материалов. Поехали!

Читать далее

Добавление слов в языковую модель Vosk

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

Краткий гайд, как дополнить vosk модель распознавания речи своими словами. Для дальнейшего использования в своих проектах. Все подводные камни в использовании инструмента kaldi в 2025 году.

Принять испытание

readonly struct в C#

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

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

Вы, вероятно, уже сталкивались с struct в C# и задумались: а зачем нужен readonly struct и когда он реально спасает, а когда, наоборот, начинает всё тормозить? Сегодня это и рассмотрим.

Читать далее

Всё про Generic Math в C#

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


С момента своего релиза в C# 11 и .NET 7 Обобщённая Математика так и осталась тёмной лошадкой в глазах программистов. Разработчики не понимают и не используют эту фичу, статья же ответит на все вопросы и разложит всё по полочкам.

Рассмотрим с нуля концепцию Generic Math. Как она выглядит в C# и других языках программирования, почему вообще появилась. Также зароемся в «кишки» System.Numerics и узнаем, как применить в продакшне кровавого ынтэрпрайза.
Читать дальше →

Как построить надежную архитектуру B2B-системы на основе 1С

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

Здравствуйте! Меня зовут Дмитрий Гусаков, я менеджер проектов компании DD Planet. В своей статье я расскажу, почему нельзя использовать 1С как полноценный бэкенд в современных B2B-системах, с какими ограничениями могут сталкиваться разработчики, и как выстроить надёжную структуру, используя дополнительный слой бэкенда и брокеры сообщений.

В России существует острый дефицит отечественных продуктов для автоматизации бизнеса. 1С — один из немногих российских игроков на этом рынке. В условиях активного импортозамещения он стал основным кандидатом на замену западных систем, вроде Oracle CRM, ERP SAP и все больше российских компаний переходят на эту платформу. Однако сам по себе этот переход не решает всех проблем.

Читать далее

ООП или не ООП — вот в чём ревью

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

Псевдокод, страсть и pull-request на грани добра и зла

Кто-то звал Smalltalk, кто-то бросал в нас Haskell, кто-то доставал из-под кровати подшивку статей «ECS лучше всего» — и всё это с праведной уверенностью.

Читать далее

WPF приложения на Android, iPhone, iPad, Mac и Windows

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

Уже более пяти лет мы занимаемся разработкой OpenSilveropen-source-фреймворка, который позволяет переносить приложения на базе WPF и Silverlight в современный веб. Проект стабильно развивается, активно используется в корпоративной среде, и недавно мы задумались о том, как расширить возможности наших пользователей и запустить существующие приложения ещё и на iOS и Android.

Поскольку под капотом OpenSilver использует платформу Blazor, логичным шагом стала интеграция с .NET MAUI Blazor Hybrid. В этой статье я расскажу, как прошла интеграция и какие результаты мы получили на практике. Забегая вперёд, скажу, что результатом мы остались очень довольны!

Читать далее

Как автоматизация рутинных процессов помогает не доводить клиента до истерики

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

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

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

Простота — это тоже прогресс

Как это заработало в РГС?

ООП не мертво. Вы просто пользуетесь им как молотком по клавиатуре

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

После каждой новой статьи с заголовком «ООП — это обман» хочется напомнить: ООП — это не набор шаблонов из книжек, а инженерный подход. Если проект страдает от наследования и DI, возможно, проблема не в ООП. А в том, как вы его применяете.

Читать далее

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

JSON в Unity за 10 минут

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

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

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

Читать далее

ООП — это скам

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

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

После прочтения большинства этих статей и нескольких лет кодинга на C# я заявляю: «ООП - это один большой обман. Никто не понимает, что это такое. Люди просто говорят какие-то умные термины, их собеседники с умным видом кивают, хотя на деле трактуют эти же термины совершенно по-разному».

И вот почему.

Читать далее

Как работает SelectMany в LINQ

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

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

Когда вы первый раз наткнётесь на метод SelectMany() в LINQ, может показаться, что это тот же Select(), только с вишенкой в виде какой-то автоматической распаковки коллекций. На деле же у этого маленького утилитарного метода гораздо более хитрая внутренняя механика, и понимание того, как он плющит коллекции, существенно расширит ваш инструментарий при работе с данными.

Читать далее

Эволюция конструктора email-рассылок Mindbox: от шаблонов с минимальными настройками до комбайна на собственном языке

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

Всем привет, на связи Петр Никитин, frontend-разработчик Mindbox.

Mindbox — это платформа автоматизации маркетинга. Одна из задач, которую наши клиенты решают с помощью нее — запуск email-рассылок и сценариев. Чтобы облегчить им задачу и не заставлять маркетологов писать HTML-код, мы разработали конструктор рассылок: письмо собирается из готовых блоков, а содержание можно настраивать под свои задачи.

В этой статье я расскажу про процесс разработки конструктора, с какими вызовами мы сталкивались и как находили решения. Например, почему в какой-то момент мы решили, что нам тесно в рамках HTML и решили поменять способ разметки шаблонов, а для этого понадобился собственный язык на базе C# — Quokka Mindbox

Читать далее

Сопоставление с образцом на C#: объяснение и примеры

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

За годы своего развития C# существенно эволюционировал; одна из самых мощных фич языка — это сопоставление с образцом (pattern matching).

Работая недавно над небольшим хобби-проектом, я наткнулся на такую прекрасную строку кода C#.

if (person is not null and { Age: > 18 })

{}

Выглядит изящно. Откровенно говоря, она заставила меня призадуматься.

Годами я писал проверки на null и свойства-аксессоры классическим образом:

if (person != null && person.Age > 18)

{}

Функционально? Да. Удобочитаемо? Не особо. Безопасно? Спорно, особенно когда код становится сложнее.

Я решил создать шорт YouTube об этом современном синтаксисе. Это небольшое забавное напоминание о том, что C# позволяет при помощи сопоставления с образцом комбинировать проверки на null и обращение к свойству в одно условие.

Я понятия не имел, что это короткое видео приведёт к гораздо более глубокому исследованию, и покажет мне, насколько полезно и универсально сопоставление с образцом в современном C#.

Эта фича повышает читаемость, уменьшает объём бойлерплейта и обеспечивает более выразительную обработку логики.

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

Читать далее

Сам себе awaiter

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

Сам себе awaiter


image


Здравствуйте. Меня зовут Валерий и я — кодоголиклюблю писать программы. И иногда в процессе написания программ сами собой возникают интересные истории. Об одной такой история я и хочу рассказать в этой статье.


За десять с лишним лет, прошедших с момента изобретения конструкции async/await, она стала привычной и широко используемой. В наше время мало у кого вызывает затруднение написать самому или же понять смысл написанного кем-то другим выражения типа await stream.ReadAsync(buffer,async, count) — ясно, что это — чтение из потока в некий буфер, и что программа тут отдает управление на то время, пока это чтение выполняется, чтобы по завершении чтения получить управление продолжить свое выполнение дальше.


Но что вы скажете, увидев в коде вот такое выражение: await this в одном из методов класса, совершенно не похожего на Task/ValueTask или ещё что-то, что привычно видеть после await? Не правда ли это вас смутит и уж, тем более, вы вряд ли напишете такое сами? А я однажды такое написал в здравом уме и трезвой памяти. И если вам интересно, зачем это было так написано и что за магия тут творитсякак это работает, и как вообще определить свой класс, чтобы ссылку на него можно было указать после await — читайте статью.

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

Когда ТЗ — враг: 7 корпоративных запросов, над которыми плачут программисты

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

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

Итак, начну с собственного реноме. Меня зовут Богдан, я работаю в одном достаточно большом отечественном финтеке вот уже 7-й год и добрую половину из них занимаю позицию Java-лида в одной из интеграционных команд. За такое (относительно) длительное время в энтерпрайзе периодически приходят требования на разработку, от которых хочется или плакать, или смеяться, а то и всё вместе. Происходит это по самым разным причинам, которые мы сегодня касаться не будем. Скажу лишь, что никого не осуждаю, не пытаюсь никого принизить и наверняка сам генерировал нечто схожее, о чем пойдет речь ниже. Также стоит учесть, что мой бэкграунд преимущественно бэкендово-интеграционный, соответственно, и кейсы будут из этой области и контекста. Ну а дальше — по кейсам, по тем 7 кейсам, когда прочитав требования, внутри что-то скукоживается от отвращения либо раздается улыбка во всё лицо — у кого как.

Немного глобального контекста: проект, вокруг которого будут описаны курьезные запросы, — интеграционная шина данных, напичканная самой разной интеграционной логикой, Java-приложение, состоящее из невообразимого количества SOAP/REST-методов, шедуллеров и всяческих очередей.

Читать далее