Архив по категории ‘программизм’.

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

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

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

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

logo

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

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

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

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

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’ »

Новая статья «Отправка отложенных постов в ЖЖ»

В продолжение серии статей про работу с сервером ЖЖ написал статью Отправка отложенных постов в livejournal.com.

Сумбурное описание алгоритма роя частиц

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

Чтобы понять алгоритм роя частиц, представте себе большую поляну с земляникой (это наша область поиска решения), и нам надо найти то место на поляне, где земляники больше всего (глобальный экстремум). Будем считать, что сама земляника не кончается, и при съедении ягоды, она вырастает снова. Теперь представьте себе, что по этой поляне случайным образом (с вертолета) разбросали бабушек-собирателей земляники (агентов алгоритма). Сначала каждая бабушка идет в случайном направлении и с каждым шагом замечают, сколько земляники находится вокруг нее. Но с каждым новым шагом скорость и направление движения бабушки изменяют так, чтобы с одной стороны направиться в ту сторону, где она сама видела больше всего земляники (авторы алгоритма назвали этот аспект поведения «ностальгией»), а с другой — старается приблизиться к наилучшей области с наибольшим числом земляники, найденной среди всех бабушек (глобальное лучшее значение). В идеале через некоторое количество шагов все бабушки должны собраться в одной области с наибольшим числом земляники. В реальности кто-то может остаться в области, достаточно хорошей, но не в глобально лучшей, но главное, чтобы глобальный экстремум был найден хотя бы одной бабушкой.

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

Читать далее ‘Сумбурное описание алгоритма роя частиц’ »

wxPython и Drag’n’Drop файлов в Linux

wxPython и Drag'n'Drop файлов в Linux

В промежутках между работой и сном постепенно доделываю OutWiker, очередную версию которого собираюсь в скором времени выложить. Одним из изменений в этой версии будет то, что теперь можно будет перетаскивать прикрепленные файлы из окна OutWiker’а в другие приложения. Но когда я только начинал добавлять эту возможность, то не думал, что потрачу на нее столько сил и нервов, и все из-за одной мерзопакостной ошибки в wxWidgets.

Началось все хорошо. Сидя под Windows, реализация возможности перетаскивать файлы в другие приложения заняла считанные строки:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
def onBeginDrag(self, event):
	"""
	Начало перетаскивания файлов
	"""
	data = wx.FileDataObject()
 
	for fname in self.getSelectedFiles():
		# Добавляем вложенные файлы в список.
		data.AddFile (fname)
 
	dragSource = wx.DropSource (self)
	dragSource.SetData(data)
 
	result = dragSource.DoDragDrop ()

Читать далее ‘wxPython и Drag’n’Drop файлов в Linux’ »

История одного глюка или дело о букве «Р»

История одного глюка или дело о букве "Р"

На днях столкнулся со странным глюком, найденным в OutWiker‘е, на исправление которого вместе с поимкой виновника ушло два вечера.

Не буду долго описывать то, как я наткнулся на этот глюк, лучше перейдем сразу к его сути. А суть состоит в том, что для хранения и парсинга настроек страниц в программе используется стандартный класс ConfigParser (с некоторой тонкой оболочкой над ним, но в данном случае это не важно) — очень уж в нем удобно разбирать строки вида xxx = yyy. Так вот, неожиданно оказалось, что если yyy кончается на русскую букву «Р», то при преобразовании yyy в unicode бросается исключение о том, что кодек utf8 не может преобразовать строку, так как данные неожиданно закончились (‘utf8’ codec can’t decode byte 0xd0 in position __: unexpected end of data). Причем, в середине строки буква «Р» нормально преобразовывалась. Добавление пробела к концу строки, которая кончалась на «Р», ничего не дало, зато навело на мысль, что дело может быть в обрезании строки при выкидывания начальных и концевых пробелов, переводов строк и т.п. При этом все остальные русские буквы на конце обрабатывались без проблем.

Читать далее ‘История одного глюка или дело о букве «Р»’ »

Git, Bazaar и русские имена файлов

Git, Bazaar и русские имена файлов

Я уже давно проникся идеей распределенных систем контроля версий (VCS) и до сих пор использовал Git, которым был в целом доволен. Но так как в последнее время я частично стал пользоваться Linux’ом, то возникла одна проблема с хранением исходников Outwiker’а, о которой я уже как-то говорил, но напомню еще раз.

Суть проблемы состоит в том, что в исходниках Outwiker’а лежат файлы справки, которые имеют русские имена. Эти файлы создавались в Windows, поэтому кодировки имен — cp1251. При получении этих файлов из репозитория под Linux’ом кодировка имен файлов сохраняется, и по умолчанию в консоли показываются вопросики вместо имен. Это решается сменой кодировки консоли, но Outwiker будет видеть эти файлы все-равно искореженными. Имена файлов под Linux’ом можно преобразовать в нужную кодировку, но тогда с точки зрения git это будут новые (точнее переименованные) файлы, что нам не надо.

Читать далее ‘Git, Bazaar и русские имена файлов’ »

Про wxPython

Про wxPython

Где-то года полтора назад (в конце 2008 года) я выкладывал обзор дизайнеров интерфейса для wxPython. На днях решил посмотреть что же изменилось за это время. Прошелся по упомянутым в обзоре сайтам и, честно говоря, удивился, что за это время из всех программ обновлялась только wxGlade. Беглый поиск по гуглу тоже не дал никаких новых IDE или дизайнеров.

Жаль, что такие полезные программы не развиваются. Правда, есть парочка платных софтин для построения интерфейса на wxPython/wxWidgets, которые обновлялись не так давно, но мы их считать не будем. 😛

Немного настораживает ситуация с обновлением самой библиотеки wxPython. Последняя версия (2.8.10.1) вышла 14 мая прошлого года, осенью прошлого года вышла версия 2.9 wxWidgets, на основе которой построена wxPython, но библиотека wxPython до сих пор не обновилась. Правда, покопавшись в рассылке wxPython обнаружилось, что версия 2.9 должна скоро выйти, вроде бы уже есть предварительные сборки.

Еще жаль, что wxPython не поддерживает Python 3.x, и когда начнется работа по портированию на него не понятно. Все в той же рассылке писали, что разработчики обсуждали, а не начать ли работу по портированию в этом году, чем все это закончилось я так и не понял, до этого писали, что портирование на Python 3.x имеет у разработчиков низкий приоритет.

Если честно, то очень расстраивает то, что такая замечательная библиотека как wxPython так медленно развивается. С точки зрения пользователя мне намного больше нравятся проги, написанный под wxPython, чем под pyGTK. Все-таки wxPython/wxWidgets для отображения интерфейса использует API той среды, где программа запускается. Поэтому, например, в винде все диалоги открытия/сохранения окон будут выглядеть привычно для пользователя, в отличие от того же pyGTK.