Пример построения графика на 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»

Основные директивы OpenMP с примерами

Доброго времени суток, друзья! Как вы могли заметить, я иногда балуюсь с параллельным программированием посредством OpenMP. На данный момент готова заметка о том, как установить и настроить omp в Clion. А из реализаций есть параллельное умножение матриц. Я посчитал, что самое время собрать небольшую шпаргалку по наиболее часто используемым директивам и их параметрам, чтобы можно было сюда заглянуть и освежить их в памяти. Постараюсь на каждую директиву добавить по небольшому, чисто символическому синтаксическому примеру.

Не секрет, что OpenMP доступен на языках C/C++ и Fortran(даже слышал, что и на Java есть), но я буду писать примеры только для C/C++, уж не сердитесь, теория для них все равно одинаковая. Предлагаю ни секунды не терять и приступать к делу.

Общий синтаксис вызова директив OpenMP

Любые дополнительные директивы вызываются с помощью стандартной директивы #pragma, и OpenMP не исключение. Следовательно, для того, чтобы обратиться к директиве нужно написать #pragma omp, и назвать искомую директиву. Справедлива следующая конструкция вызова.

#pragma omp директива [опция1, опция2, ...]

Где «директива» — имя директивы, а опции являются необязательным для вызова, их у разных директив может быть разное количество, о них я тоже вкратце расскажу.

читать далее «Основные директивы OpenMP с примерами»