Мой подход к разработке
Сегодня в рамках разработки CrowFORGE V1.1 я завершил ряд улучшений, которые напрямую влияют на повседневную разработку программного обеспечения. Я сосредоточился на управлении файлами и памятью, окружениях Python, сохранности исходного кода, операциях Git и освоении приложения. Улучшения первого кандидата в релиз я объединил с исправлениями RC2, направленными на проблемы, которые мы обнаружили в процессе использования. Моя цель — предоставить среду разработки, в которой пользователи могут создавать проекты с помощью более понятных шагов, видеть причину возникшей проблемы и отслеживать внесённые изменения.
Определяя направление развития CrowFORGE как продукта и приоритеты разработки, я опираюсь на реальный опыт использования. Техническую реализацию, проверку кода и валидацию я выполняю при поддержке Codex. Работая с существующим интерфейсом на React и TypeScript, настольным слоем Electron и редактором на базе CodeMirror, я оцениваю весь процесс: от того, как функция представлена в интерфейсе, до результата её работы в файловой системе. Значительная часть сегодняшних обновлений связана с тем, чтобы сделать поведение этих слоёв согласованным.
Управление файлами и памятью
В управлении файлами я прежде всего исправил прежние ограничения в 1 МБ на файл и 5 МБ на общий объём содержимого, которые всё ещё использовались в некоторых операциях открытия. Я привязал локальные файловые операции к единому определению лимитов: в RC2 поддерживаются редактируемые текстовые файлы размером до 20 МБ, а суммарный объём текста, загруженного в память во всех проектах приложения, может достигать 100 МБ; объём рассчитывается в байтах UTF-8. Этот суммарный объём не означает место, которое папка проекта занимает на диске. При открытии папки сначала отображается каталог файлов; содержимое читается, когда пользователь выбирает нужный файл. Текущая вместимость каталога остаётся на уровне 20 000 файлов на проект, а открытой рабочей области — 30 проектов.
Чтобы упорядочить использование памяти, я добавил механизм, который при необходимости выгружает из памяти содержимое закрытых локальных файлов без несохранённых изменений. Несохранённые правки, черновики на устройстве, открытые вкладки и документы, используемые во втором редакторе, сохраняются. Поведение при выборе нескольких файлов — открытие первого файла и сохранение остальных в дереве файлов — также приведено в соответствие с этим процессом. Я обеспечил учёт общего лимита текстового содержимого при параллельном чтении, получении содержимого из истории и импорте резервных копий. Таким образом, проверки лимитов в разных частях приложения больше не опираются на противоречащие друг другу правила.
Для больших документов я также разработал облегчённый режим редактора. Когда документ превышает два миллиона кодовых единиц UTF-16, работа мини-карты, переноса строк, синтаксического разбора языка и языкового сервера приостанавливается; редактирование, поиск и сохранение остаются доступными. При переходе к меньшему документу личные настройки применяются снова. При обычном редактировании мы обновляем размер документа по изменённому тексту, вместо того чтобы заново вычислять его при каждом нажатии клавиши. Кэширование проверок несохранённых изменений и кратковременная приостановка анимаций Matrix и бренда во время набора текста также входят в число улучшений, которые я сделал для снижения лишней нагрузки в рабочей области.
Защита и восстановление кода
В работе с файловой системой особое внимание я уделил сохранности содержимого, изменённого вне приложения. Мы обнаружили ситуацию, когда файл, прочитанный при обновлении, мог изменить базовую версию для сравнения при сохранении ещё до того, как редактор принял это содержимое. Я исправил это, разделив чтение и принятие на два этапа. Сначала содержимое читается; базовая версия для сравнения обновляется, когда редактор принимает его и состояние файла на диске по-прежнему позволяет это сделать. Мы проверили это поведение отдельными тестами, чтобы чтение, отклонённое из-за размера, или ответ, не использованный из-за одновременного редактирования, не позволяли перезаписать внешнее изменение при последующем сохранении.
Добавленные мной в V1.1 локальное восстановление работы и история файлов продолжают этот подход. Открытые работы регулярно сохраняются в области данных приложения; при закрытии ожидается завершение последней операции сохранения для восстановления. Целостность записей проверяется, а если последнюю запись невозможно прочитать, рассматривается предыдущая исправная запись. В истории файлов сохраняется предыдущая версия содержимого, которое было изменено и сохранено. Пользователь может сравнивать версии рядом; восстановленное содержимое сначала поступает в редактор, и файл на диске не меняется до выполнения команды «Сохранить». Ограничения на число записей истории и их суммарный размер предотвращают неконтролируемое расходование дискового пространства.
Резервные копии работ я также привёл в соответствие с новыми файловыми лимитами. Содержимое проектов читается последовательно, выполняется проверка целостности, сохраняется совместимость со старыми резервными копиями JSON. Импортированные проекты открываются с новыми идентификаторами как отдельные черновики на устройстве; существующие проекты не перезаписываются. Этот механизм предназначен для сохранения текстовых работ. В обучающих материалах и примечаниях к выпуску я прямо указал, что папку проекта, включая изображения, модели и другие двоичные ресурсы, необходимо резервировать отдельно.
Окружения Python и библиотеки
Одним из наиболее масштабных нововведений для Python стал «Доктор проекта». Я добавил процесс проверки выбранного интерпретатора, виртуального окружения и поддерживаемых объявлений зависимостей в requirements.txt и pyproject.toml. Пользователь может увидеть отсутствующие или несовместимые компоненты и проверить, в каком окружении будет выполнена предлагаемая операция. После подтверждения операции повторно проверяется, что отчёт, окружение и соответствующие объявления проекта не изменились. Во время проверки не запускаются ни приложение проекта, ни сценарий сборки; динамические и неподдерживаемые определения зависимостей отмечаются в отчёте.
В RC2 я также улучшил обнаружение Python. Средство запуска Windows, записи PATH, стандартные места установки и вручную выбранный интерпретатор обрабатываются более согласованно. В частности, я исправил ошибку, из-за которой выбранный вручную Python не использовался при создании виртуального окружения. Отсутствие Python, venv, ensurepip и pip теперь отображается отдельно. Пользователь может выбрать интерпретатор, повторно проверить окружение, создать виртуальное окружение проекта и восстановить pip в подходящем окружении. Если Python отсутствует на компьютере, предлагается переход на официальную страницу установки; после установки проверку можно повторить.
Экран библиотек я также связал с этим управлением окружениями. Теперь видны целевой проект и путь к Python; результаты поиска пакетов отделены от состояния установленных пакетов. Репозиторием по умолчанию выбран PyPI, а вводившее в заблуждение отображение активных кнопок установки при невыполненных предварительных требованиях исправлено. Были проверены установка автономных примеров в выбранное окружение и отображение её результата. Для пакетов C# разъяснено требование наличия .NET SDK, а для C++ — шаги между добавлением пакета с исходным кодом в проект и возможностью его скомпилировать. Отобранные библиотеки-примеры поставляются с приложением; остальные пакеты устанавливаются по мере необходимости из соответствующих репозиториев. Python, .NET SDK и компилятор C++ должны быть отдельно установлены в операционной системе.
Первый проект и практическое обучение
Чтобы уменьшить неопределённость, с которой начинающий пользователь сталкивается в первом проекте, я подготовил мастер создания проекта из четырёх шагов. Сначала пользователь выбирает язык и имя проекта, затем расположение, проверяет рабочее окружение и переходит к первым шагам использования. Основное внимание уделено Python; также предлагаются JavaScript, TypeScript, Web, C# и C++. Показана разница между папкой проекта на компьютере и черновиком на устройстве. Недостающие инструменты можно настроить позже; создание проекта не приводит к автоматическому запуску кода или установке пакетов.
Я дополнил этот мастер учебным центром, охватывающим всё приложение. Обучение открывается клавишей F1 или через меню «Справка», доступно на турецком и английском языках и содержит 11 разделов, 37 практических шагов и проверку знаний из 5 вопросов. Дерево файлов, вкладки, редактор, поиск, окружения Python, пакеты, терминал, тесты, отладка, инструменты C#/C++, Git, история, резервное копирование и персонализация рассматриваются в рамках единого процесса обучения. В каждом шаге указаны действие, ожидаемый результат и то, что следует проверить при возникновении проблемы. В последнем разделе пользователь создаёт небольшое приложение Python, выполняет тест и упражнение с requests. Прогресс хранится на устройстве в виде контрольных списков, которые отмечает пользователь. Я также подготовил руководства с тем же содержимым в HTML и Markdown, которые можно читать независимо от приложения. Для чтения HTML-руководств подключение к интернету не требуется; для перехода по ссылкам на официальные внешние ресурсы интернет необходим.
Git и повседневная работа
Для отслеживания исходного кода я улучшил сравнение в Git. Теперь можно более наглядно изучать изменения в рабочих файлах, изменения, подготовленные к коммиту, и конфликты. Предыдущее и последующее содержимое сравнивается построчно; доступны добавление отдельного файла в индекс и его удаление из индекса. При конфликтах изучение общей базовой версии, текущей и входящей сторон помогает пользователю принять решение. Добавленный мной поиск по структуре через Ctrl+Shift+O для навигации по длинным файлам также позволяет переходить к нужному месту по именам функций и классов. Эта функция использует подходящий языковой сервер или поддерживаемую локальную синтаксическую структуру.
Для повседневной работы я добавил начальный и расширенный режимы интерфейса, поиск по настройкам и возможность выбора сочетаний клавиш для определённых команд. Настройки панели файлов, нижней панели, разделённого вида и профиля запуска запоминаются для каждого проекта. При перезапуске выполнения сначала ожидается завершение текущей задачи. Когда окружение Python меняется, пользователь получает уведомление, что открытый терминал может по-прежнему использовать старое окружение, и предложение открыть новый терминал. Известные ошибки окружения, компилятора и доступа направляют пользователя к соответствующей проверке. Я расширил поддержку турецкого и английского языков на новые панели и упростил интерфейс, скрыв в основной рабочей области ненастроенные элементы учётной записи и AI. Я также исправил строку состояния: при смене документа она теперь показывает фактическую позицию курсора в новом файле.
Эти улучшения я добавил к существующим пяти темам, кристаллическому логотипу, мини-карте, разделённому редактору и вкладкам предварительного просмотра. Они были основными возможностями предыдущей версии; сегодняшняя работа дополнила эту основу более согласованным и понятным процессом использования. Моё решение предоставлять CrowFORGE бесплатно остаётся в силе. Для использования локальных инструментов разработки учётная запись или подписка не требуются.
Проверки и дальнейшие шаги
В рамках валидации, включая заключительные проверки установки, успешно завершены 26 групп тестов. В настоящем окне Electron на Linux x64 пройдены 11 проверок интерфейса; одна из них проверяла ситуацию с отсутствующим Python на контролируемых тестовых данных. Были оценены чтение и сохранение файлов, сохранность больших правок после повторного открытия, мастер создания проекта, создание настоящего виртуального окружения, автономная установка пакетов и прогресс обучения. Подготовлены установочные файлы Setup для Windows x64 и ARM64, а также архивы для Linux x64 и ARM64. Проверены содержимое пакетов, архитектуры процессоров, поля значка и метаданных Windows, скомпилированные страницы KVKK, целостность архивов и значения SHA256. Я также удалил ненужный временный файл, обнаруженный при проверке пакета, и заново собрал установщик Windows x64 с чистым результатом сборки.
Текущий выпуск я подготовил как 1.1.0-rc.2. Проверки реальной установки и приёмочные тесты Defender в Windows, а также проверка запуска на оборудовании ARM64 пока не завершены; сертификат подписи кода также ожидается. Подключения внешних отладчиков для C# и C++ остаются экспериментальными. В этом выпуске я не включал службы учётных записей, облака, AI и автоматического обновления. Существующие пользователи могут выполнить обновление с помощью подходящего файла Setup, предварительно сохранив работу, сделав резервную копию и закрыв приложение. Дальнейшие приоритеты разработки я также буду определять по результатам использования в реальных проектах: понимание рабочего окружения, сохранность кода и ясность следующего шага для пользователя останутся в центре моей работы над CrowFORGE.

