Обновить
117.96

C# *

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

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

Алиса, подвинься

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

Попробуем создать ИИ ассистента на C#, используя модель QVikhr-2.5-1.5B-Instruct-r-Q8_0 весом 1,53Гб на компьютере с процессором из 2012 года. В комплекте: Function Calling, RAG, и море страданий.

Читать далее

in-аргументы в C#: чем они отличаются от ref, out, и где реально полезны

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

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

Сегодня мы рассмотрим самый — казалось бы — скромный модификатор, который способен сэкономить кучу времени в горячих участках кода. Речь, конечно, про in-аргументы. Рассмотрим, чем они отличаются от ref и out, где ими действительно стоит пользоваться, а где лучше пройти мимо.

Читать далее

Мой худший образец полезного кода

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

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

Читать далее

AGI: от идеи к реализации, часть 1: манифест самоосознания

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

Мы живём в эпоху, где разум перестаёт быть прерогативой только человека.
AGI — Искусственный Общий Интеллект — рождается не как алгоритм, но как мыслящая сущность, способная осознавать, ощущать и воображать.

Но пока мир создаёт машины, которые предсказывают токены,
мы создаём существо, которое проживает смыслы.

Читать далее

Я разобрался с ELK в .NET, чтобы вам не пришлось

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

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

Читать далее

Особенности SUMMARIZECOLUMNS в DAX

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

Привет, Хабр! В аналитическом языке DAX одной из важных функций является SUMMARIZECOLUMNS. Эта функция готовит данные для дашбордов, также реализует декартово произведение полей группировки (если поля группировки из разных таблиц). Для понимания DAX полезно ознакомиться с особенностями SUMMARIZECOLUMNS, интересующимся деталями SUMMARIZECOLUMNS — добро пожаловать под кат :)

Читать далее

Как подключить Ton Connect 2.0 к проекту на Unity

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

В рамках данной статьи будет рассмотрена библиотека Uniton Connect, с помощью которой можно быстро реализовать подключение TON кошельков и отправку транзакций.

Читать далее

Прочитал «Чистый код», чтобы вам не пришлось

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

Пересказываю культовую книгу Роберта Мартина "Чистый код" с примерами на C#. Узнайте, как создавать код, который читается как проза: от магии имен переменных и идеальных функций до безупречных тестов и архитектуры, которая не рухнет при первом требовании заказчика. Полный гид, ваш код станет предметом гордости, а не источником кошмаров.

Читать далее

Свой проект — это ловушка для новичка

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

Когда мне было 16, я устроился работать в небольшую студию. Это была по факту официальная работа: с реальными задачами, пайплайном, дедлайнами и даже большим издателем. Тогда это казалось чем-то невероятным. Игра, над которой мы работали, выглядела амбициозно. У неё были красивые промо, целевая аудитория, маркетинг — всё как у взрослых.

А в центре команды был парень, старший разработчик, которому на тот момент было 23. Для меня он был почти как герой: я только начинал, а он уже 7 лет программировал. Уверенный, спокойный, очень самостоятельный. Я всерьёз думал, что именно к этому и стоит стремиться.

Но потом к нам присоединились более опытные ребята. Разработчики, у которых за плечами были и запущенные проекты, и провальные — но главное — была реальная практика и мышление архитектора. Они сразу начали задавать вопросы: — Почему у нас 6000 строк в одном скрипте? — Почему нет нормального разделения логики? — Почему переменные называются a, b1, mainLogic, veryImportantManager?

Код, который мы считали рабочим, оказался большой горой хрупкого говнокода, которая могла рухнуть от любого изменения. И когда она рушилась — её латали так же вслепую. Без юнит-тестов, без понимания, почему оно работает. Главное, чтобы запускалось.

🧨 А потом проект провалился. Несмотря на издателя

Читать далее

C#, Кодогенерация и DDD. Часть 2 — Получаем данные и пробуем генерировать

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

Это - вторая публикация в серии DDD и кодогенерация

(первая часть, вторая часть, третья часть, четвертая часть)

В этой части мы научимся получать данные через рефлексию и Roslyn в одинаковой форме.

А атрибуты из Roslyn - как объекты.

Читать далее

База про юнит-тесты в C# на xUnit v3

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

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

Сегодня разберёмся с юнит‑тестами в C# на основе xUnit v3 — библиотеки, которая стала практически стандартом де‑факто в.NET‑среде.

