Обновить
128K+

C# *

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

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

Метод, которого не существовало: как я собрал локальный RAG для CAD API

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

Последние годы инжиниринг живёт под одним лозунгом: то же самое, но дешевле и быстрее. Заказчики сокращают бюджеты и сроки, подрядчики ищут, какие процессы можно оптимизировать, и автоматизация проектирования становится одним из первых кандидатов. Рутинных операций в проектировании много, и значительную часть из них можно передать скриптам и небольшим программным утилитам.

Читать далее

redb 3.3.0: решение уровня энтерпрайз на .NET — своя БД, свой Apache Camel и рантайм с дашбордом (и всё это бесплатно)

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

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

Мы пошли другим путём и последние полгода собираем это как одну согласованную экосистему: типизированное хранилище redb поверх Postgres/MSSQL/SQLite, интеграционный движок redb.Route (наш ответ Apache Camel под .NET) и рантайм redb.Tsak с дашбордом, hot-reload и кластером. Три слоя, один код, один стиль.

Сегодня вышла версия 3.3.0 — синхронный бамп всей экосистемы. Это не «добавили пару фич»: это релиз, в котором мы починили то, что молча не работало под нагрузкой (и это, пожалуй, главное), добавили два новых транспорта, довели до конца RAG-петлю для LLM и сделали конкурентность на любом источнике. Ниже — по делу, с кодом.

И сразу главное: с версии 3.3.0 все Pro-решения бесплатны. Никаких лицензий, никаких ключей, никакой регистрации — просто ставишь пакет и юзаешь. Change tracking, bulk, продвинутый кэш, аналитика, кластер Tsak с координатором и failover — всё включено из коробки, в разработке и в проде одинаково. dotnet add package redb.Postgres.Pro — и оно работает. Никакого пейволла, никакого лицензионного сервера, ничего активировать не надо.

Читать далее

CraftHub: научил свой JSON-редактор работать с папкой проекта — и перестал открывать файлы по одному

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

Знаете это чувство, когда правишь JSON и ищешь, где же ты забыл запятую? Я устал и сделал редактор, где JSON — это таблица. А теперь он ещё и открывает папку проекта целиком: дерево файлов, Ctrl+S прямо в файл, drag & drop. Как в VS Code, только заточено под данные.

Читать далее

In-memory база врёт: 5 расхождений с продовой БД

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

Тест на List.AsQueryable() зелёный, а на проде всплывают LINQ-трансляция, null, collation, unique index и два воркера, забравшие один платёж. Разбираю, где in-memory тесты помогают, а где начинают врать.

Читать далее

Архивация текста через инференс llama.cpp

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

Архивация - старая, давно изученная тема ...или нет?

Вспомним как она зарождалась, и как нейроалгоритмы вдохнули в архивацию новую жизнь.

Заодно напишем простой нейроархиватор работающий через инференс любой нейронки.

Читать далее

Plumix: как я переписываю Flutter на C# — вместе с ИИ

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

Я скучал по C#, когда писал на Flutter, и по Flutter — когда писал на C#. Поэтому взял и совместил: Plumix — фреймворк с флаттеровской архитектурой виджетов поверх .NET и Avalonia, который во многом строят ИИ-агенты. Рассказываю про мотивацию, конвейер портирования, текущие фичи и планы.

Смотреть, что получилось

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

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

Каждое лето сотни тысяч абитуриентов пытаются понять одну простую вещь:

Поступлю я или нет?

Казалось бы, все данные открыты. Вузы публикуют конкурсные списки, количество мест известно, правила приёма описаны на сайтах.

Но на практике ответить на этот вопрос гораздо сложнее, чем кажется.

Именно из этой проблемы вырос проект AbitList.

Сайт: https://abitlist.ru

Читать далее

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

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

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

Читать далее

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

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

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

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

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

Читать далее

Я ненавижу AutoMapper

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

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

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

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

Читать далее

Рецензия на книгу «Современный C#. Разработка настольных, облачных, мобильных и веб-приложений»

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

Июль в блоге SSP SOFT — месяц обзоров на книги по языкам семейства С. Иэн Гриффитс — автор одного из самых известных справочников по C#, который выходит в обновленных изданиях уже почти 20 лет. В их числе — книга по версии C# 12 в связке .NET 8. Русское издание появилось на нашем книжном рынке относительно недавно. Обычно такие книги покупают начинающие разработчики (джуны). Стоит ли студенту или джуну читать 800-страничный «кирпич», который сам автор адресует опытным разработчикам? Скорее Да, чем Нет — книга дает обширный понятийный аппарат, без которого сложно расти далее уровня джуна, особенно в эпоху ИИ-агентов.

Читать далее

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

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

Серия: 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 мин
Охват и читатели6.1K

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

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

Читать далее

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

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

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

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

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

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

Читать далее

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

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

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

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

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

Читать далее

Что лучше — C++ или C#?

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

Самым фатальным недостатком C++ является то, что он скоро умрёт. То, что C++ скоро умрёт — это истина, проверенная временем. 30 лет назад все говорили, что C++ скоро умрёт, потому что появилась Java. 20 лет назад ему пророчили скорую смерть, потому что к Джаве присоединился C#. 10 лет назад C++ должен был умереть, потому что появился Rust. 3 года назад его снова принялись хоронить, когда АНБ выпустило спорную рекомендацию «переходить на memory-safe языки» везде, где это возможно, и я думаю, что ещё через 30 лет тоже все будут говорить, что C++ скоро умрёт.

Откуда столько пессимизма? Считается, что C++ неудобен в использовании, и из-за неочевидных правил языка на нём слишком легко написать опасный и забагованный код. В этой статье я сравню C++ и C# в тех аспектах, которые определяют простоту и удобство использования — насколько легко и приятно писать на этих языках, и какой из них вызывает наименьшее количество боли.

Я не собираюсь ничего набрасывать на вентилятор или разводить холивар, а просто хочу объективно и беспристрастно ответить, наконец, на вечный вопрос: что же всё-таки лучше — C++ или C#?

Объективное и беспристрастное сравнение

Bitcord мессенджер со встроенной экономикой на базе Web3

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

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

Мир цифровых технологий постоянно удивляет. Сначала появились супер процессоры с тактовой частотой аж 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 мин
Охват и читатели14K

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

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

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

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

Читать далее

File-based apps в .NET 10

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

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

Читать далее

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

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

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

Читать далее