Попалась мне недавно статья 2019 года с названием Local-first software. В этой статье авторы предлагают идеологию построения софта, которая меня сильно зацепила.
Сейчас у нас есть две крайности при выборе архитектуры софта. С одной стороны, имеются «старомодные» оффлайновые приложения, в которых все данные для работы хранятся у пользователя на компьютере. Для работы с такими приложениями не требуется постоянное подключение к интернету, если что-то случится с компанией, которая производила такой софт, то никто не мешает продолжать пользоваться последней доступной версией софта. В таких приложениях пользователь полностью владеет теми данными, которые он создает в этих приложениях. В то же время у полностью оффлайновых приложений есть проблемы с синхронизацией данных между устройствами, и почти всегда в таких приложениях невозможно организовать одновременную совместную работу над одним и тем же документом нескольким пользователям.
С другой стороны у нас есть веб-сервисы, в которых все сделано для совместной работы и нет проблем с синхронизацией данных. Пользователю не надо устанавливать сторонний софт, достаточно открыть сайт в браузере. Но расплачиваться приходится тем, что пользователь фактически не владеет данными, которые он создает. Все данные лежат на сервере компании-разработчика, и доступ к ним будет потерян, если компания прекратит существование или перекроет доступ для вашего аккаунта. Кроме этого, веб-сервисы работают заметно медленнее оффлайновых приложений, потому что малейшее действие должно выполняться удаленно на сервере.
Читать далее…
Давно не писал о том, как идут дела с написанием книги про Python, а меня об этом в оффлайне уже несколько раз спрашивали. Поэтому решил, что раз в месяц буду писать мини-отчет о прогрессе. Да и самому полезно оглянуться и посмотреть, что за этот месяц было сделано. Картинка с приростом количества страниц от времени прилагается.

Судя по графику, удалось войти в более-менее рабочий ритм. Обычно книгу я пишу вечером после работы и в выходные. В среднем получается в день продвинутся на 2-3 страницы, а за неделю книга увеличивается примерно на 15 страниц. В последнее время прирост немного больше, потому что сейчас начался более длинный код для примеров.
Читать далее…
Один из моих интересов — это алгоритмы глобальной оптимизации. Классика — это генетический алгоритм, алгоритм имитации отжига и алгоритм роя частиц. Есть еще большое количество алгоритмов, в названии которых упоминается какая-нибудь живность. В своей диссертации для оптимизации я использовал кроме генетического алгоритма еще алгоритм роя пчел (не путайте с роем частиц, их постоянно все путают). Еще часто упоминается алгоритм муравьев (в основном для поиска пути), попадалось упоминание алгоритма кукушки (cuckoo search algorithm).
И вот еще недавно прочитал статью, где для оптимизации использовали алгоритм хаотичных воробьев (chaos sparrow search algorithm). Название уже интригует. Причем если почитать описание этого алгоритма, то там разворачивается прям блокбастерная история, напрашивающаяся на экранизацию. Среди роя воробьев выделяются воробьи-исследователи (explorers), последователи (followers) и мстители (vigilantes), и каждый из них перемещается по своему алгоритму. Дальше, чтобы не спойлерить, чем все это закончится, читайте описание алгоритма.
Даже захотелось попробовать реализовать такой алгоритм. Тем более, что у меня есть заброшенный проект на Rust с библиотекой подобных алгоритмов.
А еще у нас на кафедре должен появиться новый предмет про алгоритмы искусственного интеллекта в задачах оптимизации. Впервые его должны читать через несколько лет студентам, которые поступали к нам в этом году, и есть ненулевая вероятность, что вести его придется мне, по крайней мере я участвовал в составлении учебной программы. Добавлю себе в заметки еще алгоритм воробьев-хаотиков (гугл предлагает перевод «воробьи хаоса», что звучит еще более пугающе), вдруг пригодится.
15 октября 2024, 06:45 пп
Теги:
outwiker
В этом месяце новой альфа-версии OutWiker не будет, потому что она сейчас находится в разломанном состоянии, но я решил рассказать о том, куда движется разработка. Движется неспешно, и иногда во внезапных направлениях. Как я писал в недавнем посте про первую альфа-версию OutWiker 4.0, на будущую версию у меня большие планы, в этой версии я хочу многое переделать.
Читать далее…
Покажу, как идут дела с написанием книги про Python. Сразу, как только я взялся за это дело, я завел электронную табличку, в которой каждый раз после работы над книгой помечаю, сколько на данный момент написано страниц. Получается интересный график, а заодно для себя отмечаю, сколько я успеваю написать за день или неделю. Книгой я занимаюсь в свободное от работы время, но стараюсь хотя бы по часу в день на нее выделять.

