tgindex
.NET epeshk blog

.NET epeshk blog

Статистика

Канал с заметками о C# и .NET Поддержать канал: https://t.me/blog_donate/2 Обратная связь: https://forms.gle/3uRz7FmzUA26Kw4y5

Последний пост
3 авг.
Последнее чтение
12:23
Постов за неделю
0
Всего постов
20
Тип
открытый
Язык
русский
Категория
Технологии (по похожим)
В каталоге с
12 авг.
Подписчики
2 676
+1 за 3 дн.
Сутки
0
0,00%
Неделя
 
Месяц
 
Просмотров на пост
5 598
20 постов
Вовлечённость
209,2%
к подписчикам
Постов в день
0,0
всего 20
Упоминаний
0
каналов
Охват размещения
оценка
1/24сутки в ленте
1 439
1/48двое суток
1 649
1/72трое суток
1 778

Оценка по просмотрам недавних постов: пост набирает почти всё за первые сутки.

Посты

  • 3 авг.1 6235040

    LLM оказались упорнее людей 2 недели назад LLM впервые справилась с математической задачей, которая казалась безнадёжной — опровергла гипотезу о якобиане, приведя явный контрпример. Задача не поддавалась людям 87 лет, и представляет собой классический пример гипотезы, доказательство которой (если она верна) займёт сотни страниц, а для опровержения достаточно лишь привести пример, когда условия не выполняются. Аналогичное свойство есть у Великой теоремы Ферма и Теореме о четырех красках, которые, в отличие от гипотезы о якобиане, оказались верны и были доказаны. Здесь можно сказать что человеческий вклад в опровержение гипотезы тоже был, но он был минимальным — результат сразу воспроизвели простыми вопросами к другим LLM. Нейросети также самостоятельно обобщили результат для построения бесконечного множества контрпримеров. Т.е. нейросеть действительно создала новое знание, которого раньше не было ни в обучающей выборке, ни вообще где либо среди человеческих достижений. Гипотеза о якобиане не такая и важная, не входит в проблемы тысячелетия, за неё не назначена награда, и максимум выгоды, который можно из неё извлечь это строчка с именем в википедии. Но в пятницу ИИ смог решить другую задачу с огромной наградой в $100млн, которая годами ускользала от людей Как LLM добыла $100млн Оказалось, что один известный холодный криптокошелек 5 лет содержал баг, приводящий к использованию софтверного псевдорандома вместо рандома с security chip. Этот кошелек рекламировался как ultra-secure, with verifiable open-source firmware, и на нём написано: "Don't trust. Verify." Кошелёк был призван удовлетворить потребности самых параноидальных пользователей: коммуникация с компьютером происходила через сканирование QR-кодов, а для питания использовалась батарейка Крона, чтобы исключить side-channel атаку по флуктуациям потребления тока В коде содержалась строка #define MICROPY_HW_ENABLE_RNG (0) отключающая честный рандом Рядом был и assert: #ifndef MICROPY_HW_ENABLE_RNG #error "get a HW TRNG plz" #endif Но он некорректный: #ifndef проверяет, что константа не определена, но она определена — в 0. В итоге ассерт не срабатывал, а код компилировался с низкокачественным рандомом, который снижал секретность приватных ключей с 2^128 до 2^40 (по некоторым оценкам и до 2^32) В итоге кто-то добыл крипты на $100млн, оставив пользователей этих кошельков ни с чем. Баг оставался незамеченным 5 лет. Кошельки были опустошены максимально заметно, без попыток хоть как-то замести следы и скрыть украденный баланс, из чего можно сделать вывод, что код для массового перевода написала нейросеть, не вникая в смысл происходящего (здесь отмечу, мы не знаем точно, нашла ли баг нейросеть, но глупая реализация атаки явно намекает на это) Казалось бы, баг элементарный, награда гигантская. Почему же не нашли раньше без нейронок? Скорее всего, т.к. баг выглядит слишком глупо. Подобные были в первых реализациях кошельков, и все считали, что так облажаться больше невозможно, вообще никак, в итоге никто и не искал И у гипотезы о якобиане, и у этого кошелька есть общая черта — там побывали тысячи немотивированных исследователей, и рассказали всем, что задача сложная, они попробовали всё что могли, и искать там больше нечего. Человеческая сущность боится зря потраченного времени, боится потерпеть поражение, и предпочитает верить предыдущим исследователям вместо собственных попыток. А у нейронок нет ни подобных комплексов, ни сожаления о зря потраченном времени и токенах (за них нейронкам все равно заплатят, даже если получится слоп, в отличие от мясных) Интересно, что баг в кошельке появился из человеческого желания навредить конкурентам. Автор кошелька изначально начинал проект как форк, но затем решил переписать GPL код на кастомную криптографию, чтобы никто не форкнул его версию @epeshkblog

  • 16 июл.2 815476

    Расскажите кто каким антикапча решением пользуется? Надоело прокликивать велосипеды, пешеходные переходы, собирать паззлы. Нужен плагин для браузера с ИИ, в который можно закинуть $10 и забыть о капчах как о страшном сне

  • 14 июл.2 8847314

    💬 Комментарии в коде Мне никогда не нравился откомментированный код. Комментирование каждой строки сразу выдаёт начинающего программиста. А те комментарии, которые при написании были уместными все равно устаревают — код изменяется, комментарии обновить забывают, человеческий фактор. Лучший вариант, для компилируемых языков, self-explanatory код Однажды не смог сделать оптимизацию в РеШарпере из-за комментария. Исправление предполагало переписывание логики к которой был написан очень длинный и основателеный комментарий. С одной стороны его стыдно удалить, а с другой — лень переписывать. С переходом на AI программирование комментарии стали бесить вдвойне! Первые LLM комментировали каждую строку, словно только вчера начали программировать (так оно впрочем и было). Самые тупые и маленькие LLM стали уклоняться от написания кода через комментарии. Писали // TODO вместо реализации. Комменты стали признаком низкокачественного слопа Приходилось говорить в промпте не писать комментарии, и упорно вычищать всё же написанные. И оказалось зря. Если поддерживать код будет тоже агент — пусть пишет комменты. Для LLM куда меньше разницы между кодом и текстом комментариев, т.к. она видит токены. И комменты становятся дополнительным контекстом, с помощью которого нейронка сможет вспомнить бизнес-логику проекта, без полного повторного погружения в код. Вопрос с актуализацией комментариев тоже отпадает — нейросети подходят к этому ответственнее (они следуют алгоритму — поменял код, пройдись по референсам и актуализируй их, человек же — поменял код, скорей на прод) Нейрокомментированный код конечно же неэстетичный. Но предназначен ли нейрокод для чтения и редактирования людьми? @epeshkblog

  • 10 июл.3 4706820

    Claude Fable 5 написал GC для .NET на C# Если точнее, модель довела до ума проект по написанию managed GC от Kevin Gosse. На некоторых бенчмарках, AI сгенерированный нейронкой GC не уступает в производительности оригинальному neuecc с помощью Fable 5 ускорил…

  • 10 июл.6 4904787

    Claude Fable 5 написал GC для .NET на C# Если точнее, модель довела до ума проект по написанию managed GC от Kevin Gosse. На некоторых бенчмарках, AI сгенерированный нейронкой GC не уступает в производительности оригинальному neuecc с помощью Fable 5 ускорил WriteInt в MessagePack. Вместо того, чтобы просить AI ускорить код и make no mistakes применили итеративный подход. В промпт загружались C# исходник и его disassembly после JIT-компиляции + результаты бенчмарков. Модель анализировала ассемблерные инструкции и шаг за шагом подгоняла исходный C# код. Результат — ускорение в 4 раза Anthropic купили bun — Javascript рантайм, на котором работает Claude Code. Сразу после покупки Fable 5 переписал bun с Zig на Rust за 11 дней, потратив на это $165K токенов ==== Нейронки эволюционировали и теперь успешно пишут не только веб на реакте, но и низкоуровневый код. Масштабные проекты и сложные переписывания архитектуры теперь реализуемы за пару недель. Единственное ограничение — бюджет на токены. Языку Zig не повезло. ИИ просто исключил его из цепочки, отдав предпочтение более надежному Rust. Похожая участь досталась C# NativeAOT, когда порт компилятора TypeScript сделали на Go. Можно считать, что ценность стека технологий == ценности проектов, которые на нём написаны. И теперь технологии без прочной экосистемы популярных продуктов будут быстро вытесняться нейросетями в пользу мейнстрима @epeshkblog

  • 22 мар.4 9438128

    Главное, не списывать точь-в-точь, чтоб не спалили

  • 19 мар.4 8558951

    goodbye, gc.cpp! Ушла эпоха. В .NET 11 Garbage Collector разделили по файлам. Больше нет легендарного gc.cpp с более 50к строк кода https://github.com/dotnet/runtime/pull/125703

  • 27 янв.6 365615

    Возвращаемся к теме многопоточности

  • 14 янв.7 246506

    Нарратив про AI bubble, который вот-вот взорвётся почти полностью исчез

  • 8 янв.6 9744118

    2025 год: $10 трлн — AI Bubble, капитализация всего финансового рынка 2050 год: на $10 трлн нельзя купить бамбл в московской кофейне

  • 7 янв.6 0553636

    C# показал рекордный рост популярности (+2.39%) в индексе TIOBE а Go за год опустился с 7 позиции до 16 Реальность: - C# в индексе восстановился до уровня 2024 года в 7.4 после просадки до 4.2 в прошлом году - индекс TIOBE основан на статистике поисковых запросов, и показывает что шарписты до сих пор пользуются гуглом, а гошники сразу спрашивают чат гпт Методология TIOBE абсурдная изначально, т.к. показывает социальный интерес к языкам, а не то, на чём реально программируют, а после появления LLM полностью некорректна. Другие рейтинги языков программирования тоже необъективны, но всё же лучше, они в отличие от TIOBE хотя бы видят TypeScript Рейтинг от GitHub, с bias в опенсорсный код Рейтинг от Jetbrains, с bias к пользователям Jetbrains IDE Рейтинг от StackOverflow, с bias к пользователям StackOverflow (который тоже заменяют LLM) @epeshkblog

  • 3 янв.4 2187478

    Снова про Windows 11 Вчера наконец-то поставил Windows 10 вместо Windows 11. Недавно вышел пост про планы Microsoft переписать Windows на Rust с помощью AI-агентов в концепции 1 человек, 1 месяц, 1 миллион строк кода. Microsoft выпустили опровержение: переписывания на Rust не будет. Windows перепишут на TypeScript. Медленная прорисовка webview2-элементов и стала последней каплей. Когда нажимаешь на иконку вайфай, появляется пустое всплывающее окно и только через секунду отрисовываются элементы внутри. Так происходит из-за того, что каждое подобное окно — по сути отдельная вкладка браузера. Ещё по неизвестной причине перестал работать WSL, т.е. система уже требовала переустановки. Откатить оказалось проще, чем казалось: - лицензия при откате сохраняется - файлы 11 винды бэкапятся в Windows.old. Форматирование диска не обязательно - большинство программ подхватывают подложенные в AppData\Local, AppData\Roaming настройки - внезапно, Edge в Windows 10 хоть и основан на Chromium, но работает с дичайшими лагами. Не более 10фпс. В других браузерах проблем нет. Майки смогли сделать то, с чем не справились сотни браузероклепателей-любителей Почему откатил, а не остался на StartAllBack, OpenShell, ExplorerPatcher: - Баги. В сторонних утилитах UI-элементы Windows 10 воссозданы с нуля, не всегда работают, отличаются по дизайну и поведению от оригинала. выглядит глупо, когда меню громкости из семёрки, wi-fi из десятки, а батареи — из 11 - Сторонние шеллы исправляют только визуальную часть. webview2 компоненты остаются в системе и продолжают потреблять память зря - AI-агенты майкрософт продолжают ломать windows 11 в обновлениях, например мгновенно открывающееся Win+R окно заменили на webview2-компонент ==== https://www.youtube.com/watch?v=7VZJO-hOT4c https://habr.com/ru/news/982546/ На ютубе появился реалистичный тест различных версий винды в одинаковых условиях Время загрузки: - Windows XP и 10 загружаются за одинаковое время - Windows 11 на 20-40 секунд медленнее. Из-за того, что интерфейс системы AI-сгенерирован, при тесте выстрелил баг с долгой прорисовкой таскбара, что и добавило 20 секунд В Windows 8.1 явно провели работу над оптимизацией потребления места на диске и в RAM. 11-ая версия прибавила гигабайт в RAM относительно 10 Количество вкладок в Chromium браузере: - Windows 11 оказалась хуже Windows XP, не справившись с открытием 50 вкладок. Полностью соотносится с тем, что я наблюдал на 11 винде вживую - Windows 8.1 выдерживает 250 вкладок, а 10 — 150. Что все равно гораздо лучше 11 Тесты по скорости загрузки программ — Windows 11 снова оказалась медленнее всех ==== Имхо, использование Windows 11 это расчеловечивающая пытка, и надо откатываться на 10, и ждать 12 или переходить на мак. Скорее всего webslop это будущее всех ОС. Живых людей с компетенциями в разработке нативного UI почти не осталось, рыночек порешал, и подобную работу найти невозможно в отличие от веба, да и платят на ней меньше. Хоть навык и уникальный, сотрудника можно пугать сложностями поиска работы, и дешевизной переписывания на web. LLM отлично справляются с React, Typescript, и Python, что эти языки вытесняют остальные. Когда только вышел ChatGPT я ожидал, что статическая типизация будет помогать валидировать результаты AI-генерации. Так вот, ни-хре-на. Для типизированного кода нужна умная LLM, которая может удерживать в контексте одновременно бизнес-логику и типы, а не подписка за $20 в месяц Web проник даже в консольные утилиты. Claude Code написан с использованием ink — либы, позволяющей рендерить реакт компоненты прямо в терминале. В итоге бинарник тонкого клиента, отправляющего запросы в LLM на сервер весит 208 МБ!!!

  • 28 дек.4 4634328

    IAsyncEnumerator<T> и его использование вручную Енумераторы в дотнете можно использовать двумя способами: через foreach, и вручную, через MoveNext/Dispose. Второй способ часто приводит к багам. В этом методе разработчик пытался реализовать обёртку для IAsyncEnumerable<T>, которая распараллеливает обработку текущего элемента последовательности и получение следующего: public static async IAsyncEnumerable<T> Prefetch<T>( this IAsyncEnumerable<T> source) { await using var enumerator = source.GetAsyncEnumerator(); var nextTask = enumerator.MoveNextAsync(); while (await nextTask) { var current = enumerator.Current; nextTask = enumerator.MoveNextAsync(); // запускаем MoveNext перед возвратом управления в вызывающий код yield return current; } } // USAGE // var sw = Stopwatch.StartNew(); await foreach (var x in En()) await Task.Delay(100); Console.WriteLine("Without prefetch: " + sw.ElapsedMilliseconds); // 700 sw.Restart(); await foreach (var x in En().Prefetch()) await Task.Delay(100); Console.WriteLine("With prefetch: " + sw.ElapsedMilliseconds); // 400 async IAsyncEnumerable<int> En() { await Task.Delay(100); yield return 1; await Task.Delay(100); yield return 2; await Task.Delay(100); yield return 3; await Task.Delay(100); } Однако, такой код сломается, если внутри await foreach сделать break: await foreach (var x in En().Prefetch()) break; Unhandled exception. System.NotSupportedException: Specified method is not supported. at Program.<<Main>$>g__En|0_0()+System.IAsyncDisposable.DisposeAsync() at Extensions.Prefetch[T](IAsyncEnumerable`1 source)+MoveNext() Ошибка возникает потому что у `IAsyncEnumerator<T>` нельзя одновременно вызывать `MoveNextAsync` и `DisposeAsync`. А в реализации Prefetch так и происходит — после break сразу вызывается DisposeAsync (из-за await using) для переменной enumerator, при наличии незавершенного nextTask В зависимости от реализации IAsyncEnumerator<T> возможны и другие симптомы неправильного взаимодействия MoveNext и Dispose, например утечки памяти Исправить можно явно дожидаясь nextTask перед enumerator.DisposeAsync(). При этом нужно учесть, что ValueTask можно await-ить только один раз: public static async IAsyncEnumerable<T> Prefetch<T>(this IAsyncEnumerable<T> source) { await using var enumerator = source.GetAsyncEnumerator(); var nextTask = enumerator.MoveNextAsync(); try { while (true) { var nextTaskResult = await nextTask; nextTask = default; // предотвращаем повторный await ValueTask if (!nextTaskResult) yield break; var current = enumerator.Current; nextTask = enumerator.MoveNextAsync(); yield return current; } } finally { if (nextTask != default) await nextTask; } } Такое исправление решает эту проблему — теперь MoveNextAsync и DisposeAsync вызываются последовательно, и ошибки не возникает. @epeshkblog

  • 5 дек.5 2835633

    🙈 Goodbye, Windows 11! Наконец-то я смог открыть ноут и установить в него второй SSD. Мучения с Windows 11 скоро закончатся. Пользоваться Windows 11 стало невозможно. Постоянные утечки памяти, фризы, чёрные экраны. Куча бесполезных жрущих память процессов: Antimalware (MsMpEng), StartMenuExperienceHost, PhoneExperienceHost (я вообще не подключаю телефон к ноуту, какой phone experience, a), msedgewebview2 (они переписали интерфейс системы на TypeScript) Помогите выбрать, что установить. Windows 10 LTSC, Ubuntu, Mint, CachyOS? Или какой-то другой дистрибутив? Как вариант наверное поставить линукс на второй SSD, перенести данные на него, дальше на первый диск переустановить на 10-ую винду

  • 13 нояб.6 4646238

    Перегрузка операторов С новыми extension-методами наконец-то появилась перегрузка операторов для сторонних типов: static class Extensions { extension<T>(IEnumerable<T>) { public static IEnumerable<T> operator +(IEnumerable<T> a, IEnumerable<T> b) => a.Concat(b); } extension<T>(T[]) { public static T[] operator +(T[] a, T[] b) => a.Concat(b).ToArray(); } } Выглядит синтаксис с extension<T>(TypeName<T>) максимально странно, зато extension-ы наконец-то избавились от странных ограничений старого синтаксиса с this @epeshkblog

  • 11 нояб.5 99310222

    ВЫШЕЛ ВЫШЕЛ ВЫШЕЛ

  • 3 нояб.7 9455835

    https://www.youtube.com/shorts/pa8DvuhC_qA

  • 30 окт.8 0793127

    2025 год: $10 трлн — AI Bubble, капитализация всего финансового рынка 2050 год: на $10 трлн нельзя купить бамбл в московской кофейне

  • 20 окт.7 70073

    Вступите в чат с комментариями Сейчас на чат канала происходят постоянные набеги ботов. Телеграм позволяет включить антиспам только в чатах с более 200 участниками. Сейчас увы только 150

  • Враждебный к юзеру софт Чтобы софт стал успешным, он должен ненавидеть пользователя. Считать его дурачком и регулярно ему об этом напоминать. И вот два примера, хотя подобные дизайн-паттерны стали повсеместными App Store — юзеру разрешено ставить только одобренные версии софта, и только последние версии. Значит можно выпустить хороший продукт, а затем нафаршировать его рекламой. Иногда приложения удаляют просто так, чтобы напомнить юзеру его место в этой жизни. Или можно объявить, а теперь поддерживается только iOS 27, все вперёд за айфоном 18 про мах Скриншоты — да, в 2025 году смогли убить скриншоты. Если раньше на скриншоте было тоже самое, что на экране у пользователя, то сейчас там обязательно будет что-нибудь другое. Приложения понимают, когда юзер нажимает кнопку скриншота и рисуют поверх вотермарку 𝕏.com Или скриншотишь пост на реддите, и сразу вылетает уведомление А ССЫЛКОЙ ТО УДОБНЕЕ. Хотя скриншот имеет смысл чтобы сохранить пост до его удаления модераторами этой социальной сети. Скриншотишь код выдачи заказа — вылетает уведомление А ДЕЛИТЬСЯ КОДОМ СТАЛО УДОБНЕЕ ПО ССЫЛКЕ. Но причина делать скришнот в этом случае — доступность без интернета, если показывать код надо в подвале. Такой же болезнью страдают карты от компании с десятками названий. Там смысл скриншота — показать быстро, но приложение пытается использовать любую возможность добыть дополнительные клики по ссылкам Что отберут у нас разработчики iOS и Android в следующем году? @epeshkblog

.NET epeshk blog — tgindex