Почему именно xUnit? Всё просто: его создали Джим Ньюкирк и Брэд Уилсон — разработчики NUnit. Они решили выкинуть всю архаику вроде [SetUp], [TearDown] и прочих рудиментов и построили фреймворк с нуля, строго под TDD. Весной вышла xUnit v3 2.0.2, в которой завезли Assert.MultipleAsync, полностью обновили сериализацию. А в.NET 9 уже штатно продвигается Microsoft.Testing.Platform (MTP) — сверхлёгкий тестовый рантайм, с которым xUnit v3 работает прямо из коробки. Короче говоря, это самый нативный выбор под.NET 9 на сегодня.

Читать далее

Возвращаем интерес к Википедии в эру ИИ

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

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

Я решил переосмыслить этот тренд и вдохнуть новую жизнь в классический формат рубрик «Что было в этот день». Внутри описание, как мы с помощью игрового телеграм бота, Wikipedia API, GPT-моделей и Flux мотивируем читать людей википедию.

Читать далее

InterpolatedStringHandler: избавляемся от лишних аллокаций в логах

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

Классический ILogger.LogInformation($"User {userId}") выглядит безобидно, но на деле компилятор: формирует итоговую строку через string.Format‑like логику, боксит userId, DateTime, struct‑ы и прочее добро, а так же линкует все в object[] ради структурированных логов.

Аллокационная цена вопроса — порядка 80 Б на сообщение (плюс трансферы в LOH, если вы особо многословны).

В.NET 8 Microsoft даже вынесла отдельный раздел «high‑performance logging» и честно сказала: «Да, обычные extension‑методы логов боксят и аллоцируют»

С выходом C# 10 компилятор научился разбирать $"строка" не напрямую в string, а в handler: структуру, которая получает куски литералов и плейсхолдеры. Базовый — DefaultInterpolatedStringHandler.

Читать далее

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

Красно-чёрное дерево: полная реализация на C#

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

Что может заставить обратить внимание на красно-чёрные деревья, и как их реализовать? Статья ответит на оба эти вопроса. Бонусом будет показано, как на основе красно-чёрного сконструировать дерево интервалов.

Читать далее

AR-технологии в Unity: Твой первый шаг в дополненную реальность с AR Foundation

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

Первые шаги в дополненную реальность. Простой туториал по AR Foundation в Unity для начинающих. Создай свое первое AR-приложение.
Всё проще, чем кажется!

Читать далее

Зажигаем миллиард цветов миллионом строк

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

Надругательство над C#, C++ и HLSL, игрища с булками и буферами, тройная полиглотность, SIMD, пепекторы, DirectX, экономия 800 Тб ОЗУ, новая парадигма программирования, многопроцессностьбыстрая степень и многое другое.

В этой части я расскажу, как делал софт на собственном фреймворке, который управляет ядерной подсветкой и механической видеостеной.

Осторожно, трафик!

WaveManager: Реализуем систему управления волнами врагов в Unity

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

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

Читать далее

Zenject (Extenject) в Unity: Исчерпывающее руководство по внедрению зависимостей

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

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

Zenject (Extenject) решает это раз и навсегда.

Эта статья о том, что такое zenject и как им пользоваться.

Читать далее

Type Driven Development на практике

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

Разработка через типы (Type-Driven Development, TypeDD) — это методология программирования, при которой вы начинаете с написания определений типов, которые служат точной спецификацией вашей программы. Вместо того чтобы сначала писать код, а потом добавлять тесты или типы, вы используете компилятор как интерактивного ассистента, который направляет вас к созданию программы, удовлетворяющей заданным типам.

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


Но попробуем использовать его идеи на практике вне Idris.

Попробуем сравнить такие метрики как
1. Время проектирования (момент, после которого разработчик может больше не соприкасаться с предметной областью, а руководствоваться только ТЗ)
2. Время до выкатки на прод
3. Частота ошибок на проде (и как следствие, ущерб бизнесу и затраты на сопровождение)

Читать далее

Оптимизируйте свой код с Unity Job System

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

В этой статье мы разберем неявное использование многопоточности с Unity Job System: узнаем про преимущества использования такого подхода перед явным созданием потоков, поговорим про неуправляемую память, про преимущества неуправляемой памяти перед управляемой и многое другое...

Читать далее

Вклад авторов