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

Разбор исходников Outwiker. Сборка и тестирование

Новая статья «Разбор параметров командной строки в Python»

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

Использование библиотеки 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). Причем, в середине строки буква «Р» нормально преобразовывалась. Добавление пробела к концу строки, которая кончалась на «Р», ничего не дало, зато навело на мысль, что дело может быть в обрезании строки при выкидывания начальных и концевых пробелов, переводов строк и т.п. При этом все остальные русские буквы на конце обрабатывались без проблем.

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