Пост о том, как идет работа над новой версией OutWiker

Давно я ничего не писал сюда в блог и вообще на сайт, давно не выкладывал новые версии OutWiker. Дело в том, что я погряз в работе и, кроме того, во время карантина я присоединился к одному интересному программерскому проекту, о котором пока не буду говорить, пока мы не запустимся.
Но OutWiker я не совсем забросил, и пока я не выкладываю новую версию, хочу рассказать, как идет работа над ней. Я уже почти смирился с тем, что OutWiker будет в вечной бете. Я не собирался до релиза переводить проект на wxPython 4.1, а хотел по максимуму исправить разные шероховатости в программе и выпустить релиз. Сначала все шло хорошо, но я взялся за исправление одного может быть не очень критичного, но 100%-но повторяемого глюка. Под Linux, если в настройки зайти несколько раз, то программа падала. Эксперименты показали, что проблема в контроле, который отображает веб-страницу с помощью движка WebKit. Если такой контрол находится в диалоге, то после повторного открытия этого диалога программа упадет. Это удалось повторить в простейшем приложении с единственной кнопкой, которая открывает такой диалог. Я уже готов был с этим смириться и написать о проблеме в багтрекер wxPython, но нужно было проверить это на новой версии библиотеки. К сожалению Оказалось, что в wxPython 4.1 этой проблемы нет.
Это подтолкнуло меня все-таки попробовать запустить OutWiker c wxPython 4.1. Я знал, что там будут некоторые несовместимости со старой версией, но было интересно, насколько они легко исправляются. Даже для того, чтобы просто запустить программу, пришлось исправлять код, но исправления были минимальны. После того, как OutWiker запустился с новой версией библиотеки, я убедился, программа действительно больше не падает при повторном открытии диалога настроек в Linux. Это был повод двигаться дальше. Тогда я начал исправлять другие участки кода, которые сломались.
После этого я решил проверить, а как ведет себя программа под Windows. Оказалось, что ведет себя плохо, потому что я с древних времен использую один хак для того, чтобы под Windows использовать движок IE. Уже давно появился официальный контрол, который поддерживает работу с этим движком без такого хака, я когда-нибудь собирался начать его использовать, но пока не было такой необходимости, поскольку хак отлично работал… до выхода wxPython 4.1. Таким образом пришлось взяться за переписывание кода, связанного с отображением страниц в Windows. Это был не очень сложный процесс, особых проблем не возникло, и в итоге код стал намного чище, но какое-то время это заняло.
А дальше началось самое интересное. OutWiker уже запускается и даже работает в Linux и Windows, но тесты на сервере непрерывной интеграции падают. С тестами я воевал недели две. Сначала пытался понять, почему они падают, и все-таки сделал, чтобы они проходили локально у меня на компе, но на сервере они продолжали падать. После этого еще неделя ушла на то, чтобы понять, что происходит на сервере, выявить минимальный набор тестов, которые падают, и с помощью print-ов попытаться понять, в какой момент происходит падение и из-за чего. Как обычно, чем дольше ищешь проблему, тем проще она решается. Оказалось, что это связано с внутренней особенностью wxPython, связанной с настройками локали. В итоге проблема решилась добавлением двух строк кода.
Теперь тесты на сервере все позеленели (для не программистов — теперь все они выполняются успешно), но это не значит, что можно расслабиться. Есть еще код, который тяжело проверить тестами. В основном тестами тяжело покрыть код, связанный с интерфейсом (в OutWiker для некоторых интерфейсных элементов есть тесты, но не везде).
Следующая проблема, с которой столкнулся, это проверка орфографии, а точнее выделение слов с ошибками. В wxPython в качестве редактора текста с раскраской (с помощью этого редактора пользователь вводит текст заметки в OutWiker) используется движок Scintilla. В новой версии wxPython обновили и этот редактор. Все бы хорошо, но в нем тоже появились несовместимости со старой версией. Если раньше слова с ошибками надо было подчеркивать в то же время, когда происходит раскраска кода, то теперь это два разных действия. Посмотрев документацию, я понял, что на самом деле стало лучше и логичнее, но, блин, мне теперь надо переделывать всю проверку орфографии. На момент написания этих строк я удалил старый код, который отвечает за проверку орфографии (именно за выделение ошибок, а не проверку отдельных слов), и надо приступать к написанию нового кода. Надеюсь, что в ближайшее время руки до этого дойдут.
Именно поэтому я пока не выкладываю новую версию OutWiker. Раз уж заварил всю эту кашу с переходом на wxPython 4.1, то надо это довести до ума. О каких-то конкретных сроках я говорить не хочу, потому что, как я уже писал в начале, времени у меня сейчас сильно поубавилось.
PS. Вы можете подписаться на новости сайта через RSS, Группу Вконтакте или Канал в Telegram.
> Оказалось, что это связано с внутренней особенностью wxPython, связанной с настройками локали. В итоге проблема решилась добавлением двух строк кода.
А можно в двух словах подробнее про локаль и какие строки добавил ? Тоже столкнулся с тем, что с последней версией wxpython рушится предыдущий код, причем на функциях datetime.strptime()
23 октября 2020, 4:12 ппСпасибо.
Да, именно с этой функцией и у меня были проблемы.
23 октября 2020, 4:27 ппВсе решилось добавлением строки locale.setlocale(locale.LC_ALL, «») в конструктор приложения (или сразу после создания экземпляра приложения).