Книга Фредерика Брукса «Мифический человеко-месяц»

brooks

Не многие книги, так или иначе связанные с программированием, вспоминают через десяток лет. А уж таке книги, чтобы их переиздавали спустя почти 40 лет, это вообще уникальные. Этот пост как раз и посвящен одной такой книге, первое издание которой вышло аж в 1975 году, но на нее до сих пор ссылаются на форумах и статьях. Это книга Фредерика Брукса «Мифический человеко-месяц».

Автор книги в 60-ых годах прошлого века работал в компании IBM и участвовал в качестве менеджера в создании операционной системы OS/360 для компьютеров System/360 (это те самые компьютеры, которые были клонированы в СССР под названием ЕС ЭВМ). В этой книге автор описывает проблемы и возможные пути решения, возникающие при создании больших программных систем. В первую очередь книга описывает взгляд на разработку с точки зрения менеджера, работающего с группой программистов. Основной посыл книги — это проблема срывов сроков при создании софта, над которым трудится некоторое количество человек, больше одного-двух.

Читать далее ‘Книга Фредерика Брукса «Мифический человеко-месяц»’ »

Использование библиотеки Matplotlib. Как использовать эффект рисования от руки

В Matplotlib 1.3 появилась возможность применения эффекта рисования от руки, чтобы графики выглядели в стиле комиксов с сайта xkcd.com. Статья Как использовать эффект рисования от руки показывает, как можно использовать эту возможность.

Читать далее ‘Использование библиотеки Matplotlib. Как использовать эффект рисования от руки’ »

Обзор книги Х. Марманиса и Д. Бабенко «Алгоритмы интеллектуального интернета»

bool_intellect_internetПрочитал книгу Х. Марманиса и Д. Бабенко «Алгоритмы интеллектуального интернета». Как видно из названия, эта книга посвящена алгоритмам, которые применяются на сайтах для того, чтобы сделать сайт чуть более дружественным пользователю, хотя эти же алгоритмы можно применять и для оффлайновых приложений.

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

В разделе про поиск описывается алгоритм PageRank, который был представлен на конференции в 1998 году Сергеем Брином и Ларри Пейджем. Конечно, с того времени в алгоритме, используемым Google, многое поменялось, но в целом суть осталась той же — чем больше ссылок на странице, тем более релевантной она считается. Этот алгоритм показывает, как можно учитывать ссылки между страницами для того, чтобы определить, какой из них отдать предпочтение при поиске.

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

Для дальнейшего улучшения поиска авторы используют алгоритм Байеса. Обычно этот алгоритм описывается на примере фильтрации спама (в книге такой пример тоже будет), но сначала авторы его используют для того, чтобы рассчитать вероятность того, что данная ссылка заинтересует пользователя, зная, на какие ссылки он кликал до этого и при каких поисковых запросах. После этого авторы объединяют все три способа фильтрации результатов поиска.

Читать далее ‘Обзор книги Х. Марманиса и Д. Бабенко «Алгоритмы интеллектуального интернета»’ »

Летняя суперкомпьютерная академия на факультете ВМК МГУ

logo

В прошлом посте я сказал о том, что у меня начинаются занятия в Летней суперкомпьютерной академии на факультете Вычислительной Математики и Кибернетики (ВМК) в МГУ, связанные с параллельными вычислениями. Вчера состоялось закрытие этого мериприятия, дале я расскажу о том, что там было в течение этих двух недель.

Занятия были разделены на две части. На первой неделе нам читали лекции по самым разным темам, касающихся параллельных вычислений, суперкомпьютеров и их применения. Рассказывали про архитектуры суперкомпьютеров, в том числе тех, которые установлены в МГУ. Была общая теория параллельных вычислений, где говорили о том, что можно сделать с алгоритмом для того, чтобы разорвать связи по данным, чтобы какие-то массивы можно было бы обрабатывать параллельно. Много говорили про Top500 — мировой рейтинг суперкомпьютеров, тем более, что буквально за несколько дней до начала академии появилась новая редакция этого рейтинга, где на первое место выскочил китайский суперкомпьютер Tianhe-2 с тремя миллионами ядер процессора (если быть точнее, то 3 120 000 ядер).

Несколько докладов было на тему того, когда же, наконец, будет достигнута производительность в один экзаплоп/с (1018 операций с плавающей точкой в секунду), а также о том, какие для этого проблемы надо решать (особенно это касается эноргопотребления). Tianhe-2 на сегодняшний день имеет производительность 33862.7 терафлоп/с, и при этом уже потребляет почти 18 МВт мощности, что равносильно потреблению какого-нибудь села или нескольких высотных жилых домов. Что экзафлоп будет достигнут в ближайшие годы никто не сомневается, споры идут только по поводу того, будет ли достигнута эта величины до 2020 года (называют года 2018-2019) или все-таки после (2021 — 2022 год).

