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

Книга Уильяма Шоттса «Командная строка Linux»

Графический пользовательский интерфейс
делает простые задачи еще проще,
а интерфейс командной строки
делает сложные вещи выполнимыми.

Цитата из книги.


Решил я недавно прокачать свои знания про bash — в первую очередь разложить по полочкам для себя те конструкции языка, которыми иногда пользуюсь, но которые вызывали вопросы. Для этого решил прочитать книгу Уильяма Шоттса «Командная строка Linux», которая вышла на русском языке в прошлом году. И знаете, это, пожалуй, лучший учебник по командам Linux и консоли, который мне попадался. Если вы только собираетесь изучить программирование на bash, то эту книгу можно советовать в качестве основ.

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

Читать далее ‘Книга Уильяма Шоттса «Командная строка Linux»’ »

Еще один доклад на Moscow Python Meetup

Недавно сделал еще один доклад на конференции Moscow Python Meetup, которая проходила в Яндексе. Этот доклад был посвящен созданию запускаемых файлов (exe-шников) из скриптов на Python и продолжал тему доклада про создание настольных приложений на Python. Доклад родился из статьи про создание запускаемых файлов с помощью библиотеки cx_Freeze, но в доклад включил еще упоминание про pyInstaller — аналог cx_Freeze.

Что-то в этот раз я сильно волновался. Видео включает в себя все три доклада конференции, мое выступление начинается примерно с 32-й минуты.

О книге «Producing Open Source Software»


Давно я не писал посты о прочитанных книгах, хотя в последнее время удалось прочитать достаточно много книг, которые достойны обзора. Так уж получилось, что в этом году большинство книг по программированию, которые мне попадались, были на английском языке. В этом посте речь пойдет об одной из таких книг Карла Фогеля (Karl Fogel) — «Producing Open Source Software».

Как ясно из названия, эта книга об открытом программном обеспечении, но прежде чем говорить о книге, надо сказать пару слов об ее авторе. Карл работал (или работает) над такими известными проектами как Subversion (она же SVN, система контроля версий, которая когда-то пришла на смену CVS) и Launchpad — хостинг для открытого софта, где, например, располагается проект Ubuntu, MySQL и многие другие крупные опенсорсные проекты.

В своей книге «Producing Open Source Software», которая также распространяется с открытыми исходниками на сайте http://producingoss.com, Карл всесторонне описывает работу над софтом с открытыми исходниками. Причем, речь в ней идет не только о технической стороне, но и о социальной, ведь успешный открытый проект — это прежде всего результат взаимодействия многих людей, тем или иным образом участвующих в проекте. Причем участники могут проживать по всему миру. Это не обязательно должны быть программисты, это могут быть дизайнеры, бета-тестеры, люди, которые переводят программу на свой родной язык, да и просто пользователи, которые присылают свои пожелания и сообщения об ошибках. А может быть создание свободного софта — это ваша основная работа, тогда возникнет вопрос о том, как зарабатывать на нем, причем так, чтобы сообщество вас поддерживало.

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

Читать далее ‘О книге «Producing Open Source Software»’ »

Статья про создание exe-шников из python-скриптов

Написал большую статью про создание запускаемых файлов (.exe, если говорить про Windows) из скриптов на Python с помощью библиотеки cx_Freeze. Ссылка на статью — https://jenyay.net/Programming/Cxfreeze