Обновить
256K+

C# *

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

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

NetFix: как я сделал GUI-обёртку для Zapret и TgWsProxy, которой самому приятно пользоваться

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

Написал это для друга чтобы он не звонил мне с вопросом «почему Telegram не работает».
А теперь звонит с вопросом «когда обновление»... Прогресс)

NetFix - это GUI-приложение для Zapret и TgWsProxy с ПОЛНОЙ автоматизацией. Не просто запуск, оно само скачивает, само настраивает, само следит, само обновляет. Одна кнопка вместо батников, конфигов и консоли.

Что внутри, как это работает и почему там есть даже ритм-игра - читайте далее 👇

Читать далее

Новости

Одна строчка .Result роняет ваш ASP.NET Core при CPU 8 %: разбор hill-climbing в .NET 9

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

TL;DR. Один «безобидный» foo.GetAsync().Result в middleware способен превратить ASP.NET Core, державший 50k RPS с p99 = 40 мс, в сервис с 12k RPS и p99 = 4 с — при CPU 8 %.

Виноват не сам blocking call, а hill-climbing — фидбэк-луп в ThreadPool, в недрах которого живёт дискретное преобразование Фурье. Разбираем по исходникам CoreCLR, почему это вообще возможно, воспроизводим эффект на ~80 строках кода и разбираемся, почему SetMinThreads — не решение, а анестезия.

Читать далее

Idempotency keys: 5 граблей, которые мы поймали на проде

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

Пятница, 23:47. PagerDuty: “Платёж AmEx, провайдер вернул 5xx три раза подряд, билеты не зарезервированы.” Открываю логи – действительно три ответа провайдера 5xx, ни одной успешной транзакции по нашей базе. Закрываю как временный сбой на стороне провайдера, пишу короткую сводку в дежурный чат и иду досматривать. Через 40 минут второй алерт – уже от ночной поддержки: клиент прислал скрин выписки, 3 списания подряд за одну бронь. У клиента рейс через 6 часов, ему нужна действующая бронь и подтверждение, что он завтра нормально улетит, а не тикет в поддержку.

Мы делали B2B-платформу для деловых поездок: бронь авиа, отели, трансфер, страховка, в финале – оплата корпоративной картой через платежный шлюз. С этой ночи началась история, которая закончилась переписыванием всего платёжного слоя нашего booking-сервиса. По дороге мы поймали 5 граблей.

Читать далее

StaticECS — Bitmap Entity Component System

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

За десятилетия существования ECS сложились два фундаментальных способа хранить компоненты: архетипы (Unity DOTS, Flecs, Bevy) и sparse sets (EnTT, LeoECS). Каждый из них несёт структурные ограничения, которые не устраняются оптимизацией реализации — они вытекают из самой модели данных.

StaticEcs — третья модель. Она основана на инвертированном иерархическом битовом индексе: не сущности хранят маски своих компонентов, а компоненты хранят битовые карты сущностей. Фильтрация запроса — это побитовое AND, обрабатывающее 64 сущности за одну инструкцию CPU. Добавление или удаление компонента меняет один бит и не перемещает никаких данных.

В статье разбираю, как устроена эта архитектура, чем она отличается от архетипов и sparse sets, и что даёт на практике.

Читать далее

Выделение регистров процессора при помощи генетического алгоритма

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

Эксперимент, который многое объясняет

Оригинал этого поста также вошёл в число документов по проектированию платформы .NET: lsra-heuristic-tuning.

Читать далее

Как стать инди-разработчиком в 40+ лет без опыта и образования

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

В этом посте я хочу поделиться своим мнением: может ли человек в 2026 году без специализированного образования и без какого-либо опыта в геймдеве стать инди-разработчиком.

Меня зовут Rok и в настоящее время я занимаюсь разработкой коллекционной карточной игры про танки в сеттинге Второй мировой войны — Tank General.

На данный момент мне 44 года. Я не являюсь профессиональным разработчиком и никогда раньше не имел отношения к геймдеву. По профессии я юрист и всю свою жизнь работал именно юристом. Разработчиком я решил стать полтора года назад.

Разрабатываемая мной игра уже имеет вполне рабочий билд. В нём реализованы около 200 карт техники и приказов, три играбельные нации, около 30 штабов со способностями, несколько PvE-режимов, а также сетевой режим, который является основным в моей игре.

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

Читать далее

