Как стать автором
Обновить
4
0.7

Бэкенд разработчик (.NET)

Отправить сообщение

Способы хранения графа в памяти компьютера

Время на прочтение4 мин
Количество просмотров32K

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

Читать далее
Всего голосов 39: ↑36 и ↓3+42
Комментарии19

Как я разогнал fail2ban* в тысячу раз с помощью SIMD

Время на прочтение15 мин
Количество просмотров21K

Fail2ban — утилита чрезвычайно полезная во многих случаях. Думаю, многие используют её для того, чтобы в автоматическом режиме блокировать особенно назойливых «посетителей». К сожалению, если входящий поток становится слишком большим, fail2ban теряет все свои полезные свойства, потому что разбор лога безнадёжно отстаёт от реальности.

Лог nginx из 100 тысяч строчек fail2ban при самых простых настройках разбирает порядка 45 секунд. Нехитрыми манипуляциями его можно ускорить раз в 6, но этого оказалось недостаточно. Наивная реализация на аналогичного фильтра на Rust уже обеспечила требуемую производительность, но если уж взялся за оптимизацию, то остановиться трудно.

* только необходимую часть функционала

Читать далее
Всего голосов 97: ↑95 и ↓2+117
Комментарии76

R*-tree в Go, немного геймдева и поиска элементов в пространстве

Время на прочтение7 мин
Количество просмотров8.3K

Приветствую, уважаемые читатели Habr!

Если Вы когда-нибудь задумывались, какая структура данных может помочь максимально эффективно искать элементы в пространстве, то, возможно, эта статья Вам поможет!

Эта статья заденет опыт в геймдейве и идеи, где это ещё можно было бы использовать :)

Читать далее
Всего голосов 15: ↑14 и ↓1+14
Комментарии21

Самодостаточная капча без бутстрапа и БД

Время на прочтение4 мин
Количество просмотров4.7K

Zero Storage Captcha работает локально (возможно, в виде дополнительного класса в коде приложения), не обязывает хранить информацию на стороне сервера о сгенерированных картинках и в тот же момент позволяет проверить ответ любого пользователя со стопроцентной вероятностью.

Читать далее
Всего голосов 13: ↑10 и ↓3+9
Комментарии15

Открытое письмо Михаилу Мишустину: у нас нет условий для создания своей экосистемы и IT суверенитета

Время на прочтение17 мин
Количество просмотров71K

7 апреля 2022г., председатель правительства РФ, Мишустин Михаил Владимирович Владимирович, “пользуясь случаем”, напрямую обратился к разработчикам и айтишникам:

"Ребята — разработчики, программисты, айтишники, — давайте сделаем свою экосистему, у нас все для этого есть! Есть элементы этой экосистемы, которые нужно доработать. Нужно сделать свой интернет-магазин, потому что AppStrore и GooglePlay на сегодняшний день у нас уже практически могут скоро не дать возможности скачивать приложения”

Михаил Владимирович не просто обратился к айтишникам - он пробил 4-ую стену между нами, IT-специалистами, и правительством РФ. Раньше работа правительства была для нас нечто вроде телепередачи, которая к реальности имела мало отношения. Пока правительство жило в мире “импортозамещения”, мы, в мире реальном, делали свою работу на принципах разработки и средствах производства ПО, полностью импортированных в нашу страну из стран запада и большей частью из главной, теперь недружественной страны - США. И, в общем-то, всех это устраивало. Мы за свою работу получали очень хорошие деньги, наши зарплаты в разы превышали зарплаты рабочих других специальностей, а правительство гордилось отечественными IT-компаниями и успехами российской IT-отрасли на фоне других отраслей.

Но вот, что-то пошло не так. Михаил Владимирович, как вы и сказали, уже на 3-ий день спецоперации правительство обратило внимание именно на IT-сектор. Наш профсоюз уже освещал эту тему, и, на тот момент, нам, IT-специалистам, было непонятно - а почему именно IT? Разве в условиях санкций, это самый важный сектор? Но после вашего призыва, становятся понятны причины - видимо, наше правительство считает, что наше IT - это такой независимый сектор экономики, в котором достаточно удержать внутри страны как можно больше айтишников и они что-нибудь придумают, например, свой аналог apple store (который, кстати, уже был разработан для Android, но умер).

Читать далее ответ профсоюза IT
Всего голосов 160: ↑84 и ↓76+23
Комментарии499

Таймер в .NET с интервалом 1 мс. Windows

Уровень сложностиСредний
Время на прочтение14 мин
Количество просмотров24K

Вы пишите код на платформе .NET под Windows и вам нужно выполнять некоторые действия каждую миллисекунду. Возможно ли это? Какие есть варианты и насколько они надёжны? Разберёмся, что можно использовать, и какие есть гарантии по точности срабатывания. Статья сконцентрирована на поиске такого решения, которое работало бы и под .NET Framework, и под .NET Core / .NET, и в разных версиях ОС, и являлось бы механизмом общего назначения (а не только для программ с GUI, например).

