14 октября 2023 года разработчик Богдан Попа (Bogdan Popa) выпустил для ОС Windows бета-версию своего десктопного клиента Franz для Apache Kafka. Ранее этот проект был доступен только для macOS. Исходный код Franz выложен на GitHub (в основном там используются языки Racket и Swift). Это не открытый проект, разработчик просит приобретать у него лицензию тех, кто найдёт Franz полезным для использования.
«Одна из моих целей при написании программного обеспечения на Racket — помочь расширить экосистему Racket. Я стараюсь сделать это, делая части приложений, которые пишу, открытыми, где это возможно, и внося небольшой вклад в сам Racket. Кроме того, я иногда вижу, как новые пользователи просят примеры реальных приложений, созданных с помощью Racket, поэтому я также пытаюсь сделать доступным исходный код своих собственных приложений, где это возможно. Я надеюсь, что разработчики, заинтересованные в использовании Racket, смогут получить представление о том, как выглядит его использование на практике, просмотрев код этих приложений, и мне нравится мысль о том, чтобы позволить всем видеть, какой код они используют, когда запускают мои приложения», — уточнил Попа.
В процессе написания приложения Franz Попа в конце 2022 года написал клиент Kafka для Mac, включая библиотеки для сериализации и десериализации данных Avro, MessagePack и Protocol Buffer, собственные декомпрессоры для LZ4 и Snappy, а также хеш-язык для Lua, среди прочего.
Он планировал работать над версией Franz для Windows с прошлого года. Первоначально разработчик собирался реализовать пользовательский интерфейс на C# (или, возможно, на F#), но затем в начале 2023 года Попа решил попробовать использовать Racket в качестве GUI для реализации версии Franz для Windows (а вскоре и для Linux).
В macOS Franz реализован с использованием комбинации Racket для базовой логики и Swift для пользовательского интерфейса. Версия для Windows повторно использует подобное ядро и заново реализует все представления приложения с помощью технологии gui-easy.
Конечным результатом Windows-версии Franz для Apache Kafka является около 5 тыс. строк кода графического интерфейса. Для сравнения, версия Franz для iOS на Swift содержит около 8,2 тыс. строк кода Swift (смесь AppKit и SwiftUI) и около 4,5 тыс. XML, представляющих XIB, созданных с помощью Xcode Interface Builder. Поскольку Rack/gui является кросс-платформенной библиотекой, и, следовательно, она должна ориентироваться на наименьший общий знаменатель из трёх поддерживаемых ею платформ с точки зрения функций, конечный результат не такой совершенный, как версия для Mac или Windows Forms3. Попа пояснил, что все же смог добиться желаемого результата.
Поскольку исходным кодом является Racket, то запуск клиента тривилен: просто вызовите raco.exe, чтобы сгенерировать исполняемый файл, а затем raco.dist, чтобы упаковать его. Единственной проблемой был SmartScreen от Microsoft. Попа не готов платить за сертификат EV4 для поставщиков сторонних приложений, поэтому он решил вручную отправлять код проекта для новых выпусков Windows в Microsoft для проверки на наличие вредоносного ПО. Пока это не представляет большой проблемы для автора, если не считать времени на обработку этих запросов.
Попа пояснил, что будет поддерживать версии Franz для Mac и Windows одновременно. По его словам, ему нужно теперь вносить минимальные изменения в основной код, чтобы поддерживать обе версии. Также версию клиента для Windows он создал примерно за два месяца работы в свободное время. «Я думаю, что небольшая команда, использующая эту модель, может двигаться очень быстро и создавать отличные собственные приложения на Racket для каждой платформы», — подытожил Попа.
Источник: habr.com