Обновить
128K+

.NET *

Хаб со знаниями про .NET

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

Эффективное применение NuGet. Часть 2: свои пакеты и декомпозиция монореп

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

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

Читать далее

Новости

CraftHub: я устал редактировать JSON руками — а сообщество помогло превратить это в удобный инструмент

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

Полгода назад я так устал вручную ковыряться в JSON, что написал свой редактор — просто чтобы не сойти с ума. Выложил статью на Хабр, не ожидая ничего особенного. А в итоге получил 54 звезды, 4 форка и десятки комментариев с болью, очень похожей на мою: у кого-то конфиги для Unity, у кого-то — прошивки, у кого-то — просто ненависть к блокноту как JSON-редактору. Рассказываю, как усталость от рутины превратилась в проект, который теперь развивает не только один человек, а целое небольшое комьюнити.

Читать далее

redb.Route: два маршрута за вечер — от отладочного воркера до энтерпрайза на Tsak

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

Серия: redb ecosystem / redb.Route redb.Tsak

Есть у интеграционного кода одна неприятная особенность. Написать пару маршрутов — «принял HTTP, положил в базу, отдал обратно» — дело на полчаса. А вот довести это до состояния, когда оно крутится в проде, само поднимается, показывает метрики, умеет останавливать/запускать отдельные куски руками и разворачивается без пересборки — это обычно совсем другая история и совсем другой стек.

В этой статье я покажу, что в связке redb.Route + redb.Tsak это буквально один и тот же код. Мы:

Читать далее

Я ненавижу AutoMapper

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

Признайтесь, и вы тоже. Наверное, нет более противоречивой библиотеки в мире .NET чем AutoMapper. Тысячи проектов его используют, а разработчики этих проектов страдают. Страдают, когда нужно быстро ответить на вопрос "Откуда, %$&дь, тут взялось это значение?!". Ты наводишься на setter, нажимаешь на Alt+F7 и видишь то самое Usage of 'Propery.set' were not found.

Еще раз выругавшись, ты понимаешь, что это свойство устанавливает AutoMapper, идёшь искать конфигурацию…

Знакомо? Пора с этим заканчивать.

Читать далее

Гуманоидные роботы: От лабораторных экзоскелетов до домашних ассистентов за 40 тысяч долларов

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

Интервью с Сергеем Лоншаковым, архитектором проекта «Робономика»: о том, почему роботы будут в спортивных костюмах, сколько стоят их пальцы и когда они начнут разбирать посудомойку.

Гуманоидные роботы перестали быть фантастикой — они стали реальностью, которая постепенно входит в нашу жизнь. Но так ли близок день, когда робот-помощник будет разбирать посудомойку, выносить мусор и встречать гостей? О том, что происходит в индустрии на самом деле, мы поговорили с Сергеем Лоншаковым — визионером компании AIRA и архитектором проекта «Робономика». За плечами Сергея — более десяти лет экспериментов с робототехникой, три поколения выпускников ИТМО и множество проектов от дронов-доставщиков до роботов-вафлипекарей.

Читать далее

redb.Route — уходим от MassTransit, идём к Apache Camel: Kafka, Scatter‑Gather и транзакции

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

Серия: redb ecosystem / redb.Route deep-dive

Очередная статья из цикла про redb.Route — наш Apache Camel под .NET. Если вы только подключились, вот предыдущие на Хабре:

redb.Route — Apache Camel для .NET, который мы написали потому что выхода другого не было — с чего всё началось;

redb.Route изнутри: четыре in‑memory канала и Exchange, который их связывает;

redb.Route 3.0.1 — плоская навигация по DSL, рефакторинг CRTP и тихий null;

Apache Camel под .NET, разбор по косточкам: HTTP‑коннектор без ASP.NET MVC + паттерн Content‑Based Router — предыдущая «EIP + коннектор».

Сегодня заходим с Kafka‑коннектора — разбираем его по косточкам, как делали с HTTP, — а потом сажаем на него два EIP‑паттерна: Scatter‑Gather и Aggregator. И главное — разбираем то, о чём в туториалах молчат: как это живёт под транзакциями. Заодно вышел 3.2.0.

Читать далее

Как стримить данные в ASP.NET и как их принять

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

Недавно мне попалась отличная статья про IAsyncEnumerable и стриминг данных. В ней у автора упал прод, который пытался выдать 500 000 записей разом и упал на вызове ToListAsync() с OOM при 8 ГБ RAM. Далее в статье описывается, как все это стримить с помощью IAsyncEnumerable с примерами кода. В целом после прочтения статьи может сложиться впечатление, что все свои ToListAsync() срочно нужно убрать и заменить на стриминг.

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

