Как стать автором
Обновить
77
0
Вадим Мартынов @Vadimyan

Программист

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

Пришло время пересмотреть структуру проектов на .NET

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

C релизом .net 6 у нас появился новый упрощенный подход для быстрого создания сервисов  Minimal APIs. Эта статья появилась потому, что с новым подходом появились новые вопросы, связанные с организацией кода внутри проекта.

Это — немного вольный перевод статьи "Maybe it's time to rethink our project structure with .NET 6" от Tim Deschryver про подход к созданию сервисов с помощью Minimal APIs, который может помочь нам сделать архитектуру приложения более чистой, простой и легкой в поддержке и развитии.

Читать далее
Всего голосов 14: ↑11 и ↓3+10
Комментарии24

Cписок ИТ-компаний, которые проводят стажировки в Ростове-на-Дону, Таганроге или удаленно в 2023

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

Вообще‑то, такой пост уже был в 2017ом. Но каждый год список меняется, поэтому мы cобрали в одном месте (и регулярно обновляем) компании, которые проводят стажировки для студентов в 2023 году в Ростове, Таганроге или удаленно.

В этом году можно найти стажировки по Java, С#, Kotlin, JS, Go, Python, С++, Swift, FPGA, PHP, Ruby, Flutter, QA, DevOps, ML, Scala,.NET, SQL, дизайну и аналитике от 10 компаний. Актуальная версия есть на github, а в посте есть текущий список и пару рекомендаций для стажёров.

К списку компаний
Всего голосов 5: ↑4 и ↓1+3
Комментарии1

Ростов-на-Дону: IT-компании, сообщества и мероприятия в 2022 году

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

Статья про местное ИТ-сообщество в 2019 году была посвящена Ростову и городским сообществам. В 2020-ом мы писали про Таганрог. В прошлом году я решил написать о необычных форматах митапов в Ростове — ИТ-баре, ИТ-стендапе, йога-митапе, ИТ-ЧБД и традиционной конференции с бассейном. Пора подводить итоги этого года.

Что будет в этой статье: как сделать ежегодное исследование ИТ-сообщества для полутора тысяч человек, рассказ про самый большой JS-митап в парке для 400 человек, итоги опроса и планы на 2023 год.

Поехали
Всего голосов 7: ↑6 и ↓1+6
Комментарии2

Сравнение AutoMapper и Mapster

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

Использование автоматизированных инструментов преобразования объектов (object-object mapping) может помочь в организации кода и отделении ответственности за преобразования в отдельный изолированный уровень приложения.

AutoMapper — самая популярная библиотека для маппинга объектов в dotnet — NuGet-пакет скачали больше 313 миллионов раз за 11 лет существования библиотеки.

Mapster появился на 4 года позже AutoMapper и имеет 8.2 миллионов загрузок на nuget.org. Популярность отличается больше, чем на порядок, так зачем бы вообще смотреть на альтернативу AutoMapper? Дело в том, что Mapster обещает лучшую производительность и меньший объем памяти по сравнению с другими библиотеками маппинга объектов, поэтому стоит по крайней мере рассмотреть использование этой библиотеки и понять возможности для замены автомаппера на мапстер.

Сравнение, бенчмарки и выводы
Всего голосов 7: ↑6 и ↓1+5
Комментарии10

.NET 6: PriorityQueue

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

В .NET 6 появилась новая коллекция — PriorityQueue<TElement,TPriority>. До этого очереди с приоритетами уже были в .NET, но только в виде внутренних классов — они использовались под капотом разных механизмов в WPF, Rx.NET и в других частях фреймворка. 

Но в .NET 6 PriorityQueue стала новой коллекцией, которой теперь можно пользоваться из клиентского кода. Давайте посмотрим, что предлагает эта очередь, как она устроена внутри и насколько быстро работает. Под катом будет постепенное погружение: от примеров использования в коде к введению n-арные деревья.

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

Эффективная генерация сортируемых GUID для первичных ключей БД на клиенте

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

