Optlib 0.2. Библиотека для оптимизации на языке Rust

Optlib 0.2. Библиотека для оптимизации на языке Rust

Параллельно с другими проектами я продолжаю заниматься библиотекой optlib, предназначенной для оптимизации функций на языке Rust. Напомню, что под оптимизацией функции f(x) понимается нахождение такого значения x’ (в общем случае x — вектор), что значение функции f(x’) минимально на заданном интервале для x. Библиотека optlib содержит в себе алгоритмы, предназначенные для глобальной оптимизации, то есть, в отличие от градиентных методов, эти алгоритмы пытаются найти глобальный экстремум функции (градиентные методы находят только ближайший к начальной точке локальный экстремум).

Читать далее ‘Optlib 0.2. Библиотека для оптимизации на языке Rust’ »

Доклад про генетические алгоритмы

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

Несколько дней назад я выступил на этом митапе и рассказал о генетических алгоритмах. Ниже вы можете посмотреть видео этого доклада. Материалы с этого митапа (в том числе презентацию) можно скачать по этой ссылке с сайта Московского клуба программистов.

Статья «Использование библиотеки Matplotlib. Как делать анимированные графики»

Статья "Использование библиотеки Matplotlib. Как делать анимированные графики"

Давно я не ничего писал про библиотеку Matplotlib. Для тех, кто не знает, эта библиотека для языка Python, предназначенная для рисования огромного количества графиков.
Как-то в комментариях мне написали, что один пример не работает. Как оказалось, он действительно сломался после обновления библиотеки Matplotlib. Но вместо того, чтобы просто починить пример (надо было добавить одну строчку) я решил написать более развернутую статью на ту же тему.

В новой версии статьи приводится четыре способа создания анимированных графиков.

Ссылка на статью — Использование библиотеки Matplotlib. Как делать анимированные графики.

О книге «Элегантный SciPy»

Приятно, что в последнее время появляется много книг не просто о языке Python, но и о применении его в более узких областях. Меня в первую очередь интересуют инженерные расчеты, в которых практически стандартом являются библиотеки Numpy, SciPy и Matplotlib. На эту тему мне попадалось несколько книжек, но, к сожалению, все они страдают одной проблемой — после них нельзя сказать, что ты знаешь, например, Numpy.

Недавно я дочитал еще одну книгу сразу трех авторов: Хуана Нуньеса-Иглесиаса, Штефана ван дер Уолта и Харриет Дэшноу «Элегантный SciPy», которая посвящена научным расчетам на языке Python. К сожалению, и она страдает той же проблемой, что и другие известные мне книги, но хочется про нее все-таки рассказать.

Читать далее ‘О книге «Элегантный SciPy»’ »

Optlib. Реализация генетического алгоритма оптимизации на языке Rust

Optlib. Реализация генетического алгоритма оптимизации на языке Rust

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

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

Именно такую библиотеку я решил написать на Rust. Так появилась библиотека optlib. Ссылки на исходники и документацию:

На данный момент в этой библиотеке реализовал только генетический алгоритм, но зато со всеми возможностями, которые хотел. Точнее, там есть еще, что дополнить и улучшить, но в целом структура получилась достаточно гибкая. Генетический алгоритм с использованием библиотеки optlib собирается как из кубиков: алгоритм скрещивания берем этот, алгоритм мутации — тот и т.д.

Помимо документации я написал довольно большую статью про библиотеку optlib и генетический алгоритм, которую можно прочитать тут — Библиотека Optlib. Реализация генетического алгоритма оптимизации на Rust. Эту же статью я опубликовал на Хабре — https://habr.com/ru/post/448870/.

Я надеюсь, что я буду находить время на дальнейшие улучшения этой библиотеки, потому что в списке идей относительно этой библиотеки еще много пунктов.

О языке Rust и книге Дж. Блэнди и Дж. Орендорфа «Программирование на языке Rust»

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

Rust — это компилируемый язык, предназначенный в том числе и для системного программирования. Основная «фишка» языка — это исключение на уровне компиляции ошибок работы с памятью — не инициализированные указатели, висячие ссылки и т.п. — и избегание неопределенного поведения. При этом не используется сборщик мусора, а сам язык ориентирован на максимально возможную производительность. При этом стиль программирования на Rust сильно отличается от традиционного объектно-ориентированного программирования. Если говорить очень грубо, то это скорее напоминает C с интерфейсами и очень необычной работой с памятью. Разработчики Rust позиционируют язык как замена C++. Особенности языка заставляют заранее продумывать структуру взаимодействия используемых объектов, а не плодить сложную сеть из взаимосвязанных объектов в надежде, что сборщик мусора потом все уберет. У Rust очень строгий компилятор, который откажется компилировать программу, если у него не будет уверенности в том, что она корректно работает с памятью, и что не будет гонок данных в многопоточной программе.

Читать далее ‘О языке Rust и книге Дж. Блэнди и Дж. Орендорфа «Программирование на языке Rust»’ »

История одного бага или почему OutWiker не использует последние версии wxPython

История одного бага или почему OutWiker не использует последние версии wxPython

Пока идет подготовка очередной нестабильной версии OutWiker, я решил написать об одной проблеме, которая меня давно волнует и может стать серьезной проблемой в будущем.

