И снова всем привет! Сегодня выложил новую нестабильную версию OutWiker под номером 3.0.0.862. В этой версии было сделано огромное количество изменений, как заметных пользователям, так и тех, которые, я надеюсь, пользователи не заметят. В этом посте будет два раздела. Сначала я опишу изменения в интерфейсе, которые вошли в новую версию, а затем расскажу о том, почему под Linux пришлось переходить на новую версию WebKit, как это происходило и к чему привело.
Читать далее…
В начале года я решил основательно взяться за изучение нового для себя языка программирования — языка Rust. Я на него уже посматриваю, и мне нравится его идеология, хотя сам язык достаточно тяжелый для изучения.
Я давно хотел сделать библиотеку с различными алгоритмами глобальной оптимизации — генетическим алгоритмом, алгоритмом роя частиц и других. Кроме того мне хотелось сделать такую библиотеку для генетических алгоритмов, чтобы при ее использовании можно было бы легко изменять алгоритмы каждого этапа генетического алгоритма — скрещивания, мутации, отбора и т.д.
Именно такую библиотеку я решил написать на Rust. Так появилась библиотека optlib. Ссылки на исходники и документацию:
На данный момент в этой библиотеке реализовал только генетический алгоритм, но зато со всеми возможностями, которые хотел. Точнее, там есть еще, что дополнить и улучшить, но в целом структура получилась достаточно гибкая. Генетический алгоритм с использованием библиотеки optlib собирается как из кубиков: алгоритм скрещивания берем этот, алгоритм мутации — тот и т.д.
Помимо документации я написал довольно большую статью про библиотеку optlib и генетический алгоритм, которую можно прочитать тут — Библиотека Optlib. Реализация генетического алгоритма оптимизации на Rust. Эту же статью я опубликовал на Хабре — https://habr.com/ru/post/448870/.
Я надеюсь, что я буду находить время на дальнейшие улучшения этой библиотеки, потому что в списке идей относительно этой библиотеки еще много пунктов.
Чтение лекции — это процесс переноса конспекта преподавателя в тетрадь студента, минуя сознание обоих.
Недавно на Хабре появился перевод статьи Как я пишу конспекты по математике на LaTeX в Vim. Идея в том, что автор настолько виртуозно умеет работать в Vim и знает LaTeX, что вместо написания конспекта ручкой в тетради, успевает оформлять его в электронном виде в формате LaTeX. Но на этот пост меня подтолкнули комментарии, где разгорелись споры по поводу того, нужно ли вообще вести конспект лекций, не устарело ли это понятие в цифровой век.
Поскольку я уже давно преподаю в институте, то могу сравнить результаты обучения студентов, которые ведут конспект и не ведут его.
Читать далее…
Я больше чем на месяц переключился с OutWiker на другой проект, о котором напишу, когда завершу статью о нем, поэтому очередная нестабильная версия OutWiker задержалась, и в ней не так много изменений. В основном это исправление ошибок и обновление локализаций.
Самая неприятная ошибка, которая была исправлена, — это сломанные ссылки на найденные страницы на странице глобального поиска (в прошлой версии я занимался небольшим рефакторингом, жертвой которого и стала страница поиска). Также была исправлена ошибка, из-за которой в контекстном меню не отображались варианты замены слов с ошибками в случае, если проблемное слово русскоязычное, но при этом кроме русского словаря был подключен еще и английский словарь.
Также обновил плагины Snippets, Source, TeXEquation и UpdateNotifier. В основном изменения там касаются обновления украинской и немецкой локализаций. В плагине TeXEquation немного улучшен внешний вид окна предпросмотра набираемой формулы.
Читать далее…
К языку Rust я присматривался давно. Пару лет назад даже пытался писать на нем небольшую программку, но до серьезного использования дело не дошло. И вот в начале этого года я решил взяться за этот язык основательно.
Rust — это компилируемый язык, предназначенный в том числе и для системного программирования. Основная «фишка» языка — это исключение на уровне компиляции ошибок работы с памятью — не инициализированные указатели, висячие ссылки и т.п. — и избегание неопределенного поведения. При этом не используется сборщик мусора, а сам язык ориентирован на максимально возможную производительность. При этом стиль программирования на Rust сильно отличается от традиционного объектно-ориентированного программирования. Если говорить очень грубо, то это скорее напоминает C с интерфейсами и очень необычной работой с памятью. Разработчики Rust позиционируют язык как замена C++. Особенности языка заставляют заранее продумывать структуру взаимодействия используемых объектов, а не плодить сложную сеть из взаимосвязанных объектов в надежде, что сборщик мусора потом все уберет. У Rust очень строгий компилятор, который откажется компилировать программу, если у него не будет уверенности в том, что она корректно работает с памятью, и что не будет гонок данных в многопоточной программе.
Читать далее…
И снова всем привет! Благодаря прошедшим новогодним каникулам для проекта OutWiker удалось выкроить побольше времени, и поэтому в новой нестабильной версии, которая получила номер 3.0.0.858, было реализовано много интересных вещей, некоторые из которых в будущем позволят создавать интересные плагины.
Читать далее…
Пока идет подготовка очередной нестабильной версии 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 3.0 стабильной версией, а вместо этого написать о дальнейших планах, косвенно связанных с OutWiker, и которые я надеюсь реализовать в следующем году. Об этом я скажу во втором разделе поста, а начнем мы с перечисления изменений в новой предновогодней версии OutWiker, которая имеет номер 3.0.0.856.
Читать далее…