Читать далее

Теплые и влажные Плитки для документов на C#: не проводник

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

Не “проводник”, а визуальное пространство документов, что-то ближе к COSMOS (от Waves)-подходу, где файлы живут плитками, имеют вес, цвет, превью, теги, статус и историю.

Всем привет. :?*(*%:%=)

Ниже разбор, как мы шли от красивых, но тяжёлых плиток к более живому и быстрому интерфейсу на C#
И давайте сразу разберемся с плитками (Тут только о плитках)

Читать далее

Анатомия SQLite-провайдера: уходим от EF Core — типизированное хранилище для десктопа, мобайла и Blazor WASM

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

Серия: redb ecosystem (инженерный разбор после анонса 3.2.1)

Когда вышел SQLite-провайдер 3.2.1, анонс был на пару абзацев: «тот же LINQ, одна строка в DI». Эта статья — противоположность анонса. Здесь не «что вышло», а как оно устроено и где у нас потекло. Конкретно: как движок запросов redb переехал в нативное C-расширение там, где у базы нет хранимок; как мы храним DateTimeOffset в базе, у которой нет типа «дата»; и три бага из этого релиза, разобранные с фильтр-JSON, сгенерированным SQL и фиксом.

Это длинно и с кодом. Если хочется коротко — читайте анонс по ссылке выше. Если интересно, что под капотом «одной строки в DI», — устраивайтесь.

Читать далее

Мессенджер с Web3 размером в 3.5 Мб: инди-разработка с нулевым бюджетом

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

ПРЕКРАСНОЕ ДАЛЕКО

Мир цифровых технологий постоянно удивляет. Сначала появились супер процессоры с тактовой частотой аж 8 мегагерц (КР1810ВМ86М — до 8 МГц), затем память (К565РУ7 - Клон Intel 41256), удивляющая своими гигантскими объемами в 256 килобай при наборе из 8 штук. Казалось, мир сошел сума и достиг поистине фантастических возможностей. Но это было в далекие 90-е.

Вспоминаю как спустя пару лет впервые запустил установку своей Windows 95 ставя будильник на два часа позже, чтобы не пропустить фееричный запуск окончания установки на моем первом DX386 с 40 мегагерцами в турборежиме. Чуть позже написал своё первое приложение на Turbo Basic, размер которого составлял всего пару десятков килобайт. Славные были времена, ведь мне тогда было около 20-ти лет.

ВСЕ ВЫШЕ И ВЫШЕ

Время шло. Технологический прорыв казалось никак не мог затихнуть. Процессоры, память, интернет, все стремительно развивалось и уже никто не думал об ограничениях. Появились первые мессенджеры. ICQ со своим уникальным "ку-ку" звучал во всех офисах. Помню даже на некоторых фирмах штрафовали своих сотрудников за использовании мессенджера на рабочем компьютере. Появились первые программы по автоматизации финансовой деятельности предприятий. 1С-ку кажется уже знают все. Встроенный язык программирования, да ещё и с русским диалектом. Вау, вот времена наступили. Всё крутиться, сверкает и манит в магазин компьютерной техники прикупить очередную видюху с двумя или даже тремя куллерами. Эх, где же вы мои любимые Trident TVGA или Cirrus Logic с одним мегабайтов видеопамяти?

Читать далее

«Охота на лис» в XXI веке: забытый радиоспорт в новом техно стиле

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

"О спорт, ты — мир!" — это замечательная фраза основателя современных Олимпийских игр Пьера де Кубертена.

И с этим трудно не согласиться, ведь спорт, не только укрепляет здоровье но и объединяет людей. В этой статье я хочу рассказать, как я объединил некогда популярный вид состязаний "Охота на лис" с современными технологиями, ведь его основные принципы лежали в плоскости геолокации и радионаблюдения. Рожденный ещё в далекие 50-е, этот вид спорта неумолимо двигался по планете привлекая все больше и больше своих поклонников.

Несмотря на своё название, никакой реальной охоты здесь не было. Участники состязаний занимались поиском скрытых источников сигнала радио-маячки работающие в коротковолновом диапазоне частот, используя специальные приёмники-пеленгаторы. Сегодня "Охота на лис" по-прежнему существует, однако ее популярность заметно снизилась. Одной из причин является остутствие финансирования и низкая осведомленность среди молодежи.

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

Читать далее

От набора PDF-файлов до портала технической документации на 2,5 тысячи статей

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

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

Читать далее

File-based apps в .NET 10

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

Для небольших скриптов на C# долгое время приходилось создавать полноценный проект даже ради нескольких строк кода. В.NET 10 появилась поддержка file‑based apps — теперь приложение можно запускать и публиковать прямо из одного.cs‑файла. Разбираемся, как это работает и где новый подход действительно полезен.