Использовать Guid.NewGuid() в качестве первичного ключа в базе данных — плохая с точки зрения производительности идея. Это связано с тем, что в SQL Server, MySQL и некоторых других БД для первичных ключей создаются кластерные индексы, которые определяют, как строки будут храниться на диске. GUID — это по сути случайное значение, поэтому новая строка может попасть в начало, середину или конец таблицы. Серверу БД в этом случае придётся перемещать другие строки, что приведёт к фрагментации данных, а их извлечение может занять больше времени, если вам нужно извлечь несколько добавленных последовательно записей (например, когда вы добавляете набор связанных сущностей, которые потом будут извлекаться вместе — БД понадобится прочитать данные из разрозненных страниц вместо последовательного чтения набора данных).

Поэтому, чаще всего, лучше пользоваться сгенерированными БД первичными ключами. В SQL Server, например, есть функция NEWSEQUENTIALID(), которая генерирует последовательные GUIDы. Зачем может понадобиться генерировать ключи именно на клиенте и как это правильно сделать?

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

22 новых фичи C# — каким будет C# 11+

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

1. Полуавтоматические свойства и ключевое словоfield.
2. Модификатор уровня доступа file.
3. Первичные конструкторы для классов и структур.
4. Паттерн-матчинг для списков.
5. Атрибуты для Main в программах с top level statement.
6. Сырые строки без экранирования внутри строки для удобства работы с json, xml, html и регулярными выражениями.
7. Строковые литералы для UTF-8.
8. Паттерн-матчинг для Span<char>.
9. Перенос строк в выражениях интерполяции.
10. Возможность перегрузки операторов с проверкой на переполнение
11. Оператор побитового сдвига вправо без знака >>>.
12. Доступ к параметрам методов nameof.
13.nameof для членов экземпляров.
14. Ключевое слово required для обязательно инициализируемых свойств и полей.
15. Автоматическая инициализация свойств структур значением по-умолчанию.
16. generic-атрибуты.
17. локальные переменные и параметры только для чтения.
18. Кэширование делегатов при использовании method group для статических методов.
19. Поля с значением хранящимся по ссылке.
20.params Span<T>/params ReadOnlySpan<T>/params IEnumerable<T> в объявлении методов чтобы избежать лишних неявных созданий массива в куче и копирований коллекций.
21. Удаление оператора проверки параметров на null !!.
22. Предупреждения для имен типов полностью в нижнем регистре.

Внутри — разбор каждой фичи и сценарии применения.

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

Roslyn-анализатор для преобразования кода из Regex в новый Regex Source Generator

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

Source generators (генераторы исходного кода) — это часть платформы Roslyn, которая появилась в .NET 5. Они позволяют анализировать существующий код и создавать новые файлы с исходным кодом, которые в свою очередь могут добавляться в процесс компиляции.

В .NET 7 появилась новая функиональность для регулярных выражений, которая позволяет генерировать исходный код для проверки регулярного выражения во время компиляции с помощью специального source generator. Генерация исходного кода во время компиляции, а не во время выполнения, имеет несколько преимуществ:

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

Запуск фоновых задач в asp.net core

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

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

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

Ростов-на-Дону: IT-компании, сообщества и мероприятия в 2021 году

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

Привет, меня зовут Вадим и я всё ещё занимаюсь развитием ИТ-сообщества в Ростове. В 2021 у нас было много интересного — исследование ит-сообщества на 1500 человек, 70 митапов и самая большая на юге конференция с 1200 участниками и 50 спикерами со всей страны. Прошлые посты были посвящены городам — Ростову и Таганрогу. В этот раз хочу больше рассказать о мероприятиях и том, как встречается Ростовское ИТ-сообщество.

Поехали
Всего голосов 25: ↑23 и ↓2+26
Комментарии5

Ростов-на-Дону: IT-компании, сообщества и мероприятия в 2020 году

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

В прошлой статье "Ростов-на-Дону: IT-компании, сообщества и мероприятия в 2019 году" я рассказывал о том, чем живёт и из чего состоит Ростовское сообщество — как мы собираем 60-70 митапов в год, какие компании есть в городе и чем они занимаются.

Готова подборка интересного из 2020 и планы на 2021 год — новые сообщества, бум митапов, ИТ-конференция с бассейном и результаты опроса о том, где хотят работать местные разработчики. А еще немного про уникальный феномен Таганрога — города с самой большой концентрацией ИТ-специалистов на человека. И, конечно, приглашение в гости к Ростовскому ИТ-сообществу. Но давайте по порядку.