Эту детективную историю начнем с представления действующих лиц. Для отображения страниц OutWiker использует движок Internet Explorer под Windows и WebKit под Linux. Программа OutWiker написана с использованием библиотеки wxPython, которая предоставляет доступ к этим движкам, причем для работы с WebKit используется компонент WebKitGTK+, который используется в таких не самых известных браузерах как Epiphany и Midori. wxPython может использовать разные версии WebKit, это зависит от того, какие пакеты установлены на компьютере, на котором происходит компиляция библиотеки. Если в системе установлен пакет libwebkit2gtk-4.0-dev (я буду использовать в названия пакетов в Ubuntu), то библиотека wxPython будет собрана с поддержкой более новой версии WebKit 2, а если этого пакета в системе нет, но установлен пакет libwebkitgtk-3.0-dev, то будет использоваться WebKit 1. Причем первая версия WebKit уже считается устаревшей и, например, в Arch Linux она не поддерживается, но все еще находится в репозиторях Ubuntu.

Читать далее ‘История одного бага или почему OutWiker не использует последние версии wxPython’ »

Книга «Разработка веб-приложений с использованием Flask на языке Python»

Если говорить о веб-разработке на Python, то в первую очередь вспоминается веб-фреймворк Django, на основе которого создано огромное количество как небольших сайтов, а также таких монстров как Instagram, сайт Mozilla, Bitbucket и множество других. Django хорош тем, что к нему «прилагаются батарейки», т.е. в библиотеку входит большое количество инструментов, которые могут понадобиться для построения движка сайтов разных типов — это пакеты для работы с базой данных, для создания профилей пользователей и их авторизации, для создания форм по объектом данных и т.д. Это удобно, но из-за этого сам фреймворк становится достаточно тяжелый, а при его обновлении каждый раз что-нибудь ломается. К тому же, если вас не устраивает какая-то часть фреймворка, то заменить ее на аналог может быть тяжело.

В противоположность тяжеловесному Django был создан микрофреймворк Flask, пропагандирующий противоположный подход — сам Flask является очень минималистичным, а многие возможности в него добавляются с помощью расширений. Если вас не устраивает одно расширение, вы можете его заменить на аналогичное другое. Обновление используемых библиотек поэтому тоже теоретически должно проходить более гладко.

Я был приятно удивлен, узнав, что 2016 году была переведена книга Мигеля Гринберга «Flask Web Development», которая на русском языке стала называться «Разработка веб-приложений с использованием Flask на языке Python».

Читать далее ‘Книга «Разработка веб-приложений с использованием Flask на языке Python»’ »

Книга Эдриена Моуэта «Использование Docker»

Я давно посматривал на Docker, но до недавнего времени нигде его не применял на практике, а недавно меня убедили, что для сборки OutWiker его вполне можно использовать вместо виртуальных машин. Правда, для меня до сих пор остается загадкой, можно ли 32-битные контейнеры запускать в 64-битной системе (именно по этой причине для сборки я использовал полноценные виртуальные машины вместо контейнеров), но некоторое время назад такая надобность отпала.

Новые для себя технологии я обычно изучаю по книгам. Сначала я прочитал пару небольших книжек про Docker на английском языке в электронном виде (это были книги Karl Matthias and Sean P. Kane «Docker: Up and Running» и James Turnbull «The Docker Book»), а потом понял, что хотелось бы иметь что-то в бумажном виде. В бумажном виде на русском языке попалась книга Эдриена Моуэта с незамысловатым названием «Использование Docker». И, пожалуй, эта книга мне понравилась даже больше первых двух.

Читать далее ‘Книга Эдриена Моуэта «Использование Docker»’ »

Третий доклад на Moscow Python Meetup

Месяц назад я выступил на ежемесячной московской конференции программистов на Python — Moscow Python Meetup. Это уже третий доклад, который я делал на этой конференции — два предыдущих были в прошлом году (первый и второй). В этот раз я рассказывал о том, как работает сборка OutWiker. Не знаю как для всех остальных, но для меня этот доклад оказался особенно полезным, потому что после него подсказали интересные идеи и новости, а ещё на этой конференции мы развиртуализировались с Владимиром Тубольцевым, который в последнее время много интересного сделал для OutWiker-а.

Что касается комментариев и вопросов к докладу. Меня почти убедили, что для сборки можно использовать Docker вместо виртуальных машин. До сих пор мне казалось, что если нужно делать сборки для 32- и 64-хбитных процессоров, то Docker здесь не поможет. После доклада меня заверили, что все будет OK, так что можно будет попробовать.

Путаница произошла с версиями Fabric. Дело в том, что изначально OutWiker использовал Fabric 1, который работает только под Python 2.x, но после перехода на Python 3 оказалось, что есть версия Fabric, работающая под Python 3.x — Fabric 3. А буквально за полторы недели до доклада внезапно вышла новая версия Fabric — Fabric 2 с полностью переработанным API, поэтому то, что я рассказывал в докладе и в статье уже устарело, поскольку новый API был переделан полностью, и от старого Fabric мало что осталось. Поэтому скорее всего один из вопросов на видео был про Fabric 2, но я этого не понял. Теперь с версиями Fabric полная чехарда — версия 2 новее версии 3.

А теперь видео доклада:

Читать далее ‘Третий доклад на Moscow Python Meetup’ »