Читать далее

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

Source generators в.NET: как они вытеснили рефлексию из стандартной библиотеки

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

Ещё несколько лет назад рефлексия считалась нормой для.NET‑приложений. Сегодня Microsoft последовательно выносит всё больше работы из runtime в этап компиляции: JSON‑сериализация, логирование, регулярные выражения, конфигурация и даже тестовые фреймворки всё чаще опираются на source generators.

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

Читать далее

Все тесты зелёные, платежи зависли: 5 граблей интеграции без песочницы

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

Осенью 2022-го мы добавляли в наш платёжный агрегатор новый способ оплаты: плательщик уходит по ссылке в приложение своего банка, подтверждает платёж там, а банк присылает нам нотификацию о результате. Песочница у банка была, формально. Отвечала статусами из позапрошлой версии протокола, а нотификации не присылала вообще; обещанные доработки ехали к нам дольше, чем наш дедлайн. Мы перестали ждать и написали двойника провайдера сами - по PDF со спекой, с тестом на каждый сценарий из документации. CI зелёный. Запускались осторожно, тремя волнами мерчантов: первые две прошли тихо. После третьей в саппорт пошли тикеты: у плательщика деньги списаны, у мерчанта платёж висит.

Читать далее

Дистрибуция Avalonia-приложений под Linux через Flatpak

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

Под Windows и macOS есть универсальные форматы инсталлеров, которые работают на всех версиях этих ОС. А вот с Linux ситуация иная. Экосистема Linux фрагментирована. Применяется несколько разных форматов упаковки приложений. Flatpak решает эту проблему. В этой статье мы делимся опытом разработки Flatpak инсталлера для AvaloniaUI приложения.

Читать далее

Код — больше не первая стадия: эксперимент с агентами

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

Самый частый сценарий в моей практике: бизнес дает полстраницы требований, а через день спрашивает «ну что, готово?». Между ними — зона ответственности разработчика: уточнить, формализовать, согласовать. И только потом писать код. За последние пару лет этот процесс изменился сильнее, чем технологии.

Читать далее

Паттерны и подходы разработки, о которых все говорят — на примере .NET

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

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

Я Александр Середин, ведущий разработчик в «БАРС Груп», в этой статье покажу путь от библиотеки классов до Web API и по шагам разберу, что мы используем (Composition Root, Dependency Injection, Generic Host, Options, HTTP‑pipeline) в .NET — как использовать их в качестве фундамента, а не пытаться изобретать собственные велосипеды.

Читать далее

Как я устал вести ИТ‑активы в Excel и написал свой ITAM/CMDB

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

Любой ИТ‑отдел рано или поздно приходит к таблице.

Сначала она выглядит безобидно: инвентарный номер, пользователь, кабинет, модель компьютера, серийный номер. Потом туда добавляются мониторы, принтеры, картриджи, счета, договоры, лицензии, гарантия, комментарии, история ремонтов, перемещения между отделами, списание, выдача, возврат, кто кому что передал и почему у нас опять «где‑то был такой же блок питания».

Через какое‑то время это уже не таблица, а маленькая самописная CMDB, только без связей, истории, прав доступа, нормального поиска и уверенности, что данным можно доверять.

В какой‑то момент я понял, что мне нужна не просто «ещё одна база компьютеров», а единая система для повседневной работы ИТ‑службы: техника, пользователи, документы, счета, лицензии, картриджи, удалённая поддержка, история изменений и автоматическая инвентаризация. Так появился Admin Desk.

Это не статья в стиле «я сделал идеальную систему». Скорее рассказ о том, почему простая задача учёта техники быстро превращается в продукт, где самое сложное — не CRUD, а связи между объектами, история, права, эксплуатация и удобство для реального администратора.

Читать далее

Аллокации, которых нет в коде: охота на скрытый боксинг в .NET 10

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

Вы написали struct ради zero-allocation, прошли code review — а в проде Gen0-коллекции всё равно идут косяком. Самая дорогая аллокация та, которой нет в исходниках: компилятор молча упаковывает ваш value-тип в кучу там, где вы этого не просили.

Разбираю, где скрытый боксинг живёт и на .NET 10 (интерфейс на struct, foreach по IEnumerable, ValueType.Equals, params object[], замыкания), а где рантайм его уже вырезал — и почему слепо чинить HasFlag по гайдам 2015 года вредно. Два прод-кейса, шпаргалка-таблица, бенчмарк на BenchmarkDotNet и охота на box через DOTNET_JitDisasm и dotnet-gcdump.

Читать далее
1
23 ...