В предыдущей статье мы познакомились с терминами и определениями теории графов. В этой же статье обсудим различные способы представления графа в памяти компьютера для его обработки. Покажем, какие структуры данных можно использовать, а также проговорим преимущества и недостатки каждого способа.
Бэкенд разработчик (.NET)
Как я разогнал fail2ban* в тысячу раз с помощью SIMD
Fail2ban
— утилита чрезвычайно полезная во многих случаях. Думаю, многие используют её для того, чтобы в автоматическом режиме блокировать особенно назойливых «посетителей». К сожалению, если входящий поток становится слишком большим, fail2ban
теряет все свои полезные свойства, потому что разбор лога безнадёжно отстаёт от реальности.
Лог nginx
из 100 тысяч строчек fail2ban
при самых простых настройках разбирает порядка 45 секунд. Нехитрыми манипуляциями его можно ускорить раз в 6, но этого оказалось недостаточно. Наивная реализация на аналогичного фильтра на Rust уже обеспечила требуемую производительность, но если уж взялся за оптимизацию, то остановиться трудно.
* только необходимую часть функционала
R*-tree в Go, немного геймдева и поиска элементов в пространстве
Приветствую, уважаемые читатели Habr!
Если Вы когда-нибудь задумывались, какая структура данных может помочь максимально эффективно искать элементы в пространстве, то, возможно, эта статья Вам поможет!
Эта статья заденет опыт в геймдейве и идеи, где это ещё можно было бы использовать :)
Самодостаточная капча без бутстрапа и БД
Zero Storage Captcha работает локально (возможно, в виде дополнительного класса в коде приложения), не обязывает хранить информацию на стороне сервера о сгенерированных картинках и в тот же момент позволяет проверить ответ любого пользователя со стопроцентной вероятностью.
Открытое письмо Михаилу Мишустину: у нас нет условий для создания своей экосистемы и IT суверенитета
7 апреля 2022г., председатель правительства РФ, Мишустин Михаил Владимирович Владимирович, “пользуясь случаем”, напрямую обратился к разработчикам и айтишникам:
"Ребята — разработчики, программисты, айтишники, — давайте сделаем свою экосистему, у нас все для этого есть! Есть элементы этой экосистемы, которые нужно доработать. Нужно сделать свой интернет-магазин, потому что AppStrore и GooglePlay на сегодняшний день у нас уже практически могут скоро не дать возможности скачивать приложения”
Михаил Владимирович не просто обратился к айтишникам - он пробил 4-ую стену между нами, IT-специалистами, и правительством РФ. Раньше работа правительства была для нас нечто вроде телепередачи, которая к реальности имела мало отношения. Пока правительство жило в мире “импортозамещения”, мы, в мире реальном, делали свою работу на принципах разработки и средствах производства ПО, полностью импортированных в нашу страну из стран запада и большей частью из главной, теперь недружественной страны - США. И, в общем-то, всех это устраивало. Мы за свою работу получали очень хорошие деньги, наши зарплаты в разы превышали зарплаты рабочих других специальностей, а правительство гордилось отечественными IT-компаниями и успехами российской IT-отрасли на фоне других отраслей.
Но вот, что-то пошло не так. Михаил Владимирович, как вы и сказали, уже на 3-ий день спецоперации правительство обратило внимание именно на IT-сектор. Наш профсоюз уже освещал эту тему, и, на тот момент, нам, IT-специалистам, было непонятно - а почему именно IT? Разве в условиях санкций, это самый важный сектор? Но после вашего призыва, становятся понятны причины - видимо, наше правительство считает, что наше IT - это такой независимый сектор экономики, в котором достаточно удержать внутри страны как можно больше айтишников и они что-нибудь придумают, например, свой аналог apple store (который, кстати, уже был разработан для Android, но умер).
Таймер в .NET с интервалом 1 мс. Windows
Вы пишите код на платформе .NET под Windows и вам нужно выполнять некоторые действия каждую миллисекунду. Возможно ли это? Какие есть варианты и насколько они надёжны? Разберёмся, что можно использовать, и какие есть гарантии по точности срабатывания. Статья сконцентрирована на поиске такого решения, которое работало бы и под .NET Framework, и под .NET Core / .NET, и в разных версиях ОС, и являлось бы механизмом общего назначения (а не только для программ с GUI, например).
Подводные камни бенчмаркинга в .NET: фрагмент книги Андрея Акиньшина
Андрей Акиньшин @DreamWalker хорошо известен в .NET-сообществе: он мейнтейнер BenchmarkDotNet и perfolizer, член программного комитета нашей конференции DotNext, автор книги Pro .NET Benchmarking о том, как правильно бенчмаркать.
А теперь эта книга есть и на русском языке — ее перевод подготовило издательство «Питер». Сделаем важную оговорку: переводил не сам Андрей, так что русскоязычная терминология может отличаться от той, которую выбрал бы он, и «каноническим авторским вариантом» по-прежнему остаётся англоязычный. Но наверняка для многих важна сама возможность прочитать это на родном языке, поэтому с любезного разрешения Андрея и издательства мы публикуем на Хабре фрагмент перевода.
В книге много сказано о бенчмаркинге в целом, поэтому она может быть полезна для самых разных разработчиков, но мы приведём фрагмент о том, что специфично для .NET.
Объяснение фильтра Калмана в картинках
Я обязан рассказать вам о фильтре Калмана, потому что он выполняет просто потрясающую задачу.
Как ни удивительно, о нём, похоже, знают немногие разработчики ПО и учёные, и это печалит меня, потому что это очень обобщённый и мощный инструмент для объединения информации в условиях присутствия неопределённости. Иногда его способность извлечения точной информации кажется почти магической, а если вы думаете, что я слишком много болтаю, то взгляните на это видео, в котором я показываю, как фильтр Калмана определяет ориентацию свободно плавающего тела, посмотрев на его вектор скорости. Потрясающе!
«Выглядит похоже». Как работает перцептивный хэш
По правде говоря, я не знаю, как работает поисковик TinEye. Он не раскрывает деталей используемого алгоритма(-ов). Но глядя на поисковую выдачу, я могу сделать вывод о работе какой-то формы перцептивного хэш-алгоритма.
8 способов вызвать утечки памяти в .NET
Опытные .NET-разработчики знают, что даже несмотря на наличие в .NET сборщика мусора (Garbage Collector), утечки памяти все равно возникают с завидной регулярностью. Утечки возможны не из-за ошибок в сборщике мусора, а потому что даже в управляемом коде есть множество способов их появления.
В этой статье мы пройдемся по наиболее частым причинам возникновения утечек памяти в .NET-приложениях. Все примеры написаны на C#, но описанные проблемы и способы их решения справедливы и для других .NET-языков.
Q-Q Plots. От чайника до профессионала за один гайд
Как понять, что выборка данных принадлежит определенному распределению? Есть 2 метода: аналитический тест Колмогорова-Смирнова (тест Шапиро-Уилка для нормального) и графический метод при помощи графика квантиль-квантиль плот.
Чем так замечателен второй вариант? Он позволяет делать выводы, не основываясь на таких спорных показателях как.
Графический метод является мощнейшим инструментом анализа, но как сказано в англоязычной статье википедии про Q-Q Plots, требует серьезных навыков для интерпретации. В данной статье я представляю дорожную карту пути к пониманию квантильных графиков.
Простейший способ создания музыкальной гармонии. Квинтовый круг с числами мажорности аккордов
В этой статье вы узнаете простой способ осмысленно создавать аккордовые прогрессии - музыкальную гармонию. Чтобы строить аккордовые прогрессии вовсе не обязательно глубоко изучать теорию. Достаточно пользоваться квинтовым кругом со значениями мажорности аккордов и логически организовать перемещение по нему - плавно, прыжками, чередуя, периодически возвращаясь к тонике. Можно создавать какие угодно гармонические фигуры. Зная все градации изменений при ходах между любыми аккордами можно построить как динамичные(напряженные) так и плавные(спокойные) прогрессии. Также разберем логику множества популярных аккордовых последовательностей, гармонию популярной песни а также раскроем секрет золотой секвенции.
Делаем сервер из Android-телефона
Некоторое время назад мне пришла в голову интересная идея — превратить свои старые телефоны (их скопилось немало за десять лет) в серверы, в качестве альтернативы покупке Raspberry Pi.
На то было несколько причин: во-первых, у телефонов есть батарея, что для сервера практически бесплатный мини-UPS, во-вторых, внутренняя память смартфона (UFS) работает быстрее и надёжнее, чем SD-карта. В-третьих, у телефонов имеется экран, по которому можно отслеживать состояние сервера.
Ну и в-четвёртых, мне просто было жаль их выбрасывать. Консьюмеризм в наше время предписывает каждый год-два покупать новые смартфоны, производители блокируют возможности железа, которые им невыгодны, прекращают поддержку старых моделей, оставляя людей беспомощными. Миллионы смартфонов отправляются на свалку истории каждый год, хотя каждый из них это мощный компьютер.
TL;DR: в этом посте будут разобраны вопросы установки PostmarketOS на смартфон,
поднятия на нём в качестве примера Docker и веб-приложения в нём.
Использование библиотеки LLVM для генерации кода регулярных выражений
Введение
Регулярные выражения — широко используемый способ задания конечных автоматов для поиска текста. Применяются они с давних времён и повсеместно. Они удобны тем, что их запись весьма краткая и лаконичная. Но обратной стороной их удобства является достаточно низкая производительность конечных автоматов, построенных по регулярным выражениям. Проблема в том, что в большинстве реализаций этот конечный автомат строится на лету — во время исполнения программы, что весьма ограничивает скорость его работы.
Возникает вопрос — как можно ускорить построение конечных автоматов по регулярным выражениям? У меня как-то раз возникла идея, как это можно сделать — для этого можно применить настоящий компилятор, который может генерировать максимально эффективный машинный код. Эту идею я решил опробовать на практике, используя библиотеку LLVM как компилятор/оптимизатор для регулярных выражений. Что из этого вышло, будет изложено ниже в данной статье.
Cоздание переиспользуемых Linq фильтров (построителей предикатов для Where), которые можно применять для разных типов
Способ создания переиспользуемых Linq фильтров (построителе предикатов для условия Where), которые можно применять для разных типов объектов. Поля объектов для фильтрации указываются с помощью MemberExpression.
Способ подходит для Entity Framework, включая Async операции.
Учим ASP.NET Core новым трюкам на примере Json Rpc 2.0
Хотите добиться нестандартного поведения от aspnet core? Мне вот понадобилось добавить прозрачную поддержку Json Rpc. Расскажу о том, как я искал решения для всех хотелок, чтобы вышло красиво и удобно. Может быть, вам пригодятся знания о разных точках расширения фреймворка. Или о тонкостях поддержки Json Rpc, даже на другом стеке/языке.
В результате получилась библиотека, которая позволяет работать с Json Rpc, вообще не задумываясь, что он спрятан под капотом. При этом пользователю не нужно уметь ничего нового, только привычный aspnet mvc.
.NET nanoFramework — платформа для разработки приложений на C# для микроконтроллеров
.NET nanoFramework — это бесплатная платформа с открытым исходным кодом, основанная на .NET и предназначена для малых встраиваемых устройств, микроконтроллеров. С ее помощью можно разрабатывать различные устройства для Интернета вещей, носимые устройства, научные приборы, робототехнические устройства, можно создавать прототипы и даже использовать на промышленном оборудование.
.NET nanoFramework является малой версией «большого» .NET Framework предназначенного для настольных систем. Разработка приложений ведется на языке C# в среде разработки Visual Studio. Сама платформа является исполнительной средой .NET кода, это позволяет абстрагироваться от аппаратного обеспечения и дает возможность переносить программный код с одного микроконтроллера на другой, который тоже поддерживает .NET nanoFramework. Программный код на C# для настольных систем, без изменений или с небольшой адаптацией (необходимо помнить про малый объем оперативной памяти) исполнится на микроконтроллере. Благодаря этому, разработчики на .NET с минимальными знаниями в области микроэлектроники смогут разрабатывать различные устройства на .NET nanoFramework.
УКЭП с TSP, OSCP и C# .NET Core 3.1
Разберемся как подписать документ не просто КЭП, а УКЭП и пороемся на форумах 10-ти летней давности. А еще попробуем ничего не сломать.
Кодогенерацию с использованием Roslyn можно использовать и без перехода на .Net 5
Недавно, когда я просматривал новые возможности, которые будут включены в .Net 5, я натолкнулся на одну весьма интересную — генераторы исходного кода. Этот функционал меня особенно заинтересовал, так как я использую аналогичный подход в течение последних… 5 лет, и то, что предлагает Microsoft — это просто более глубокая интеграция этого подхода в процесс сборки проектов.
Примечание: Оригинал был написан в момент, когда релиз .Net 5 только-только собирался выйти, но актуальности этот текст, на мой взгляд, не потерял, поскольку переход на новую версию платформы занимает какое-то время, да и принципы работы с Roslyn никак не поменялись.
Далее я поделюсь своим опытом использования Roslyn при генерации кода, и надеюсь, что это поможет вам лучше понять, что именно предлагает Microsoft в .Net 5 и в каких случаях это можно использовать.
.NET 5 + Source Generator = Javascript
В .NET 5 появился source generator. С его помощью это и сделаем. В данной статье будут рассмотрены основные проблемы, с которыми я столкнулся при использовании source generator и их решение. Сама генерация UI выходит за рамки этой статьи. Используется Visual Studio 2019.
Информация
- В рейтинге
- 1 756-й
- Откуда
- Стамбул, Стамбул, Турция
- Дата рождения
- Зарегистрирован
- Активность