На сегодняшний день написал 238 страниц, но тут надо учитывать, что сейчас я нахожусь в режиме «чукча-писатель», в том смысле, что практически не перечитываю то, что получилось. В режим «чукча-читатель» планирую переключиться, когда основной материал уже будет описан. Есть смутное подозрение, что тогда придется многое посокращать, а то что-то много получается страниц по сравнению с тем планом, который был изначально.
А еще на графике можно заметить явно выделяющиеся участки. Первый — с начала и до 2 августа — там я пытался войти в ритм, пытался понять, в каком стиле писать, и там были самые скучные главу — общие слова про язык, базовые типы и Python как калькулятор. В это время график был неровный и дерганный. Второй участок — со 2 по 12 августа был полностью горизонтальный, потому что начался отпуск и я с друзьями уехал в поездку по Пермскому краю. По возвращению график стал заметно быстрее расти — это я из поездки вернулся, но отпуск на работе еще продолжался. Ну и с начала сентября пока растет тем же темпом, но скорее всего сейчас должен немного замедлиться, потому что часть времени сейчас уходит на подготовку к занятиям со студентами (и еще внезапно аспирантами). А так для себя я решил, что если за неделю я продвигаюсь на 15 страниц, то это нормально.
После недавнего релиза решил, что пришло время более глобальных изменений, и поэтому следующая версия будет иметь номер 4.0. На данный момент это единственное глобальное изменение, заметное пользователям. 🙂 Но зато это повод не соблюдать обратную совместимость плагинов, обновить внутреннюю версию API для них и заняться подчисткой кода от древних окаменелостей. Именно с этого я и начал. Еще в прошлой версии я начал переделку внутреннего API и пометил код, который надо будет удалить, как только обратная совместимость станет неактуальной. Вот этот код и поудалял.
Дальше у меня есть несколько направлений, куда хотелось бы двигаться. все они требуют экспериментов, которые заранее не известно, чем закончатся.

Читать далее…