Я сделал язык программирования ради статьи на Хабр

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

Меня зовут Степан, я C# профессионал уже более 7 лет на рынке и рассказываю об этом в Telegram каналe StepOne. Иногда мне скучно на работе, потому что перекладывать JSON это слишком просто, даже если микросервисы.

Я отучился на системного программиста-компиляторщика и столкнулся с отсутствием спроса рынка на такие навыки. Но выбрал быть счастливым и написал язык программирования hydrascript, чтобы JSON гонялся даже в докере на макбуке. Решение под катом вас точно удивит!

dotnet tool install hydrascript -g

SDR RX стенд на STM32H723

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

Давно интересовал вопрос использования 16-битного АЦП STM32H7 для обработки I/Q сигналов в реальном времени.

Почти год ушел на эксперименты реализации SDR приемника на базе Tayloe mixer и MCU STM32H723ZGT6, и вот что у меня получилось: принимаемый КВ диапазон 1...30МГц, вывод обработанного аудио через внутренний 12-битный ЦАП или вывод I/Q потока на ПК через UAC1.

Читать далее

Хватит винить кривые руки. Твой язык программирования энергетически тебе не подходит

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

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

На днях HR-отдел отклонил мое резюме на позицию джуна. Вместо фидбека я получил ответ «В нашей команде слишком много козерогов, и нашему тарологу не понравился ваш Сатурн». Сначала я хотел возмутиться, но потом подумал. Может звезды не врут? Возможно наш звездный язык программирования определяется в зависимости от расположения планет во время первого запуска IDE.

Я провел фундаментальное исследование, проанализировал натальные карты Гвидо ван Россума, Страуструпа и прочих, и составил первый в мире точный гороскоп языков программирования.

И результат меня поразил...

Читать далее

Как я случайно написал самый быстрый CSV-парсер на C#

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

На рождественских каникулах я ехал на автобусах из одного штата в другой, и мне нужно было как-то убить 24 часа. Я читал об UTF-8 и узнал об этой кодировке нечто интересное: все традиционные символы ASCII сохранены в ней в их исходном однобайтовом представлении, поэтому их можно сканировать крайне быстро. Я решил поэкспериментировать с кодом, максимально быстро подсчитывающим такие символы, в результате получив готовый парсер CSV, который вполне сравним с предыдущими парсерами, а то и быстрее них.

В статье я расскажу о своём процессе работы, экспериментах и оптимизациях, которые привели меня к этому итогу.

Читать далее

Поиск в коллекциях или когда O(N) быстрее O(1)

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

На собеседованиях мы слышим или говорим сами, что поиск в массиве медленнее, чем в хеш-таблице. Кто-то даже вспоминает, что поиск в массиве имеет линейную сложность или O(n), а в хеш-таблице — константную O(1). Но работает ли это на практике? Что, если есть ситуации, когда поиск в массиве оказывается быстрее? Давайте не будем торопиться с выводами.

Читать далее

Самописный дизайнер форм (WinForms) для VS Code

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

Хочу поделиться проектом, который может оказаться полезным тем, кто всё ещё разрабатывает/поддерживает десктопные .NET Framework приложения на WinForms.
В моей организации - как, наверное, и во многих других - среда разработки Microsoft Visual Studio оказалась под запретом, причём как её коммерческие версии, так и Community Edition. Всем было рекомендовано перейти на VS Code, которая хороша во всём, кроме полноценной поддержки WinForms-приложений. А именно - VS Code, в отличие от "обычной" Visual Studio, не имеет встроенного редактора (дизайнера) форм, без которого вёрстка сложных форм становится как минимум неудобной. Если с редактированием "code behind" файла проблем нет (Form1.cs, UserControl1.cs), то с файлом, описывающим «визуальщину» (Form1.designer.cs, UserControl1.designer.cs) - беда: в VS Code его можно править только на уровне кода, "WYSIWYG experience" тут недоступен.

Читать далее

Играем в морской бой через телеграфный ключ, дверной звонок и Arduino

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

В начале февраля в Steam был фестиваль печатания. Среди множества игр, проверяющих умение работы с клавиатурой, нашлась одна, которая предлагает уникальный опыт морского боя по телеграфу: индексы клеток вводятся азбукой Морзе.