Читать далее ‘Летняя суперкомпьютерная академия на факультете ВМК МГУ’ »

Книги про параллельные вычисления с использованием MPI

Книги про параллельные вычисления с использованием MPI

Начиная с этого понедельника в течение двух недель у меня начинаются занятия в Летней суперкомпьютерной академии МГУ, куда меня послали на работе. В качестве направления (на сайте это называется треком), по которому я буду учиться, выбрал параллельное программирование с использованием MPI (Message Passing Interface) и OpenMP. Судя по всему, изначально подразумевалось, что те, кто будет проходить обучение в этой академии, уже должны уметь пользоваться этими библиотеками, а на лекциях и практике будут рассказывать более углубленные вещи. По крайней мере в прошлые годы для поступления в эту академию нужно было проходить тестирование, которое в этом году отменили.

До сих пор об MPI и OpenMP я имел представление только на уровне «да, есть такие библиотеки», хотя некоторые исходники с использованием OpenMP еще видел издалека и представлял, что распараллеливание происходит с помощью команд #pragma… В общем, чтобы не совсем опозориться, где-то месяц назад начал судорожно читать книги про OpenMP и особенно MPI. OpenMP — это все-таки более простая вещь, если есть опыт программирования обычных многопоточных приложений, а вот MPI мозг выворачивает наизнанку. Если с использованием OpenMP программу можно постепенно из последовательной сделать параллельной, то при использовании MPI программу нужно изначально писать с расчетом на эту библиотеку.

Так что основной упор за последний месяц сделал именно на MPI, который не особо полезен на обычных настольных компьютерах, но без него не обойтись при расчетах на суперкомпьютерах с распределенной памятью, когда память не одна на все процессоры, а каждый процессор может обращаться к своему блоку памяти. Поэтому в MPI, в отличие от OpenMP, распараллеливание происходит не по потокам (знаю, что их правильнее называть нитями, но я уже слишком привык к такому неправильному переводу слова «thread», распространенному в нашей литературе), а по процессам. Программа, написанная с использованием MPI — это по сути несколько одновременно запущенных программ (или одинаковых, или разных), обменивающихся между собой данными, и задача программиста описать, какой процесс, что делает.

Возвращаясь к книжкам. После того, как стало ясно, что мне предстоит, я скачал (за одно это слово пока еще не расстреливают? А то я не успеваю следить за потоком незамутненного сознания наших депутатов) несколько книг:

  • А. С. Антонов — Параллельное программирование с использованием технологии MPI.
  • Г. И. Шпаковский, Н. В. Серикова — Программирование для многопроцессорных систем в стандарте MPI.
  • В. Д. Корнеев — Параллельное программирование в MPI.

Читать далее ‘Книги про параллельные вычисления с использованием MPI’ »

Как в Matplotlib установить логарифмический масштаб по осям

Shortcuter. Класс для расстановки клавиатурных сокращений в меню wxPython

Выложил класс для автоматической расстановки клавиатурных сокращений (подчеркнутых букв) в меню с использованием wxPython. Подробнее…

Git и решение проблем с именами файлов в кодировке Unicode

Git и решение проблем с именами файлов в кодировке Unicode

Когда-то давно, когда я только начинал делать OutWiker, исходники этой программы я выкладывал на github. Но оказалось, что у git в то время были большие проблемы с именами файлов, содержащих не латинские буквы (подробнее об этом я в свое время писал в посте Git, Bazaar и русские имена файлов), из-за чего пришлось перейти на Bazaar.

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

На днях решил посмотреть, как обстоят дела с этой проблемой сейчас, и оказалось, что прошло уже больше года, как проблему побороли, начиная версии git 1.7.10. На этот счет на сайте msysgit (реализации git под Windows) есть даже статья на эту тему. В ней написано, что нужно сделать, чтобы git мог нормально работать с файлами в кодировке Unicode, и как перекодировать уже существующий репозиторий в юникодный формат представления файлов.

Читать далее ‘Git и решение проблем с именами файлов в кодировке Unicode’ »

Новая статья по Matplotlib. Как изменять формат меток на осях

Выложил еще одну статью из серии про работу с MatplotlibКак изменять формат меток на осях. Заодно упорядочил существующие статьи, разбив их на темы.

Новая статья в шпаргалке по Matplotlib. Как управлять положением меток на осях

Продолжаю пополнять статьями шпаргалку по библиотеке Matplotlib. На этот раз выложил новую статью Как управлять положением меток на осях.