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

Импорт больших файлов в phpMyAdmin

Доброго времени суток! Причиной возникновения этой заметки послужила ошибка, которую выкидывает phpMyAdmin при попытке импорта дампа базы из большого файла. Дословно она звучит примерно так: «Fatal error: Maximum execution time of 300 seconds exceeded in /opt/lampp/phpmyadmin/vendor/phpmyadmin/sql-parser/src/Lexer.php on line 227». Формулировка может отличаться в деталях. Из сообщения видно, что превышен максимальный временной лимит на исполнения скрипта, по этой причине дамп импортируется не весь и нам очень грустно. Но обо всем по порядку.

Не секрет, что для любого скрипта на PHP существуют стандартные настройки конфигурации, инициализированные в файле php.ini. Их там огромное количество и большинство из них трогать не рекомендуется.

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

читать далее «Импорт больших файлов в phpMyAdmin»

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

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

Grid, Block и Thread в CUDA

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

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

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

Сегментная адресация памяти в 32-х разрядных системах

Доброго времени суток, друзья! Сегодня будет еще одно небольшое включение в операционные системы и системное программирование, но больше с теоретической стороны. Причиной написания этой заметки послужил дефицит и разрозненность статей в интернете, которые описывали бы способы адресации оперативной памяти. Можно найти в отдельности принцип работы сегментной модели, кучу статей про страничную память, и, если очень сильно постараться, то и про сегментно-страничную что-нибудь отыщется. А она в свою очередь сейчас является основной в подавляющем большинстве операционных систем.

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

Под словом «память» я буду подразумевать, конечно же, оперативную память компьютера. О жестком диске речь будет идти только в момент упоминания подкачки.

Деление памяти на сегменты

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

читать далее «Сегментная адресация памяти в 32-х разрядных системах»