Игра совместима с мышкой, клавиатурой и джойстиком. Я посчитал, что это не достаточно аутентично, и собрал свой контроллер с телеграфным ключом и дверным звонком. Получившееся устройство подходит не только для одной игры, но и для обучения азбуке Морзе и для набора сообщений в любые поля ввода в ОС.

Читать далее

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

Самый тупой способ повышения производительности

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

Введение

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

Читать далее

Pattern matching в .NET

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

Привет, Хабр! Меня зовут Митя, я инженер-программист в Контуре. Во время написания кода анализаторы иногда предлагают заменить привычные конструкции на pattern matching. Однако то, что призвано повысить читаемость, нередко делает код более трудным для восприятия, особенно, если не понимать, во что именно разворачиваются те или иные конструкции. И в один из дней я задался вопросом: а есть ли какие-нибудь подводные камни при использовании pattern matching и во что именно его преобразует компилятор? В этой статье — мои мысли и заметки.

Читать далее

Эволюция .NET-разработчика: взгляд рынка на грейды и компетенции (анализ 700+ вакансий)

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

Все мы знаем стандартную лестницу: Junior, Middle, Senior. Но где на самом деле проходит граница? Почему в одном стартапе «сеньор» — это тот, кто вчера узнал про LINQ, а в кровавом энтерпрайзе от «мидла» требуют проектировать распределенные системы под нагрузкой в миллион RPS?

Я задалась вопросом оценки собственного грейда, когда уходила со своего первого места работы. Кто я для рынка? Почему мои знания на собесе в одной компании соответствуют чуть ли не уровню Senior, а в другой – покрывают максимум вакансию Junior’a?

На самом деле проблема не нова – каждая компания вынуждена формировать собственную систему грейдов, а вакансии чаще всего содержат требования, собранные по принципу «чем больше, тем лучше». В таких условиях оценить собственный уровень становится задачей со звездочкой.

Я решила отойти от субъективности и спросить у самого рынка. В этой статье — результаты анализа 700+ актуальных вакансий .Net разработчика, графы связности навыков и ответ на вопрос: в какой момент количество выученных библиотек наконец-то превращается в качество инженера.

Читать далее

Гайд: Как прострелить ноги unsafe кодом в C#

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

ДИСКЛЕЙМЕР: Это статья является ручным переводом оригинальной статьи с небольшими пояснениями. Поводом для перевода стало слишком частое использование unsafe кода в других статьях о C# на русском языке в том числе тут на хабре.

Читать далее

Строки кода должны помещаться на экране

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

О вечном — о разумной длине строк кода. Мы недавно встретили ошибку, которая одновременно демонстрирует, чем плох "код-колбаса", "эффект последний строки" и последствия неудачного copy-paste.

Читать далее

Поиск в личном фото архиве по текстовому описанию

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

Проиндексируем фото-видео архив для поиска на человеческом языке простыми фразами. Фраза: «новогодний праздник» найдет все фото и видео связанные с новым годом. В этом нам поможет Qwen3-VL и Qdrant.

...А заодно добавим поиск по лицу.

Читать далее

Как я «взломал» адресную книгу Radmin, чтобы не вводить 1000 IP-адресов вручную

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

Конечно же, взломать – громко сказано, но заголовок рождён эмоциями :-)

Эта история о том, как лень, заставила меня окунуться в реверс-инжиниринг бинарного файла адресной книги Radmin (.rpb).

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

Результат – opensource утилита для конвертации между RPB и JSON, возможно кому-то пригодится.

Представьте: вы – ответственный за парк из сотен компьютеров. Вам нужно актуализировать таблицу имен и IP-адресов компьютеров или адресную книгу Radmin, или, как в моём случае, использовать список этих записей в другом ПО. Работа трудоёмкая, но я – человек не ленивый, но оптимизированный. Вводить вручную имя, IP, порт, настройки для каждого компьютера – рутина, однообразное щёлканье кнопок! Кажется, жизнь пролетает впустую, так я подумал, когда представил, что мне предстоит это сделать.

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

«Эврика! – подумал я. – У меня же есть Radmin, а там есть все адреса! Я экспортирую их и использую себе во благо!».

Эврика длилась ровно до момента, когда я обнаружил, что Radmin экспортирует адресную книгу только в свой собственный формат - rpb, добавили бы csv, с моей точки зрения логично, «Спасибо, разработчики». Документации? Конечно, нет, это же не api и не опенсорс.

Интересное дальше
1
23 ...