Установка и настройка библиотеки CryptoPP для C/C++

Прежде всего пара слов об этой замечательной библиотеке.

CryptoPP (она же Crypto++) — это чудесная и очень обширная библиотека криптографических функций и алгоритмов. Огромный выбор хеш-функций, реализации всех или почти всех шифров, возможность гибкой настройки каждого из них. Это и многое другое вы получите сразу после того, как прочитаете мою заметку и научитесь компилировать, собирать и подключать Crypto++ к своим проектам.

Неоспоримые плюсы CryptoPP

  • Умопомрачительное количество реализованных алгоритмов и протоколов (в том числе протокол Диффи-Хеллмана);
  • Самодокументированный код: библиотека грамотно написана, благодаря чему во многих случаях отпадает необходимость часто «гуглить» решение;
  • Скорость работы на хорошем уровне: а были сомнения? Это ж плюсы все таки.

Вещи, которые могут отпугнуть

Библиотека написана на полноценном академическом C++ с активным использованием ООП, шаблонов и классов. На первый взгляд это может показаться жутким запутанным клубком шаблонов, классов, статических функции и прочих ужасов. Особенно если библиотека была установлена «на один раз», например, студентом для домашнего задания.

Но есть выход! В таком случае можно просто нагуглить парочку примеров и вечно их модернизировать под разные задачи. Это становиться возможным как раз благодаря гибкой системе шаблонов. Работа с совершенно разными алгоритмами может быть реализована практически не отличающимся кодом. О этот чудный C++!

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

Установка библиотеки Crypto++

читать далее «Установка и настройка библиотеки CryptoPP для C/C++»

Пример построения графика на Python с помощью библиотеки matplotlib

Совсем коротенькая шпаргалка про построение графиков на питоне, своего рода шаблон, который будет у меня в быстром доступе. Используется библиотека matplotlib, которая реализует все или почти все функции для построения графиков в стиле MatLab. Названия функций и аргументы очень похожи, но все же это Python, синтаксис тут гораздо приятнее, чем в матлабе.

Функция которую будем изображать

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

Да, будем строить параболу! Для демонстрации вполне достаточно.

читать далее «Пример построения графика на Python с помощью библиотеки matplotlib»

Подсказки в PhpStorm для Doctrine Entity Manager с Zend Framework

Доброго времени суток! У меня появилась небольшая проблема во время программирования контроллера в Zend Framework 2, моя среда разработки никак не хотела давать подсказок по любым объектам, связанным со встроенной ORM Doctrine.

Описание проблемы автодополнения

Я пользуюсь IDE под названием IntelliJ IDEA от прекрасной фирмы JetBrains с установленным плагином на PHP, который называется PhpStorm. Но поверьте мне, дело совсем не в ней, любая среда бы не смогла разресолвить методы встроенной в Zend Framework доктрины.

Но ближе к делу.

Idea любезно отвечает «No suggestions», мол «сори, не знаю такого», на просьбу показать методы объекта класса EntityManager, я даже сделал скриншот.

PhpStrorm No suggestions by Zend Framework 2

Танцы с бубном вокруг настроек «Include Path» не увенчались успехом, пришлось идти бороздить просторы англоязычного интернета. Решение нашлось не сразу.

читать далее «Подсказки в PhpStorm для Doctrine Entity Manager с Zend Framework»

Вычисление глобального индекса нити в CUDA

Доброго времени суток! Я уже несколько раз затрагивал тему параллельных вычислений, но все время это были вычисления на старом добром центральном процессоре. А сейчас я вкратце расскажу о технологии CUDA от фирмы NVIDIA, которая расшифровывается как Compute Unified Device Architecture, и служит для того, чтобы выполнять параллельные вычисления на процессоре графического устройства, а именно — видеокарточки NVIDIA.

Grid, Block и Thread в CUDA

Для того, чтобы эффективно программировать с помощью технологии CUDA, в первую очередь нужно освоиться и научиться свободно оперировать основными понятиями вычислительной модели. Их три: грид(grid), блок(block) и нить(thread), последний еще называют потоком, это синонимы.

Grid является самым верхним уровнем абстракции в модели, он трехмерный и состоит из блоков. Например, в гриде размером 2x2x2 содержится 8 блоков. В свою очередь, каждый блок содержит в себе трехмерный массив нитей(threads), которые и являются непосредственными исполнителями вычислений. К примеру, если каждый из 8 блоков содержит 2x2x1 нитей, то всего на устройстве будет 32 рабочих потока, готовых приступить к любым вычислениям, причем работать они будут параллельно.

читать далее «Вычисление глобального индекса нити в CUDA»

Шпаргалка по связке VRF-MPLS-MPBGP

Доброго времени суток! Первый раз пишу о сетях и сетевых протоколах, хотя по учебе приходилось изучать очень и очень многие из них. Кроме того, в интернете целая куча документации, блогов и циклов статей по каждому из протоколов, с настройкой и прочими прелестями. Основной причиной написания этой заметки послужило то, что я составил для себя неплохую шпаргалку по протоколам MPLS, MPBGP и технологии VRF, и не хочу, чтобы она потерялась и забылась.

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

читать далее «Шпаргалка по связке VRF-MPLS-MPBGP»