Читать далее
Всего голосов 70: ↑70 и ↓0+70
Комментарии83

Подводные камни бенчмаркинга в .NET: фрагмент книги Андрея Акиньшина

Время на прочтение12 мин
Количество просмотров6.2K

Андрей Акиньшин @DreamWalker хорошо известен в .NET-сообществе: он мейнтейнер BenchmarkDotNet и perfolizer, член программного комитета нашей конференции DotNext, автор книги Pro .NET Benchmarking о том, как правильно бенчмаркать.

А теперь эта книга есть и на русском языке — ее перевод подготовило издательство «Питер». Сделаем важную оговорку: переводил не сам Андрей, так что русскоязычная терминология может отличаться от той, которую выбрал бы он, и «каноническим авторским вариантом» по-прежнему остаётся англоязычный. Но наверняка для многих важна сама возможность прочитать это на родном языке, поэтому с любезного разрешения Андрея и издательства мы публикуем на Хабре фрагмент перевода.

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

Читать далее
Всего голосов 27: ↑27 и ↓0+27
Комментарии3

Объяснение фильтра Калмана в картинках

Время на прочтение9 мин
Количество просмотров46K
image

Я обязан рассказать вам о фильтре Калмана, потому что он выполняет просто потрясающую задачу.

Как ни удивительно, о нём, похоже, знают немногие разработчики ПО и учёные, и это печалит меня, потому что это очень обобщённый и мощный инструмент для объединения информации в условиях присутствия неопределённости. Иногда его способность извлечения точной информации кажется почти магической, а если вы думаете, что я слишком много болтаю, то взгляните на это видео, в котором я показываю, как фильтр Калмана определяет ориентацию свободно плавающего тела, посмотрев на его вектор скорости. Потрясающе!
Читать дальше →
Всего голосов 116: ↑116 и ↓0+116
Комментарии31

«Выглядит похоже». Как работает перцептивный хэш

Время на прочтение6 мин
Количество просмотров123K
За последние несколько месяцев несколько человек спросили меня, как работает TinEye и как в принципе работает поиск похожих картинок.

По правде говоря, я не знаю, как работает поисковик TinEye. Он не раскрывает деталей используемого алгоритма(-ов). Но глядя на поисковую выдачу, я могу сделать вывод о работе какой-то формы перцептивного хэш-алгоритма.
Читать дальше →
Всего голосов 149: ↑145 и ↓4+141
Комментарии46

8 способов вызвать утечки памяти в .NET

Время на прочтение9 мин
Количество просмотров23K

Опытные .NET-разработчики знают, что даже несмотря на наличие в .NET сборщика мусора (Garbage Collector), утечки памяти все равно возникают с завидной регулярностью. Утечки возможны не из-за ошибок в сборщике мусора, а потому что даже в управляемом коде есть множество способов их появления.

В этой статье мы пройдемся по наиболее частым причинам возникновения утечек памяти в .NET-приложениях. Все примеры написаны на C#, но описанные проблемы и способы их решения справедливы и для других .NET-языков.

Читать далее
Всего голосов 24: ↑21 и ↓3+22
Комментарии44

Q-Q Plots. От чайника до профессионала за один гайд

Время на прочтение8 мин
Количество просмотров43K

Как понять, что выборка данных принадлежит определенному распределению? Есть 2 метода: аналитический тест Колмогорова-Смирнова (тест Шапиро-Уилка для нормального) и графический метод при помощи графика квантиль-квантиль плот.

Чем так замечателен второй вариант? Он позволяет делать выводы, не основываясь на таких спорных показателях какp.value.

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

Читать далее
Всего голосов 7: ↑7 и ↓0+7
Комментарии2

Простейший способ создания музыкальной гармонии. Квинтовый круг с числами мажорности аккордов

Время на прочтение6 мин
Количество просмотров34K

В этой статье вы узнаете простой способ осмысленно создавать аккордовые прогрессии - музыкальную гармонию. Чтобы строить аккордовые прогрессии вовсе не обязательно глубоко изучать теорию. Достаточно пользоваться квинтовым кругом со значениями мажорности аккордов и логически организовать перемещение по нему - плавно, прыжками, чередуя, периодически возвращаясь к тонике. Можно создавать какие угодно гармонические фигуры. Зная все градации изменений при ходах между любыми аккордами можно построить как динамичные(напряженные) так и плавные(спокойные) прогрессии. Также разберем логику множества популярных аккордовых последовательностей, гармонию популярной песни а также раскроем секрет золотой секвенции.

Читать далее
Всего голосов 11: ↑7 и ↓4+7
Комментарии114

Делаем сервер из Android-телефона

Время на прочтение8 мин
Количество просмотров126K

Некоторое время назад мне пришла в голову интересная идея — превратить свои старые телефоны (их скопилось немало за десять лет) в серверы, в качестве альтернативы покупке Raspberry Pi.


image


На то было несколько причин: во-первых, у телефонов есть батарея, что для сервера практически бесплатный мини-UPS, во-вторых, внутренняя память смартфона (UFS) работает быстрее и надёжнее, чем SD-карта. В-третьих, у телефонов имеется экран, по которому можно отслеживать состояние сервера.


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