Образование дают, образование получают…
Но надо еще уметь его взять!
Как уже некоторые из вас знают, я работаю в институте и читаю лекции студентам, поэтому меня важно, чтобы мой труд не пропадал даром. К сожалению, чтение лекций проходит с КПД около 15%, т.е. в группе на 25 человек максимум 4 человека проявляют заинтересованность в предмете. Я это оцениваю по тому, насколько студенты втягиваются в обсуждения и задают хоть какие-то вопросы, остальные в лучшем случае молча записывают материал, а в худшем — уходят в телефон. Возможно, они стесняются что-то спрашивать, хотя я постоянно подталкиваю их к взаимодействию во время занятий. Такое ощущение, что большая часть группы приходит на занятия только для галочки, хотя я уже давно отказался от подсчета посещаемости.
Все преподаватели жалуются на отсутствие заинтересованности у студентов, в то время как многие студенты признаются, что они не любят и не понимают физику, математику или какой-то другой предмет. Они даже не пытаются наверстать упущенное, а всего лишь хотят проскочить экзамен, чтобы их не отчислили. Понятно, что с точки зрения обучения такой подход — бесполезная трата времени, так студентов, так и преподавателей.
Этой проблеме и посвящена книга Симона Львовича Соловейчика «Учение с увлечением» (спасибо моей жене, которая навела на эту книгу). Симон Львович был журналистом, который много времени уделял вопросам педагогики, писал статьи и книги на эту тему. В основном он писал об учебе в школе. И книга «Учение с увлечением» посвящена проблеме заинтересованности школьников в изучаемых предметах. Первое издание ее вышло в 1976 году, позже было множество переизданий в советский период.
Читать далее…
Если говорить о веб-разработке на Python, то в первую очередь вспоминается веб-фреймворк Django, на основе которого создано огромное количество как небольших сайтов, а также таких монстров как Instagram, сайт Mozilla, Bitbucket и множество других. Django хорош тем, что к нему «прилагаются батарейки», т.е. в библиотеку входит большое количество инструментов, которые могут понадобиться для построения движка сайтов разных типов — это пакеты для работы с базой данных, для создания профилей пользователей и их авторизации, для создания форм по объектом данных и т.д. Это удобно, но из-за этого сам фреймворк становится достаточно тяжелый, а при его обновлении каждый раз что-нибудь ломается. К тому же, если вас не устраивает какая-то часть фреймворка, то заменить ее на аналог может быть тяжело.
В противоположность тяжеловесному Django был создан микрофреймворк Flask, пропагандирующий противоположный подход — сам Flask является очень минималистичным, а многие возможности в него добавляются с помощью расширений. Если вас не устраивает одно расширение, вы можете его заменить на аналогичное другое. Обновление используемых библиотек поэтому тоже теоретически должно проходить более гладко.
Я был приятно удивлен, узнав, что 2016 году была переведена книга Мигеля Гринберга «Flask Web Development», которая на русском языке стала называться «Разработка веб-приложений с использованием Flask на языке Python».
Читать далее…