Погрузиться в атмосферу Ростовского ИТ
Всего голосов 29: ↑29 и ↓0+29
Комментарии13

Почему онлайн-митапы никогда не заменят оффлайн, что с этим делать и почему онлайн всё равно нужен

Время на прочтение6 мин
Количество просмотров2.3K
Мне это надоело.

В прошлом году я был на 50+ митапах, нескольких конференциях и на паре хакатонов.
За последние пару месяцев я сходил на 30 онлайн-мероприятий разных форматов, и хочу рассказать, почему зря потратил это время, в чём проблема с онлайн (и офлайн) митапами и что мы можем сделать чтобы оказаться в чуть лучшем мире. Давайте по порядку.



Зачем приходить на митапы


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

Онлайн-паб 23 мая: холиварим про облака, JS и мобилки

Время на прочтение2 мин
Количество просмотров1.1K
Бывало такое, что на митапе самое интересное вы узнавали не из докладов, а на кофе-брейке или афтерпати, пока общались с спикером или другими участниками? Если да, то давайте пропустим лишнее и пойдём сразу в паб. В онлайн-паб.



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

Как всё будет и где смотреть:
Читать дальше →
Всего голосов 6: ↑6 и ↓0+6
Комментарии4

Ростов-на-Дону: IT-компании, сообщества и мероприятия в 2019 году

Время на прочтение7 мин
Количество просмотров12K
Привет. Меня зовут Вадим и я занимаюсь развитием IT-тусовок в Ростове. Через год после этой статьи я написал следующую: "Ростов-на-Дону: IT-компании, сообщества и мероприятия в 2020 году", так что можно сходить и почитать свежие новости там. А тут я рассказываю, каким был Ростов с точки зрения ИТ в 2019 году.
В 2016 году spasibo_kep написал статью "Едем в город южный: как живут разработчики в Ростове-на-Дoну" о Ростовском IT. Пришло время её обновить, тем более, что Ростов в 2019 году стал 4ым в России городом по интенсивности IT-мероприятий и активности сообщества. Статья будет полезна тем, кто думает о релокации, хочет узнать про IT-жизнь за пределами столиц, или интересуется развитием IT-сообществ.
В статье будет чуть-чуть о климате и географии и очень много о компаниях и сообществе.


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

Сравнение строк в C# (по умолчанию)

Время на прочтение10 мин
Количество просмотров53K
Часто бывает, что мы соединяем 2 коллекции или группируем коллекцию при помощи LINQ to Objects. При этом происходит сравнение ключей, выбранных для группировки или связывания.
К счастью, стоимость этих операций равна O(n). Но в случае больших коллекций нам важна эффективность самого сравнения. Если в качестве ключей выбраны строки, то какая из реализаций сравнения будет использована по умолчанию, подходит ли эта реализация для ваших строк и можно ли, указав IEqualityComparer<string> явно, сделать эту операцию быстрее?
clients.Join(orders, 
                   c => c.Name, 
                   o => o.ClientName, 
                   (c, o) => CreateOrederDto(c, o));

Как же выбирается реализация компаратора, если пользователь не указал её явно?
Пороемся в исходном коде coreclr
Всего голосов 28: ↑28 и ↓0+28
Комментарии1

Базовая реализация INotifyPropertyChanged

Время на прочтение12 мин
Количество просмотров22K
WPF в чём-то повторил судьбу js — в силу некоторых нерешённых на уровне платформы проблем многие пытаются стать первооткрывателями наравне с Карлом фон Дрезем.

Проблема


В случае с INPC в ViewModel часто существуют свойства, зависящие от других или вычисляемые на их основе. Для .net 4.0 ситуация с реализацией усложняется тем, что CallerMemberNameAttribute не поддерживается в этой версии (на самом деле поддерживается, если вы маг и кудесник).

Решение

Как пользоваться и что внутри
Всего голосов 9: ↑7 и ↓2+5
Комментарии12

Действительно прозрачное использование WCF

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

Мотивация


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

