Вадим Мартынов, руководитель команды платформы надёжности в Яндекс Go, в своём докладе рассказал, как влияют те или иные решения на надёжность системы и как это учитывать при разработке.
Программист
Пришло время пересмотреть структуру проектов на .NET
C релизом .net 6 у нас появился новый упрощенный подход для быстрого создания сервисов — Minimal APIs. Эта статья появилась потому, что с новым подходом появились новые вопросы, связанные с организацией кода внутри проекта.
Это — немного вольный перевод статьи "Maybe it's time to rethink our project structure with .NET 6" от Tim Deschryver про подход к созданию сервисов с помощью Minimal APIs, который может помочь нам сделать архитектуру приложения более чистой, простой и легкой в поддержке и развитии.
Cписок ИТ-компаний, которые проводят стажировки в Ростове-на-Дону, Таганроге или удаленно в 2023
Вообще‑то, такой пост уже был в 2017ом. Но каждый год список меняется, поэтому мы cобрали в одном месте (и регулярно обновляем) компании, которые проводят стажировки для студентов в 2023 году в Ростове, Таганроге или удаленно.
В этом году можно найти стажировки по Java, С#, Kotlin, JS, Go, Python, С++, Swift, FPGA, PHP, Ruby, Flutter, QA, DevOps, ML, Scala,.NET, SQL, дизайну и аналитике от 10 компаний. Актуальная версия есть на github, а в посте есть текущий список и пару рекомендаций для стажёров.
Ростов-на-Дону: IT-компании, сообщества и мероприятия в 2022 году
Статья про местное ИТ-сообщество в 2019 году была посвящена Ростову и городским сообществам. В 2020-ом мы писали про Таганрог. В прошлом году я решил написать о необычных форматах митапов в Ростове — ИТ-баре, ИТ-стендапе, йога-митапе, ИТ-ЧБД и традиционной конференции с бассейном. Пора подводить итоги этого года.
Что будет в этой статье: как сделать ежегодное исследование ИТ-сообщества для полутора тысяч человек, рассказ про самый большой JS-митап в парке для 400 человек, итоги опроса и планы на 2023 год.
Сравнение AutoMapper и Mapster
Использование автоматизированных инструментов преобразования объектов (object-object mapping) может помочь в организации кода и отделении ответственности за преобразования в отдельный изолированный уровень приложения.
AutoMapper — самая популярная библиотека для маппинга объектов в dotnet — NuGet-пакет скачали больше 313 миллионов раз за 11 лет существования библиотеки.
Mapster появился на 4 года позже AutoMapper и имеет 8.2 миллионов загрузок на nuget.org. Популярность отличается больше, чем на порядок, так зачем бы вообще смотреть на альтернативу AutoMapper? Дело в том, что Mapster обещает лучшую производительность и меньший объем памяти по сравнению с другими библиотеками маппинга объектов, поэтому стоит по крайней мере рассмотреть использование этой библиотеки и понять возможности для замены автомаппера на мапстер.
.NET 6: PriorityQueue
В .NET 6 появилась новая коллекция — PriorityQueue<TElement,TPriority>. До этого очереди с приоритетами уже были в .NET, но только в виде внутренних классов — они использовались под капотом разных механизмов в WPF, Rx.NET и в других частях фреймворка.
Но в .NET 6 PriorityQueue стала новой коллекцией, которой теперь можно пользоваться из клиентского кода. Давайте посмотрим, что предлагает эта очередь, как она устроена внутри и насколько быстро работает. Под катом будет постепенное погружение: от примеров использования в коде к введению n-арные деревья.
Эффективная генерация сортируемых GUID для первичных ключей БД на клиенте
Использовать Guid.NewGuid()
в качестве первичного ключа в базе данных — плохая с точки зрения производительности идея. Это связано с тем, что в SQL Server, MySQL и некоторых других БД для первичных ключей создаются кластерные индексы, которые определяют, как строки будут храниться на диске. GUID — это по сути случайное значение, поэтому новая строка может попасть в начало, середину или конец таблицы. Серверу БД в этом случае придётся перемещать другие строки, что приведёт к фрагментации данных, а их извлечение может занять больше времени, если вам нужно извлечь несколько добавленных последовательно записей (например, когда вы добавляете набор связанных сущностей, которые потом будут извлекаться вместе — БД понадобится прочитать данные из разрозненных страниц вместо последовательного чтения набора данных).
Поэтому, чаще всего, лучше пользоваться сгенерированными БД первичными ключами. В SQL Server, например, есть функция NEWSEQUENTIALID()
, которая генерирует последовательные GUIDы. Зачем может понадобиться генерировать ключи именно на клиенте и как это правильно сделать?
22 новых фичи C# — каким будет C# 11+
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. Предупреждения для имен типов полностью в нижнем регистре.
Внутри — разбор каждой фичи и сценарии применения.
Roslyn-анализатор для преобразования кода из Regex в новый Regex Source Generator
Source generators (генераторы исходного кода) — это часть платформы Roslyn, которая появилась в .NET 5. Они позволяют анализировать существующий код и создавать новые файлы с исходным кодом, которые в свою очередь могут добавляться в процесс компиляции.
В .NET 7 появилась новая функиональность для регулярных выражений, которая позволяет генерировать исходный код для проверки регулярного выражения во время компиляции с помощью специального source generator. Генерация исходного кода во время компиляции, а не во время выполнения, имеет несколько преимуществ:
Запуск фоновых задач в asp.net core
Небольшой обзор стандартных средств запуска бэкграунд-задач в аспнет приложениях — что есть, чем отличается, как пользоваться. Встроенный механизм запуска таких задач строится вокруг интерфейса IHostedService и метода-расширения для IServiceCollection — AddHostedService. Но есть несколько способов реализовать фоновые задачи через этот механизм (и ещё несколько неочевидных моментов поведения этого механизма).
Ростов-на-Дону: IT-компании, сообщества и мероприятия в 2021 году
Привет, меня зовут Вадим и я всё ещё занимаюсь развитием ИТ-сообщества в Ростове. В 2021 у нас было много интересного — исследование ит-сообщества на 1500 человек, 70 митапов и самая большая на юге конференция с 1200 участниками и 50 спикерами со всей страны. Прошлые посты были посвящены городам — Ростову и Таганрогу. В этот раз хочу больше рассказать о мероприятиях и том, как встречается Ростовское ИТ-сообщество.
Ростов-на-Дону: IT-компании, сообщества и мероприятия в 2020 году
В прошлой статье "Ростов-на-Дону: IT-компании, сообщества и мероприятия в 2019 году" я рассказывал о том, чем живёт и из чего состоит Ростовское сообщество — как мы собираем 60-70 митапов в год, какие компании есть в городе и чем они занимаются.
Готова подборка интересного из 2020 и планы на 2021 год — новые сообщества, бум митапов, ИТ-конференция с бассейном и результаты опроса о том, где хотят работать местные разработчики. А еще немного про уникальный феномен Таганрога — города с самой большой концентрацией ИТ-специалистов на человека. И, конечно, приглашение в гости к Ростовскому ИТ-сообществу. Но давайте по порядку.
Почему онлайн-митапы никогда не заменят оффлайн, что с этим делать и почему онлайн всё равно нужен
В прошлом году я был на 50+ митапах, нескольких конференциях и на паре хакатонов.
За последние пару месяцев я сходил на 30 онлайн-мероприятий разных форматов, и хочу рассказать, почему зря потратил это время, в чём проблема с онлайн (и офлайн) митапами и что мы можем сделать чтобы оказаться в чуть лучшем мире. Давайте по порядку.
Зачем приходить на митапы
Онлайн-паб 23 мая: холиварим про облака, JS и мобилки
Никаких скучных докладов, соберем 12 экспертов и сделаем живой разговор с аудиторией. Будем говорить про облака в реальном мире, проблемы заезда, неожиданные косты и стереотипы, которые есть вокруг облачных сервисов. Попробуем понять, кто такой хороший JS-разработчик, каким он должен быть и должен ли он вообще что-нибудь кому-нибудь. Подумаем, как дела с мобильной разработкой в 2020 и сколько осталось жить флатеру.
Как всё будет и где смотреть:
Ростов-на-Дону: IT-компании, сообщества и мероприятия в 2019 году
В 2016 году spasibo_kep написал статью "Едем в город южный: как живут разработчики в Ростове-на-Дoну" о Ростовском IT. Пришло время её обновить, тем более, что Ростов в 2019 году стал 4ым в России городом по интенсивности IT-мероприятий и активности сообщества. Статья будет полезна тем, кто думает о релокации, хочет узнать про IT-жизнь за пределами столиц, или интересуется развитием IT-сообществ.В статье будет чуть-чуть о климате и географии и очень много о компаниях и сообществе.
Сравнение строк в C# (по умолчанию)
К счастью, стоимость этих операций равна O(n). Но в случае больших коллекций нам важна эффективность самого сравнения. Если в качестве ключей выбраны строки, то какая из реализаций сравнения будет использована по умолчанию, подходит ли эта реализация для ваших строк и можно ли, указав IEqualityComparer<string> явно, сделать эту операцию быстрее?
clients.Join(orders,
c => c.Name,
o => o.ClientName,
(c, o) => CreateOrederDto(c, o));
Как же выбирается реализация компаратора, если пользователь не указал её явно?
Базовая реализация INotifyPropertyChanged
Проблема
В случае с INPC в ViewModel часто существуют свойства, зависящие от других или вычисляемые на их основе. Для .net 4.0 ситуация с реализацией усложняется тем, что CallerMemberNameAttribute не поддерживается в этой версии (на самом деле поддерживается, если вы маг и кудесник).
Решение
Действительно прозрачное использование WCF
Мотивация
Для desktop-мира wcf остаётся самым распространенным способом организации клиент-серверного взаимодействия в .net как для локальных, так и для глобальных сетей. Он гибок в настройке, прост в использовании и прозрачен.
По крайней мере, так должно быть. На практике добавление нового сервиса — это рутина. Нужно не забыть прописать конфигурацию на сервере, сделать то же самое на клиенте, нужно написать или сгенерировать proxy-класс. Поддерживать конфиги неудобно. Если сервис изменился, то нужно вносить изменения в proxy-класс. А ещё не забыть про регистрации в IoC-контейнере. И добавление новых хостов для новых сервисов. И еще хочется простой асинхронности. По отдельности всё просто, но даже для статьи я дописывал этот список уже трижды, и не уверен, что не упустил чего-нибудь.
Время автоматизировать. Простейший сценарий от создания решения до вызова wcf-сервиса выглядит так:
- Install-Package Rikrop.Core.Wcf.Unity
- Пишем ServiceContract и их реализации
- На сервере и клиенте добавляем одну строку регистрации в IoC (конфиги править не надо)
- Поднимаем хосты с двух строк
var assembly = Assembly.GetExecutingAssembly(); _serviceHostManager.StartServices(assembly);
- На клиенте резолвим IServiceExecutor<TService>. Эта обёртка служит для вызова методов сервиса и скрывает работу с каналом.
- Можно пользоваться
var articles = await _myServiceExecutor.Execute(service => service.GetArticles());
Авторегистрируемые в Unity репозитории на .net для EF Code first
Мотивация
- Есть проект с Entity framework (>= 5.0.0.0) code first.
- Вы любите IoC, но не любите бесконечные регистрации новых сущностей.
- В качестве контейнера используется Unity (или есть возможность потратить 10 минут на допиливание исходников под свой контейнер).
- Перспектива написания однотипного кода почему-то отпугивает вас.
Итак, что предлагает эта статья. Вы подключаете 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);
});
Как быстро начать использовать
Starban. Гибкая методология разработки, геймификация и еще много модных слов
- Вы разработчик ПО, руководитель группы разработки, менеджер проекта или его эквивалент.
- Над проектом работает больше одного программиста, желательно — больше трех.
- Вы пробовали все эти скрамы и эджайлы, почувствовали их прелесть, но есть определенные нарекания к догматическому следованию методологии. Возможно, у вас никто не занимается постановкой процессов совсем и задачи просто «накидываются».
- Команда устала (от проекта, от стресса, ...) и в скором времени всех ждут кнуты и пряники.
Хорошо, есть методология, которая выдумана командой программистов «для себя», но которую, по нашему мнению, будет интересно попробовать и другим. Внутри команды воссоздаётся небольшая экономическая модель рыночных отношений, а приоритеты регулируются при помощи курса внутрикомандной валюты.
Information
- Rating
- 1,219-th
- Location
- Ростов-на-Дону, Ростовская обл., Россия
- Works in
- Date of birth
- Registered
- Activity