Разрабатывая один проект на свежем .NET 7 столкнулся с необходимостью подписывать данные с использованием отечественных криптоалгоритмов. Ранее, в .NET Framework хорошая поддержка работы с со сторонними криптопровайдерами, реализующими семейство алгоритмов ГОСТ (CryptoPro CSP, ViPNet CSP и пр.), шла "из коробки". К сожалению, в новые версии фреймворка часть ранее работающего функционала по работе с CMS-сообщениями не попала, и пришлось восполнять пробел надёжными дедовскими методами, т. е. с помощью старого доброго WinAPI.
User
Реализация двустороннего A* на двух потоках
![](http://habrastorage.org/r/w780/getpro/habr/upload_files/5a3/759/51a/5a375951a48a01deac30994d7198a11f.jpg)
На Хабре можно найти немало статей, посвящённых оптимизациям поиска кратчайшего пути на графе. Я расскажу ещё про еще один подход. Речь пойдёт о распараллеливании алгоритма A* и исполнении его на двух потоках, а также о сложностях, с которыми я столкнулся при реализации, и их преодолении.
Полезен ли сегодня быстрый обратный квадратный корень из Quake III?
![](https://habrastorage.org/webt/lw/f7/7m/lwf77muzjqzkshwyawp7bri8uno.jpeg)
В 2005 году id Software опубликовала под лицензией GPL-2 исходный код своей игры 1999 года Quake III Arena. В файле code/game/q_math.c есть функция для вычисления обратного квадратного корня числа, которая на первый взгляд выглядит очень любопытным алгоритмом:
float Q_rsqrt( float number )
{
long i;
float x2, y;
const float threehalfs = 1.5F;
x2 = number * 0.5F;
y = number;
i = * ( long * ) &y; // зловещий хакинг чисел с плавающей запятой на уровне битов
i = 0x5f3759df - ( i >> 1 ); // какого чёрта?
y = * ( float * ) &i;
y = y * ( threehalfs - ( x2 * y * y ) ); // первая итерация
// y = y * ( threehalfs - ( x2 * y * y ) ); // вторая итерация, можно удалить
return y;
}
Об этом алгоритме написано множество статей, и ему посвящена хорошая страница Википедии, где он назван fast inverse square root (быстрым обратным квадратным корнем). На самом деле, этот алгоритм упоминался на различных форумах ещё до публикации исходного кода Q3. Ryszard из Beyond3D провёл в 2004-2005 годах исследование и в конечном итоге выяснил, что первоначальным автором алгоритма был Грег Уолш из Ardent Computer, который создал его десятью годами ранее.
70+ бесплатных приманок для ловли хакеров
![](https://habrastorage.org/getpro/habr/upload_files/726/c76/6c8/726c766c8b54647c23d5fa3e7af1fa6c.gif)
Сегодня я хочу поделиться подборкой open source ханипотов, которые можно использовать для защиты своих серверов и локальных сетей от кибератак. Но для начала давайте разберемся, что такое ханипот и зачем он нужен.
Honeypot — это приманка для хакеров, которая имитирует реальную цель атаки. Он может имитировать любой цифровой актив, например, сервер, приложение, устройство или даже отдельный документ. Такие приманки создаются специально, чтобы привлечь внимание злоумышленников и отвлечь их от настоящих целей.
Столярная мастерская своими руками: ожидания и реальность
![](https://habrastorage.org/getpro/habr/post_images/61e/ae8/f7b/61eae8f7bf0b8aef4059f1e6a6d914a3.jpg)
Зачем вообще делать столярную мастерскую? Однозначного ответа у меня нет. Если вам просто хочется делать что-то руками из дерева, то есть мастерские, в которые можно прийти, заплатить деньги за аренду станков и рабочего места, и сделать всё там. Необязательно иметь свое помещение и собственное оснащение. Если же вы хотите заниматься деревообработкой как бизнесом, то конкуренция здесь высокая, найти свою нишу сложно. Поэтому я начну с объяснения моих собственных мотивов.
Библиотека разработчика микросервисов. Полезные книги на русском языке
![](https://habrastorage.org/r/w1560/getpro/habr/upload_files/f1e/f2b/d88/f1ef2bd88a541b3dee977679a95d7028.png)
Микросервисы становятся все более популярным способом создания и поддержки сложных приложений. По сути, микросервисы — это набор небольших независимых сервисов или компонентов, которые совместно реализуют задачи большого приложения. Сегодня расскажем о полезных книгах для начинающих и опытных разработчиков микросервисных архитектур.
Дорожная карта навыков разработчика на C++
![](https://habrastorage.org/r/w780/getpro/habr/upload_files/eb3/ff8/094/eb3ff8094d58f7d10c6697397596fa24.jpg)
Джеймс Гослинг как-то сказал, что Java — это C++, из которого убрали все пистолеты, ножи и дубинки, однако практика показывает, что «ножи и дубинки» становятся классным инструментом в руках опытных разработчиков. В общем, немалая часть проклятий в адрес C++ объясняется элементарным «вы просто не умеете его готовить». Мы в «Лаборатории Касперского» умеем готовить «плюсы» и поэтому любим их. C++ — низкоуровневый язык, который позволяет работать с железом и писать быстрый код и при этом содержит массу возможностей. В экосистеме «плюсов» куча проработанных паттернов, best practices и готовых библиотек под разные задачи. Язык динамично развивается — но сохраняет обратную совместимость.
В этом посте мы с помощью карты покажем, какие навыки и знания нужны разработчику на C++. Естественно, разбирать путь развития «плюсистов» будем на собственном примере — тем более что у нас в «Лаборатории Касперского» много очень разных проектов с отличающимися задачами. Однако наша карта по большей части универсальна и будет полезна всем, кто хочет развиваться в С++-разработке.
Отменить нельзя продолжить
![](https://habrastorage.org/webt/67/ee/_v/67ee_vlphu2crtgtqcwm8rn8rea.png)
Как описать асинхронную цепочку запросов и не сломать всё? Просто? Не думаю!
Я автор менеджера состояния Reatom и сегодня хочу вам рассказать про главную киллер-фичу redux-saga и rxjs и как теперь её можно получить проще, а так же про грядущие изменения в стандарте ECMAScript.
Речь пойдёт об автоматической отмене конкурентных асинхронных цепочек — обязательном свойстве при работе с любым REST API и другими более общими асинхронными последовательными операциями.
Как на самом деле работает Async/Await в C# (Часть 2)
![](https://habrastorage.org/r/w1560/getpro/habr/upload_files/f56/143/e4c/f56143e4c804fdf1110d091ffa95d75e.png)
Несколько недель назад в блоге «.NET Blog» появилась статья «Что такое .NET, и почему вы должны выбрать его?». В нем был представлен высокоуровневый обзор платформы, кратко описаны различные компоненты и архитектурные решения, а также обещаны более подробные посты по затронутым темам. Этот пост является первым таким продолжением, в котором подробно рассматривается история создания, архитектурные решения и детали реализации async/await в C# и .NET.
Запуск аналогов ChatGPT на домашнем ПК в пару кликов и с интерфейсом
![](https://habrastorage.org/r/w780/getpro/habr/upload_files/18b/872/343/18b87234398caebe8ec532f07f8f6867.jpeg)
--- Обновление статьи 9 Августа 2023 ---
В течении последнего полугода в сфере текстовых нейронок всё кипит - после слитой в сеть модели Llama, aka "ChatGPT у себя на пекарне" люди ощутили, что никакой зацензуренный OpenAI по сути им и не нужен, а хорошие по мощности нейронки можно запускать локально.
Основная проблема в том, что всё это требует глубоких технических знаний.
Но в этой статье я расскажу, как запустить добротную нейросеть на домашнем ПК с 16ГБ ОЗУ в несколько кликов. Буквально в несколько кликов - копаться в консоли не придётся.
Нестабильный Wi-Fi? MikroTik покупай, частоту на нём автоматом меняй
![](https://habrastorage.org/webt/xt/w1/fo/xtw1foye0vkym-n2dy_t9ya--gk.jpeg)
В настоящее время интерференция наиболее актуальна для диапазона 2.4 ГГц, который перенасыщен работой вездесущих точек доступа. В статье я рассмотрел, какие возможности по исследованию радиочастотного спектра имеются на борту RouterOS, сформулировал рекомендации по выбору рабочей частоты точки доступа, работающей в сети без контроллера, а также предложил авторскую реализацию её автоматической смены. Предыстория такова, что ко мне обратилась компания Coffee Cup, у которой имеется сеть точек продаж формата кофе с собой, размещённых в разнокалиберных торговых центрах различных городов. Для работы кассового оборудования жизненно необходима работа Wi-Fi именно в диапазоне 2.4 ГГц, который, как следует ожидать, сильно зашумлён даже в огромных ТРЦ. Проблема оказалась настолько острой, что периодически устройства не могли нормально выйти в интернет, войдя в пике попыток переподключений к точке доступа. Вот в этом контексте и будет идти повествование, с отвлечением на моделирование других ситуаций.
Современные технологии обхода блокировок: V2Ray, XRay, XTLS, Hysteria, Cloak и все-все-все
Три месяца назад здесь на Хабре была опубликована статья “Интернет-цензура и обход блокировок: не время расслабляться”, в которой простыми примерами показывалось, что практически все популярные у нас для обхода блокировок VPN- и прокси-протоколы, такие как Wireguard, L2TP/IPSec, и даже SoftEther VPN, SSTP и туннель-через-SSH, могут быть довольно легко детектированы цензорами и заблокированы при должном желании. На фоне слухов о том, что Роскомнадзор активно обменивается опытом блокировок с коллегами из Китая и блокировках популярных VPN-сервисов, у многих людей стали возникать вопросы, что же делать и какие технологии использовать для получения надежного нефильтрованного доступа в глобальный интернет.
Мировым лидером в области интернет-цензуры является Китай, поэтому имеет смысл обратить на технологии, которые разработали энтузиасты из Китая и других стран для борьбы с GFW (“великим китайским файрволом”). Правда, для неподготовленного пользователя это может оказаться нетривиальной задачей: существует огромное количество программ и протоколов с похожими названиями и с разными не всегда совместимыми между собой версиями, огромное количество опций, плагинов, серверов и клиентов для них, хоть какая-то нормальная документация существует нередко только на китайском языке, на английском - куцая и устаревшая, а на русском ее нет вообще.
Поэтому сейчас мы попробуем разобраться, что же это все такое и как это использовать и не сойти с ума.
Архитектор в ИТ — он как философ. Все вопросы и решения может подвергнуть сомнению
Уважаемые читатели, эта статья будет для вас полезна, если:
• Вы являетесь действующим архитектором ИТ и вам необходима дискуссия с коллегами о роли архитектора;
• Вы хотите стать архитектором, но еще не осознали, кто это;
• С вами рядом работает архитектор, и вы не понимаете, чем он занимается;
• Вы не владеете английским, но давно хотели прочитать книгу западного автора по архитектуре;
• И в целом если вы интересующийся современными веяниями ИТ, а именно архитектура является популярным запросом от работодателей в виду растущих масштабов автоматизации.
Физическая активность и ее влияние на здоровье человека
В этой статье я хочу затронуть тему, которая в IT-сообществе и так хорошо известна а кому-то может даже и поднадоела, но поговорить о которой все же хочется по двум причинам: во-первых, во время пандемии COVID-19 в 2020 году она стала еще актуальнее, а во-вторых, мне есть чем поделиться из собственного опыта.
И тема эта — физическая активность и то как она влияет на наше здоровье. Многие из нас видели в медицинских учреждениях плакаты о здоровом образе жизни на которых, кроме вреда от употребления алкоголя и курения еще упоминалась польза физических упражнений, утренней зарядки и так далее. Но вот только на этих плакатах не сказано как же именно влияет наличие или отсутствие физических нагрузок на наше здоровье (по крайней мере я таких не припоминаю).
В этой статье я хочу поделиться тем, что мне известно о том как влияет на наше здоровье недостаток физической активности, как влияет на здоровье умеренная физическая активность, какие виды активности мне понравились больше всего и почему я готов их порекомендовать тем кто ищет что бы такого ему попробовать чтобы держать себя в форме и укрепить здоровье.
Ультимативная дорожная карта для изучения SQL и баз данных в 2023 году + источники для знаний
![](https://habrastorage.org/r/w780/getpro/habr/upload_files/a64/3dd/663/a643dd663a085735e36e2a7ec409895b.jpg)
Roadmap, который поможет вам научиться работать с SQL. Чтобы стать настоящим экспертом в SQL, нужно много практиковаться и изучать различные аспекты языка на протяжении многих лет. Мой Roadmap предлагает отличный старт для начала изучения SQL, поэтому я рекомендую вам приступить к обучению согласно плану.
Как рассказать о новом функционале и провести демо на английском языке
![](https://habrastorage.org/r/w1560/getpro/habr/upload_files/c38/334/019/c38334019299439b0ad13b33f9343588.png)
Умение грамотно представить заказчику новый функционал продукта является важным навыком успешной работы любого разработчика в иностранной компании.
Предлагаю рассмотреть аутентичные материалы. Меня заинтересовало короткое видео с Томасом Эзаном, Андроид инженером-разработчиком в компании Гугл. В недавней презентации каналу Android Developers он демонстрирует возможности нового программного пакета TensorFlow Lite и применение интерпретатора API в библиотеке машинного обучения. Разберем это видео с точки зрения структуры, грамматики и интересной лексики.
Reddit для программистов
![](https://habrastorage.org/r/w1560/webt/3k/mr/wm/3kmrwmvmxg8vw5fziceaios0u5a.png)
Эта статья посвящена одной популярной и активной площадке на просторах Интернета — Reddit. Кто не в курсе, Reddit — это платформа, где сосуществуют тысячи сообществ по интересам. Мы любим Reddit за честность, открытость и любознательность её пользователей. Если вы программист, особенно начинающий, и ещё не слышали про Reddit — эта статья обязательна для прочтения. А если сисадмин? Для вас тоже найдётся сабреддит! В этой статье мы собрали сабреддиты для всех-всех, каким-либо образом связанных с IT-индустрией. Даже для наших любимых HR! Что же такое Reddit?
Когда переподключения ускоряют работу по сети. Разбираемся с быстродействием TCP-сокетов
При написании предыдущей статьи я наткнулся на странный эффект с производительностью TCP-сокетов. При попытке отправить пачку запросов через сокет оказалось, что выгоднее заново устанавливать TCP-соединение после каждого запроса, а не переиспользовать его. Исследованию причин этого эффекта (а заодно и поиску способов от него избавиться) и посвящена эта статья.
Стохастический язык программирования на основе алгоритмов Маркова
![](https://habrastorage.org/getpro/habr/post_images/de1/568/5a5/de15685a5dfba20350816cd4350f1516.gif)
MarkovJunior — это вероятностный язык программирования, в котором программы являются сочетаниями правил перезаписи, а инференс выполняется при помощи распространения ограничений. MarkovJunior назван в честь математика Андрея Андреевича Маркова, придумавшего и исследовавшего то, что сейчас называется алгоритмами Маркова.
Я нашёл 213 уязвимостей безопасности в кодовой базе при помощи GPT-3
![](https://habrastorage.org/webt/6l/lv/_t/6llv_tiuizppef3wcpv7fbqvd9a.png)
«Меня удручает ваш уровень кибербезопасности»
Краткая сводка: GPT-3 обнаружила 213 уязвимостей безопасности в git-репозитории. Для сравнения: один из лучших коммерческих инструментов на рынке (разработанный респектабельной компанией, которая занимается кибербезопасностью) нашёл лишь 99 проблем; впрочем, этот инструмент предоставляет контекст в более структурированном формате. После ручной проверки случайной выборки 50 из 213 уязвимостей, выявленных GPT-3, только одна оказалась ложноположительной. У обоих инструментов было много ложноотрицательных результатов.
Information
- Rating
- 3,717-th
- Registered
- Activity