Давно я ничего не писал сюда в блог и вообще на сайт, давно не выкладывал новые версии OutWiker. Дело в том, что я погряз в работе и, кроме того, во время карантина я присоединился к одному интересному программерскому проекту, о котором пока не буду говорить, пока мы не запустимся.
Но OutWiker я не совсем забросил, и пока я не выкладываю новую версию, хочу рассказать, как идет работа над ней. Я уже почти смирился с тем, что OutWiker будет в вечной бете. Я не собирался до релиза переводить проект на wxPython 4.1, а хотел по максимуму исправить разные шероховатости в программе и выпустить релиз. Сначала все шло хорошо, но я взялся за исправление одного может быть не очень критичного, но 100%-но повторяемого глюка. Под Linux, если в настройки зайти несколько раз, то программа падала. Эксперименты показали, что проблема в контроле, который отображает веб-страницу с помощью движка WebKit. Если такой контрол находится в диалоге, то после повторного открытия этого диалога программа упадет. Это удалось повторить в простейшем приложении с единственной кнопкой, которая открывает такой диалог. Я уже готов был с этим смириться и написать о проблеме в багтрекер wxPython, но нужно было проверить это на новой версии библиотеки. К сожалению Оказалось, что в wxPython 4.1 этой проблемы нет.
Всем привет. По задумке эту нестабильную версию OutWiker с номером 3.0.0.874 я собирался выложить недели на две раньше, и в ней не должно было быть особых изменений в коде программы. Я собирался сосредоточиться на дополнении и обновлении справки. Но, как обычно в самый неподходящий момент, обнаружились проблемы, с которыми пришлось повозиться.
Недавно дочитал книгу Мартина Клеппмана «Высоконагруженные приложения. Программирование, масштабирование, поддержка». В оригинале книга называется «Designing Data-Intensive Applications», а при переводе на русский язык название стало менее конкретным, потому что под высоконагруженными приложениями можно понимать разные виды нагрузки: вычислительную нагрузку на процессор и «высоконагруженные» в том плане, что нужно обрабатывать большой объем данных. Во втором случае основная нагрузка ляжет не на плечи процессора, а узким местом будет сеть или система ввода-вывода. В книге рассматриваются высоконагруженные системы, относящиеся ко второму случаю.
Книга посвящена в основном системам хранения и обработки данных, т.е. базам данных различного типа (SQL и noSQL) и системам, которые анализируют большой поток данных, например, Hadoop. Основная тема книги — это проблемы, которые могут возникнуть в распределенных системах, когда нужно поддерживать согласованное состояние базы данных, сервера которых запущены на машинах, которые могут располагаться даже в разных странах, и не известно, к какому из них будет обращаться пользователь в каждый момент времени. В книге речь идет в основном про архитектурные решения, а не конкретные реализации, хотя в тексте постоянно приводятся ссылки на тот или иной инструмент и говорится, как и насколько хорошо в них решаются описываемые проблемы.
Разработка OutWiker-а постепенно движется к тому моменту, когда очередную версию можно будет назвать стабильной. На самом деле с точки зрения работы программы и сейчас все достаточно неплохо, по крайней мере критических ошибок, которые мешают пользоваться программой нет, или по крайней мере я о них не знаю :). Но хочется еще навести красоту в коде программы и облегчить процесс сборки.
Сегодня выложил следующую нестабильную версию OutWiker под номером 3.0.0.872. В новой версии не много изменений, заметных пользователю. К таким изменениям можно отнести, пожалуй, только обновление немецкой локализации, теперь программа переведена на немецкий язык полностью, за что спасибо всем тем, кто участвовал в переводе на сайте crowdin.com. Если бы еще доделали украинский перевод, то было бы вообще здорово. Сейчас там недопереведено всего лишь 3% от общего количества строк.
Одна из проблем, которая меня интересует, как вести занятия со студентами так, чтобы с одной стороны им было интересно и понятно то, о чем я говорю, но в то же время не скатываться на совсем примитивный уровень в стиле «нажми на кнопку — получишь результат». Поэтому периодически почитываю книжки на тему преподавания и обучения, чтобы понять, как другие люди справляются с этой задачей, что можно исправить в изложении материала. До карантина мне попалась книга «Безграничный разум», которую написала профессор Стэнфордского университета Джо Боулер. Эта книга посвящена тому, как имеющаяся система образования отбивает желание учиться, а у учеников развивает (не)уверенность, что тот или иной предмет им понять не под силу. Сама Джо Боулер читает математику, поэтому в книге она больше говорит о преподавании математики и других технических наук, хотя это не так важно, потому что принципы, о которых идет речь в книге относятся к обучению в целом.
Книга построена на основе нескольких идей, понимание которых должно помочь учащимся лучше справляться с нагрузкой и стрессом, возникающими во время обучения, а преподавателям эти принципы могут помочь организовать рабочую среду, в которой ученики смогут плодотворно изучать предметы без развития отвращения к ним. Эти идеи — результат большого количества исследований, ссылки на которые автор аккуратно расставляет по ходу повествования. Все эти идеи кажутся известными и логичными, но вместе они создают единую структуру, которую можно пытаться как-то использовать при обучении.
Задумался по поводу того, почему мне удобнее делать заметки по настройке софта, использованию программ через командную строку (git, Docker, Apache, команды в Linux) и т.п. в аналоговой тетрадке, а не в электронном виде. Вроде тот же OutWiker хорошо подходит для таких мелких записей, где можно все упорядочить и красиво оформить, а записи от руки всегда будут написаны небрежно, с исправлениями, попытками уместить текст на строке или странице. Пока я вижу такие причины:
Тетрадка работает независимо от компьютера и не занимает места на экране.
Оформление заметки в электронном виде подразумевает сразу ее аккуратное оформление, что отвлекает. В тетрадке же я записываю очередную команду для какой-нибудь программы (git, Docker), не отвлекаясь на то, куда поместить эту запись. Я часто их записываю на отдельные листочки, а потом когда-нибудь переношу в тетрадку.
Искать заметки в тетрадке иногда проще, если знаешь, где именно искать. Потому что тетрадку листаешь двумя руками 10 пальцами, а поиск заметки в программе мышкой — это аналог листания одним пальцем без возможности быстро просмотреть несколько страниц, не акцентируя внимание на каждой пролистанной странице. Конечно, искать по ключевым словам проще в электронном виде, если заранее не знаешь, где находится нужная запись. Но иногда проще искать в гугле, чем в локальном хранилище заметок.
Пробовал вести заметки по-разному, на данный момент остановился на тетрадках с кольцами и сменными листами. Мне не нравится, что эти листы очень узкие, хотелось бы более широкий формат, однако возможность менять местами листы, один заменять на другой и добавлять листы в середину между другими перевешивает этот недостаток.
Но если нужно сохранить или написать длинный связанный текст, то в этом случае я однозначно выбираю хранение записей в электронном виде.
Интересно, а вы как храните разные заметки? Далее пара фотографий, как аналоговые заметки выглядят у меня.
Как и обещал в прошлом посте, сегодня выложил вторую часть статьи, посвященной созданию Python-обвязок (bindings) с помощью утилиты SIP. Во второй части речь идет о создании обвязки для объектно-ориентированных библиотек, написанных на C++, в которых фигурируют классы.
Всем привет!
Python — замечательный язык программирования, но иногда приходится работать с библиотеками, которые написаны на других языках программирования. Обычно это бывает, потому сторонние библиотеки решают нужные вам задачи, и не хочется изобретать велосипед, реализую то же самое на Python. Либо в более редких случаях, когда производительность вашего приложения упирается в особенности языка Python (все-таки интерпретируемые языки по скорости не сравнятся с компилируемыми), и часть кода приходится писать на C или C++.
Для решения такой задачи — использования библиотек, написанных на C/C++, из Python-приложения существует много решений. Одно из них — SIP. Эта утилита изначально разрабатывалась для создания Python-обвязки над такой монстроидальной библиотекой как Qt (получившаяся обвязка — PyQt). Я написал большую статью в двух частях про использование основы использования SIP для создания Python-обвязок над библиотеками. Сегодня я выложил первую часть — Создание Python-обвязки для библиотек, написанных на C/C++, с помощью SIP. Часть 1.
Я люблю иногда ходить на разные программерские конференции и считаю, что полезно и самому иногда там выступать. В прошлом году в рамках встречи Московского клуба программистов я рассказывал про генетические алгоритмы, а недавно сделал доклад в продолжение этой темы и рассказал про оптимизацию с помощью роя частиц.
По этой ссылке вы можете увидеть мой доклад (а заодно скачать презентацию), а также посмотреть обсуждение темы ввода новичков в проект (onboarding).
Давно не выкладывал новые версии OutWiker. Это было связано с тем, что на некоторое время я переключился на проект (optlib — библиотеку для оптимизации на языке Rust), а активно заниматься двумя проектами одновременно я не умею. Теперь я обратно переключился на OutWiker и подготовил новую нестабильную версию.
В эту версию попало лишь одно изменение, заметное пользователям, а в основном я сосредоточился на том, чтобы почистить код, обновить библиотеки, упростить сборку приложения, и тем самым приблизить момент, когда очередную версию можно будет со спокойной совестью назвать релизом. Правда, чем больше копаешься в коде, тем больше хочется переписать что-то еще, переделать API и т.п., поэтому нужно вовремя себя остановить. Читать далее…