По крайней мере, так должно быть. На практике добавление нового сервиса — это рутина. Нужно не забыть прописать конфигурацию на сервере, сделать то же самое на клиенте, нужно написать или сгенерировать proxy-класс. Поддерживать конфиги неудобно. Если сервис изменился, то нужно вносить изменения в proxy-класс. А ещё не забыть про регистрации в IoC-контейнере. И добавление новых хостов для новых сервисов. И еще хочется простой асинхронности. По отдельности всё просто, но даже для статьи я дописывал этот список уже трижды, и не уверен, что не упустил чего-нибудь.

Время автоматизировать. Простейший сценарий от создания решения до вызова wcf-сервиса выглядит так:
  1. Install-Package Rikrop.Core.Wcf.Unity
  2. Пишем ServiceContract и их реализации
  3. На сервере и клиенте добавляем одну строку регистрации в IoC (конфиги править не надо)
  4. Поднимаем хосты с двух строк
    var assembly = Assembly.GetExecutingAssembly();
    _serviceHostManager.StartServices(assembly);
    
  5. На клиенте резолвим IServiceExecutor<TService>. Эта обёртка служит для вызова методов сервиса и скрывает работу с каналом.
  6. Можно пользоваться
    var articles = await _myServiceExecutor.Execute(service => service.GetArticles());
    

Как пользоваться и что внутри
Всего голосов 16: ↑15 и ↓1+14
Комментарии11

Авторегистрируемые в Unity репозитории на .net для EF Code first

Время на прочтение5 мин
Количество просмотров7K
Привет. Приступим.

Мотивация

  1. Есть проект с Entity framework (>= 5.0.0.0) code first.
  2. Вы любите IoC, но не любите бесконечные регистрации новых сущностей.
  3. В качестве контейнера используется Unity (или есть возможность потратить 10 минут на допиливание исходников под свой контейнер).
  4. Перспектива написания однотипного кода почему-то отпугивает вас.

Итак, что предлагает эта статья. Вы подключаете 2 nuget-пакета, реализуете для своих Entity простой интерфейс IRetrievableEntity<TEntity, TId> (можно упростить задачу, отнаследовавшись от готового класса Entity<TId>), добавляете в код 2 строки регистрации и получаете на выходе полную независимость от DBContext и возможность резолвить репозитории для каждой IRetrievableEntity-сущности с возможностью построения объектно-ориентированных (типизированных) запросов к этим репозиториям. Только посмотрите:
var employeeRepository = container.Resolve<IRepository<Emloyee, int>>();
var employees = employeeRepository.Get(q =>
{
    q = q.Filter(e => e.EmploymentDate >= new DateTime(2014, 9, 1));
    if(excludeFired)
        q = q.Filter(e => !e.Fired);
    q = q.Include(e => e.Department, p => p.Department.Chief)
            .OrderBy(p => p.FirstName);
});

Как быстро начать использовать

из коробки
Всего голосов 20: ↑16 и ↓4+12
Комментарии11

Starban. Гибкая методология разработки, геймификация и еще много модных слов

Время на прочтение13 мин
Количество просмотров20K
Поскольку пост некороткий и даже неуместные картинки не делают его чтение легче, то давайте первым делом обозначим целевую аудиторию.
  • Вы разработчик ПО, руководитель группы разработки, менеджер проекта или его эквивалент.
  • Над проектом работает больше одного программиста, желательно — больше трех.
  • Вы пробовали все эти скрамы и эджайлы, почувствовали их прелесть, но есть определенные нарекания к догматическому следованию методологии. Возможно, у вас никто не занимается постановкой процессов совсем и задачи просто «накидываются».
  • Команда устала (от проекта, от стресса, ...) и в скором времени всех ждут кнуты и пряники.


Хорошо, есть методология, которая выдумана командой программистов «для себя», но которую, по нашему мнению, будет интересно попробовать и другим. Внутри команды воссоздаётся небольшая экономическая модель рыночных отношений, а приоритеты регулируются при помощи курса внутрикомандной валюты.
Starban
Всего голосов 14: ↑12 и ↓2+10
Комментарии3

Информация

В рейтинге
Не участвует
Откуда
Ростов-на-Дону, Ростовская обл., Россия
Работает в
Дата рождения
Зарегистрирован
Активность

Специализация

Backend Developer, Community manager
Lead
C#
.NET Core
Database
High-loaded systems
Designing application architecture
Database design