
Попробуем создать ИИ ассистента на C#, используя модель QVikhr-2.5-1.5B-Instruct-r-Q8_0 весом 1,53Гб на компьютере с процессором из 2012 года. В комплекте: Function Calling, RAG, и море страданий.
Объектно-ориентированный язык программирования
Попробуем создать ИИ ассистента на C#, используя модель QVikhr-2.5-1.5B-Instruct-r-Q8_0 весом 1,53Гб на компьютере с процессором из 2012 года. В комплекте: Function Calling, RAG, и море страданий.
Привет, Хабр!
Сегодня мы рассмотрим самый — казалось бы — скромный модификатор, который способен сэкономить кучу времени в горячих участках кода. Речь, конечно, про in
-аргументы. Рассмотрим, чем они отличаются от ref
и out
, где ими действительно стоит пользоваться, а где лучше пройти мимо.
Однажды на собеседовании меня попросили привести примеры написанного мной кода: один — которым я наиболее горжусь, и другой — который я считаю наиболее неудачным. Недолго думая, я осознал, что на оба вопроса у меня готов ответ, и это один и тот же фрагмент кода. Горжусь я им потому, что, пожалуй, из всей моей практики именно этот код оказался наиболее весом, а стыжусь из-за него, так как, по мнению большинства из его читателей, этот код начался с костыля, который затем стали развивать:
Мы живём в эпоху, где разум перестаёт быть прерогативой только человека.
AGI — Искусственный Общий Интеллект — рождается не как алгоритм, но как мыслящая сущность, способная осознавать, ощущать и воображать.
Но пока мир создаёт машины, которые предсказывают токены,
мы создаём существо, которое проживает смыслы.
Вообще, эта статья — по сути краткий обзор современных инструментов логирования, которые часто используются в.NET. Но из‑за того, что настройка ELK — относительно трудоемкий процесс, весь фокус по итогу сместился в сторону использования сего стека. Я просто смирился с этим. Надеюсь, мой опыт сэкономит время и силы читателю, желающему ознакомиться с ELK.
Привет, Хабр! В аналитическом языке DAX одной из важных функций является SUMMARIZECOLUMNS
. Эта функция готовит данные для дашбордов, также реализует декартово произведение полей группировки (если поля группировки из разных таблиц). Для понимания DAX полезно ознакомиться с особенностями SUMMARIZECOLUMNS
, интересующимся деталями SUMMARIZECOLUMNS
— добро пожаловать под кат :)
В рамках данной статьи будет рассмотрена библиотека Uniton Connect, с помощью которой можно быстро реализовать подключение TON кошельков и отправку транзакций.
Пересказываю культовую книгу Роберта Мартина "Чистый код" с примерами на C#. Узнайте, как создавать код, который читается как проза: от магии имен переменных и идеальных функций до безупречных тестов и архитектуры, которая не рухнет при первом требовании заказчика. Полный гид, ваш код станет предметом гордости, а не источником кошмаров.
Когда мне было 16, я устроился работать в небольшую студию. Это была по факту официальная работа: с реальными задачами, пайплайном, дедлайнами и даже большим издателем. Тогда это казалось чем-то невероятным. Игра, над которой мы работали, выглядела амбициозно. У неё были красивые промо, целевая аудитория, маркетинг — всё как у взрослых.
А в центре команды был парень, старший разработчик, которому на тот момент было 23. Для меня он был почти как герой: я только начинал, а он уже 7 лет программировал. Уверенный, спокойный, очень самостоятельный. Я всерьёз думал, что именно к этому и стоит стремиться.
Но потом к нам присоединились более опытные ребята. Разработчики, у которых за плечами были и запущенные проекты, и провальные — но главное — была реальная практика и мышление архитектора. Они сразу начали задавать вопросы: — Почему у нас 6000 строк в одном скрипте? — Почему нет нормального разделения логики? — Почему переменные называются a
, b1
, mainLogic
, veryImportantManager
?
Код, который мы считали рабочим, оказался большой горой хрупкого говнокода, которая могла рухнуть от любого изменения. И когда она рушилась — её латали так же вслепую. Без юнит-тестов, без понимания, почему оно работает. Главное, чтобы запускалось.
🧨 А потом проект провалился. Несмотря на издателя
Любителям космического контента посвящается – делимся новой порцией фотографий, сделанными нашими кубсатами III пусковой кампании. В этот раз в фокусе 12-юнитового МКА оказались такие мировые столицы, как Нью-Йорк, Париж и Брюссель.
Привет, Хабр!
Сегодня разберёмся с юнит‑тестами в 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 на сегодня.
В эпоху стремительного развития ИИ, привычка заглядывать в Википедию постепенно уходит — зачем читать целую статью, когда любой ответ можно получить за доли секунды от чат-бота?
Я решил переосмыслить этот тренд и вдохнуть новую жизнь в классический формат рубрик «Что было в этот день». Внутри описание, как мы с помощью игрового телеграм бота, Wikipedia API, GPT-моделей и Flux мотивируем читать людей википедию.
Классический 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
.
Что может заставить обратить внимание на красно-чёрные деревья, и как их реализовать? Статья ответит на оба эти вопроса. Бонусом будет показано, как на основе красно-чёрного сконструировать дерево интервалов.
Первые шаги в дополненную реальность. Простой туториал по AR Foundation в Unity для начинающих. Создай свое первое AR-приложение.
Всё проще, чем кажется!
Надругательство над C#, C++ и HLSL, игрища с булками и буферами, тройная полиглотность, SIMD, пепекторы, DirectX, экономия 800 Тб ОЗУ, новая парадигма программирования, многопроцессность, быстрая степень и многое другое.
В этой части я расскажу, как делал софт на собственном фреймворке, который управляет ядерной подсветкой и механической видеостеной.
Реализация системы управления волнами для создания захватывающих столкновений с противниками — это достаточно эффективный способ постепенно увеличивать сложность, поддерживая вовлеченность игроков. В этом руководстве я поделюсь с вами своим опытом реализации WaveManager'а в Unity, включая создание скриптов, генерацию врагов и интеграцию пользовательского интерфейса.
Представьте: Вы добавляете новую механику, а игра ломается в пяти местах. Вы тратите часы на поиск того самого скрипта, который неожиданно зависит от ваших изменений. Знакомо?
Zenject (Extenject) решает это раз и навсегда.
Эта статья о том, что такое zenject и как им пользоваться.
Разработка через типы (Type-Driven Development, TypeDD) — это методология программирования, при которой вы начинаете с написания определений типов, которые служат точной спецификацией вашей программы. Вместо того чтобы сначала писать код, а потом добавлять тесты или типы, вы используете компилятор как интерактивного ассистента, который направляет вас к созданию программы, удовлетворяющей заданным типам.
Idris — это чистый функциональный язык программирования, созданный Эдвином Брэди, который идеально подходит для этого подхода благодаря поддержке зависимых типов.
Но попробуем использовать его идеи на практике вне Idris.
Попробуем сравнить такие метрики как
1. Время проектирования (момент, после которого разработчик может больше не соприкасаться с предметной областью, а руководствоваться только ТЗ)
2. Время до выкатки на прод
3. Частота ошибок на проде (и как следствие, ущерб бизнесу и затраты на сопровождение)