TL;DR: в этом посте будут разобраны вопросы установки PostmarketOS на смартфон,
поднятия на нём в качестве примера Docker и веб-приложения в нём.

За длинной версией под кат
Всего голосов 99: ↑98 и ↓1+128
Комментарии97

Использование библиотеки LLVM для генерации кода регулярных выражений

Время на прочтение20 мин
Количество просмотров4.6K

Введение


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


Возникает вопрос — как можно ускорить построение конечных автоматов по регулярным выражениям? У меня как-то раз возникла идея, как это можно сделать — для этого можно применить настоящий компилятор, который может генерировать максимально эффективный машинный код. Эту идею я решил опробовать на практике, используя библиотеку LLVM как компилятор/оптимизатор для регулярных выражений. Что из этого вышло, будет изложено ниже в данной статье.

Читать дальше →
Всего голосов 19: ↑19 и ↓0+19
Комментарии12

Cоздание переиспользуемых Linq фильтров (построителей предикатов для Where), которые можно применять для разных типов

Время на прочтение4 мин
Количество просмотров4.8K

Способ создания переиспользуемых Linq фильтров (построителе предикатов для условия Where), которые можно применять для разных типов объектов. Поля объектов для фильтрации указываются с помощью MemberExpression.

Способ подходит для Entity Framework, включая Async операции.

Читать далее
Всего голосов 1: ↑1 и ↓0+1
Комментарии5

Учим ASP.NET Core новым трюкам на примере Json Rpc 2.0

Время на прочтение16 мин
Количество просмотров9.9K

Хотите добиться нестандартного поведения от aspnet core? Мне вот понадобилось добавить прозрачную поддержку Json Rpc. Расскажу о том, как я искал решения для всех хотелок, чтобы вышло красиво и удобно. Может быть, вам пригодятся знания о разных точках расширения фреймворка. Или о тонкостях поддержки Json Rpc, даже на другом стеке/языке.


В результате получилась библиотека, которая позволяет работать с Json Rpc, вообще не задумываясь, что он спрятан под капотом. При этом пользователю не нужно уметь ничего нового, только привычный aspnet mvc.

Читать дальше →
Всего голосов 8: ↑7 и ↓1+6
Комментарии6

.NET nanoFramework — платформа для разработки приложений на C# для микроконтроллеров

Время на прочтение14 мин
Количество просмотров23K
nanoframework

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

.NET nanoFramework является малой версией «большого» .NET Framework предназначенного для настольных систем. Разработка приложений ведется на языке C# в среде разработки Visual Studio. Сама платформа является исполнительной средой .NET кода, это позволяет абстрагироваться от аппаратного обеспечения и дает возможность переносить программный код с одного микроконтроллера на другой, который тоже поддерживает .NET nanoFramework. Программный код на C# для настольных систем, без изменений или с небольшой адаптацией (необходимо помнить про малый объем оперативной памяти) исполнится на микроконтроллере. Благодаря этому, разработчики на .NET с минимальными знаниями в области микроэлектроники смогут разрабатывать различные устройства на .NET nanoFramework.
Читать дальше →
Всего голосов 35: ↑34 и ↓1+40
Комментарии54

УКЭП с TSP, OSCP и C# .NET Core 3.1

Время на прочтение10 мин
Количество просмотров22K

Разберемся как подписать документ не просто КЭП, а УКЭП и пороемся на форумах 10-ти летней давности. А еще попробуем ничего не сломать.

Это вообще законно?
Всего голосов 4: ↑4 и ↓0+4
Комментарии4

Кодогенерацию с использованием Roslyn можно использовать и без перехода на .Net 5

Время на прочтение6 мин
Количество просмотров4.2K


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


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


Далее я поделюсь своим опытом использования Roslyn при генерации кода, и надеюсь, что это поможет вам лучше понять, что именно предлагает Microsoft в .Net 5 и в каких случаях это можно использовать.

Читать дальше →
Всего голосов 12: ↑12 и ↓0+12
Комментарии4

.NET 5 + Source Generator = Javascript

Время на прочтение7 мин
Количество просмотров9.5K
Задача реализовать генерацию SPA (Vue/React) приложения на основе моделей и контроллеров C#.

В .NET 5 появился source generator. С его помощью это и сделаем. В данной статье будут рассмотрены основные проблемы, с которыми я столкнулся при использовании source generator и их решение. Сама генерация UI выходит за рамки этой статьи. Используется Visual Studio 2019.
Читать дальше →
Всего голосов 8: ↑7 и ↓1+8
Комментарии5

Информация

В рейтинге
1 756-й
Откуда
Стамбул, Стамбул, Турция
Дата рождения
Зарегистрирован
Активность

Специализация

Backend Developer
Lead
От 7 000 $
C#
.NET
Entity Framework
MongoDB
Apache Kafka
DDD
High-loaded systems
Designing application architecture
Elasticsearch