Скажу пару слов о редакторах кода. Во-первых, некоторое время назад разработчики редактора Zed, про который в последнее время часто стали писать в англоязычном интернете, выпустили версию под Linux (до этого у них была версия только под Mac). Версии под Windows еще нет, но обещают. Я немного его потыкал, но не достаточно, чтобы сложилось какое-то мнение. Работает шустро.
А я озадачился поиском альтернативы NeoVim под Windows. Почему-то под Виндой связка NeoVim с языковым сервером pyright жутко тормозит, хотя под Linux-ом NeoVim с тем же набором плагинов работает замечательно.
В последние несколько дней пробую Helix. Это редактор, который написан на Rust, а по идеологии близок к Vim. Там тоже есть несколько режимов работы (нормальный, вставки и выделение), но комбинации клавиш там свои. По сравнению с Vim/NeoVim возможности у него пока победнее, и плагинов для него совсем немного. Но работает быстро. Он тоже умеет взаимодействовать с языковыми серверами. Понравилось, что для всех длинных комбинаций клавиш у него выскакивают подсказки. Например, нажал Ctrl+W в нормальном режиме — в углу выскочило окошко с перечислением клавиш, которые можно нажать дальше, и описание, что каждая комбинация делает (см. картинку). Нажал «:» для попадания в командную строку — сразу появились подсказки по возможным командам, которые фильтруются по мере их ввода.
На первый взгляд не хватает полноценных вкладок (есть только буферы, как в Vim), а в режиме outline, где перечисляются всякие функции и классы, все функции идут сплошным списком без древовидности по классам. Но в целом, интересно, буду еще играться с Helix и ждать Zed под Windows. Под Linux-ом пока остаюсь верным сторонником NeoVim.
А расскажу-ка я вам об одной авантюре, в которую недавно ввязался. Ну, может это и не совсем авантюра, но по крайней мере дело, которое требует к себе особого внимания. Если совсем коротко, то несколько месяцев назад я начал писать книгу про Python.
Как-то так случилось, что весной (кажется) мне написал представитель одного издательства, которое выпускает программерские книжки (Олег, если Вы это читаете, то привет Вам) с вопросом, не хочу ли я написать книжку. А я как раз в это время готовил материал и одновременно вел занятия со студентами по основам Python. С мыслью «а почему бы и нет» я взялся за это дело. Так что, я уже несколько месяцев пытаюсь складывать буквы в слова. Кроме букв иногда даже попадаются странные закорючки.
Ориентируюсь на наших студентов, которые учатся не на программистов, но с расчетом на то, что Python они будут использовать для инженерных задач и обработки данных. Поэтому в книге не будет ничего про веб-программирование, глубоко копать ООП тоже не будем (никакого множественного наследования и метаклассов), но при этом надо будет поподробнее рассказать про библиотеки Numpy, SciPy, Matplotlib и Pandas. При этом подразумевается, что студенты уже имеют представление о том, что такое программирование, переменные и циклы, и, возможно, даже поверхностно знают C.
Я думаю, что в телеграм-канале я буду периодически рассказывать, как продвигаются дела.
Прошел год с момента публикации предыдущей стабильной версии OutWiker 3.2. Настало время заморозить изменения в версии 3.3 и назвать ее стабильной, после этого можно будет приступать к разработке следующей версии, внося крупные изменения, и не опасаясь что-то сломать. В общем, теперь стабильной версией будет считаться OutWiker 3.3. В этой версии удалось сделать не так много, как хотелось бы (но это обычная история), хотя изменения довольно заметные. В этом посте я опишу основные видимые изменения, которые произошли в OutWiker 3.3 по сравнению с прошлой версией 3.2. Если вы регулярно читаете этот блог или используете бета-версии, то вы уже в курсе всех этих новшеств. В основном в этой версии я занимался улучшением интерфейса.
Читать далее…
На днях дочитал книгу Алекса Сюя «System Design. Подготовка к сложному интервью». Эта книга меня заинтересовала тем, что в ней описаны подходы к проектированию архитектуры сложных веб-сервисов со стороны бэкенда. Книга построена в формате интервью на собеседовании при приеме на работу, когда кандидата просят нарисовать, как бы он выстраивал структуру какого-нибудь сервиса, если бы он начинал проектировать ее с нуля. Во всех примерах речь идет о высоконагруженных сервисах с миллионами пользователей.
На самом деле от формата интервью в книге только постановка задачи, где кандидат в диалоге с интервьюером обсуждают подробности будущей системы, кандидат выпытывает у интервьюера, какая ожидается нагрузка, какой объем данных предоставляется пользователю, после чего делает расчеты требуемого объема хранения данных и сколько ожидается запросов в секунду. Потом эти цифры нигде не используются, интервьюер уходит со сцены, а кандидат начинает свой монолог о том, как он видит структуру системы.
Кандидату в этой книге предстоит построить такие высоконагруженные системы, как поискового робота, систему сокращения URL-адресов, систему для отправки уведомлений пользователям (push-уведомления, SMS-уведомления, через почту и т.п.), ленту новостей блога, чаты, систему автозаполнения поисковых запросов, а в завершение ему предлагается нарисовать архитектуру будущих конкурентов для Youtube и Google Drive. Есть еще несколько глав, где требуется спроектировать один из компонентов таких систем — хранилище типа «ключ-значение», ограничитель трафика и распределенный генератор уникальных идентификаторов.
Читать далее…