Вернулся недавно к своему пет-проекту по вычислению статистики времени принятия пулл-реквестов, который я сделал на Kotlin/JS пару лет назад. Добавил туда построение графа, где вершинами являются метки, а ребро говорит о том, что есть тикет, в котором есть обе метки.

К сожалению, взаимодействие с JS не стало лучше. Возможно частично из-за того, что рекомендуемый подход — использовать multiplatform. Планирую как-нибудь попробовать.

Из неприятного — в последней версии Kotlin сломали генерацию интерфейсов из типов .d.ts, потому что требуется npm install. Не стал разбираться детально с причинами, просто ругнулся из-за унылого решения и понизил версию платформы. Еще словил баг инкрементального компилятора, который вместо человеческой ошибки (я забыл передать требуемый аргумент) выдал мне хрень, но заводить баг посчитал излишним, т.к. скоро будет K2.

В основном делал кучу всякого рефакторинга, чтобы было получше. Опять поругался с библиотекой сериализации, с которой нужно много танцевать, если хочется иметь нормальный полиморфизм. Несколько раз возникала мысль, что когда пытаешься срезать углы, чтобы написать “быстрее”, это приводит к большим проблемам и трудозатратам, чем если писать сразу “правильно”, хоть это и утомительно. Возможно, опять перфекционизм заиграл в одном месте.

Немного интересного узнал с точки зрения фронта — как скопировать в буфер обмена, как сделать ссылку на скачивание файла “из памяти” и как сделать вкладки на CSS (которые не пригодились в итоге).

Думал еще сделать какую-нибудь визуализацию графа с автоматической укладкой, но всякие force-layout мне не понравились. На парочке интересующих меня репозиториев все выглядело просто как комок вершин без выраженной структуры. Попробовал force-graph (быстро, просто, негибко), d3 (быстро, очень гибко, хрен настроишь) и vivagraph (вроде работает, но куча сломанных ссылок на доки напрягла). Cytoscape не стал пробовать, воспоминаний с работы было достаточно, чтобы сделать это неинтересным. В итоге решил сделать просто экспорт в .dot — если кто вдруг будет пользоваться (кек), сам разберется.

В целом как пет-проект мне эта фигня нравится. Делает что-то не совсем бесполезное, можно потрогать фронт, котлиновские корутины, GraphQL и всякую мелочевку попутно.