This commit is contained in:
Михаил Капелько
2026-02-15 06:45:27 +03:00
parent 90683d2b77
commit 493863ae5a
16 changed files with 1590 additions and 308 deletions

539
budget/2026-Q1.md Normal file
View File

@@ -0,0 +1,539 @@
14.02: 35
* продумать структуру проекта KD
не является ли он корнем всего проекта?
т.е. не должно ли в корне репы быть директории ver-nodejs?
а в отдалённом будущем, может, даже и ver-macos?
т.е. являются ли KDController+KDContext самостоятельными продуктами без транслятора?
как-будто нет
ведь транслятор может поставлять и эти файлы тоже
типа зачем в принципе руками делать скрипты под каждый проект
пусть транслятор это и делает?
транслятор ли это тогда? или уже нечто большее?
а файл YML - это файл проекта, выходит
с другой стороны, есть же тесты как раз контроллера и контекста
да и registerOneliners тоже как-будто являются продуктом
хотя для работы в C++ нужно будет сделать ведь какой-то аналог как Ctrl, так и registerOneliners
и для Swift тоже
т.е. всё-таки биндинги на разные языки тоже часть продукта
хотя эти биндинги как-будто тоже могут и должны поставляться вот эти инструментом kd
выходит, это всё-таки комплексное решение
для каждого языка - свой набор файлов
может, не только файлов, но и примеров аля Hello World
выходит, есть три продукта:
1. KD Generator
по файлу yml генерит в нужные места нужные файлы
если это утилитарная функция то вроде как нет смысла делать что-либо отличное от Node.js
оно просто удобнее всего
а поддерживать разные варианты - это как-будто уже излишнее
2. KD Controller, Context, registerOneliners, тесты контроллера и контекста
тесты нужны чисто для меня самого
но теоретически их может запускать и генератор
хотя зачем? они нужны чисто для разработки
кстати, тестов registerOneliners как-будто нет
хотя это как раз HW могут осуществлять по факту
3. Обёртки для Swift, C++, JS?
есть ли смысл класть их куда-либо по раздельным папкам?
как-будто можно сделать корневую директорию src
а оттуда линковать уже как в HW, так и в другие места
хотя их по сути надо встраивать в KD Generator
ибо Node.js будет отдельно поставляться без репы исходников
* создать src/ с KDController/Context
* создать test/
для начала с проверкой Controller/Context
14.02: 40
* обдумать будущее своего проекта + котлин
нужно делать Kotlin Dialect / Диалект Котлина
ПСКОВ будет продуктом KD
Git Budget будет продуктом KD
* переименовать репу cross-language-dialect в kotlin-dialect
* сделать ревизию текущего состояния проекта CLD
* переместить swift/js глубже в history-2025
* Канал Диалект Котлина:
написать хвалу C++ за его строгость и некоторую аутсайдерность
Несмотря на то, что данный канал посвящён Котлину и тому, как правильно на нём писать код под несколько платформ, помощь языка C++ в определении правил написания этого самого кода трудно переоценить. Именно благодаря C++, в котором практически невозможно написать то, что без проблем пишется на Kotlin и Swift, приходится выкручиваться и находить третий путь. Спасибо C++ за несгибаемость.
13.02: 50
* вызвать заготовку oneliners напрямую
без связи с CLDController
* (последнее) поддержать синтаксис oneliners для эффектов
удалось!
12.02: 50
* сделать привычную обёртку над CLDController
хотя по факту нас интересует ровно один вызов: budgetCtrl().set(...)
возможно, это должен быть класс, да
просто для удобство ссылки на этот класс и хранения его экземпляра
это просто привычно? хотя хранить его смысла нет, он как бы отсутствует
ведь теперь это всё будет синглтоном внутри KT
пример шаблонной функции:
https://stackoverflow.com/a/44469314/3404710
итог: ввести функцию шаблонную, чтобы она вызывала разные typeToAny() из KT
ввести функцию в KT?
ввёл шаблонную функцию budgetCtrlSet(k, v)
работает
* сделать пример обёртки над didLaunch для BudgetContext
удалось с помощью функций const
11.02: 50
* зарегистрировать шуд?
на самом деле, это не нужно
эти шуды должны остаться внутри fun.kt
тогда этот код регистрации тоже не будет иметь смысл дублировать
шуды же всё равно крутятся сами по себе без эффектов внешних
т.е. их безопасно регать сразу в fun.kt
итог: ввести константу со списоком функций для регистрации и отдельно функцию регистрации стандартного списка
10.02: 45
* проверить вызов KT.budgetControllerContext для получения текущего значения Context
это работает
* прибраться в коде
* выводить все ключи
09.02: 50
* проверить передачу контекст через шуд
* проверить получение значения поля из шуда
всё вспотыкается об крайне неудобно сделанные типы
08.02: 100
* изучить NodeGui?
как-будто это подрывает смысл весь нативности
ведь пусть хоть Qt и нативный, но приложение-то уже ненативное
поэтому пока нет смысла изучать, я этим не продвину нативность
а мне как раз надо доказать нативность
* спросить у команды Kotlin показать, как callback передать
https://youtrack.jetbrains.com/issue/KT-84169/How-to-register-a-C-C-callback-into-Kotlin-dynamic-library
* изучить использование С в KMP
https://kotlinlang.org/docs/mapping-primitive-data-types-from-c.html
возможно, тут будет ответ на callback
https://youtrack.jetbrains.com/issue/KT-43978/koltin-native-Dynamic-Library-how-to-override-a-fun
нашёл тут наводку
удалось вызвать простой callback
* вернуть void()
* добавить registerFieldCallbackC без параметров
* ввести CLDController.currentContext и достать значение Context
не удалось: segfault
07.02: 100
* создать заготовку BudgetComponent
* ввести data class Item и попробовать достучаться до него
или функцию вызвать свободную вызвать для начала
вроде createBudgetContext()
удалось получить доступ к Item.x (как get_x)
* достучаться до CLDController
* бегло ознакомиться с NodeGui
06.02: 55
* не удаётся создать экземпляр CLDController
05.02: 60
* установить доппакеты
bzip2 tar gcc make perl git
* установить guest additions
не получилось с первого раза
может, и нафиг?
но тогда я ключи не передам без SharedFolders
итог: установил после установки доппакетов
* скопировать ключи проекта
доступа до git.hi-tech.org нет
так что ключи не помогли
* установить java
sudo apt install default-jdk
* склонировать проект
Android Studio не нужно
скопировал архив tar руками через Shared folders
* изучить ошибку запуска kom/util/gen-entities
исправил двумя правками
04.02: 35
* сделать sdk-mac-x64
03.02: 50
* сделать ver-mac-x64 hw gbmac
02.02: 40
не сделал для статьи:
* ответить на критику из статьи Flutter vs KMP
https://habr.com/ru/companies/friflex/articles/839646/
* ответить на страхи
я останусь без работы, если кто-то сможет делать мою работу
* пример статьи со схлопыванием куска кода
* страхи
надо ж переходить
а это тоже не просто
да, надо, это не палочка выручалочка
* узнать версию Qt свою
6.9.1
* установить Qt 6.10.1
brew install qt
* исправить ошибку AGL not found на Xcode 26
установка Qt 6.10.1 помогла
* запустить qt-kt
28.01: 230
* написать статью
для тех кто в танке
КМП?
архитектура
шаблон проектирования CSE
как выглядит процесс
расчёты
ускорение вторичного написания кода
единые баги логики на разные платформы
единое поведение на все платформы
* посчитать объём общего кода и разного
* посчитать скорость дублирования функциональности из Android в iOS
первичный код - запись: 17 мин
дублированный код - запись: 7 мин
это около 41% от времени
т.е. экономия времени - 59%, т.е. в два раза тупо эффективнее
для того человека, который уже писал этот код и знает его досконально
для новичка, думаю, результат будет иной
* посчитать разницу в объёмах кода первоначального и дублированного
* подготовить статью на основе видеозаписей по git-budget
* добавить спойлер в вводную
можно сэкономить X времени
* описать GitBudget
√ описать кратко проект
√ сделать фотку внешнего вида на Android + iOS
√ описать UX
показать картинку со структурой мобильного приложения из презентации
перейти на GitBudget
* занести в таблицу объём кода по группам
* показать реализацию фичи кнопки вставки на Android и iOS
* аналитику расписать
время
строк кода
и т.п.
* выводы написать
* завести репозиторий для видео сайта
чтобы не потерять их через несколько лет
ведь я их просто кладу на хостинг
а в какой-нибудь год просто забуду заплатить
* убрать ссылку в GitHub на kornerr.ru/git-budget
* обновить README GB
надо убрать старое описание
и вставить новую фотку Android + iOS
* повторно прочитать статью
* опубликовать на хабре
https://habr.com/ru/articles/989286/
* подготовить письмо
* отправить письмо
* уведомить всех получателей о письме
28.01: 90
* создать проект с видеофайлами
https://github.com/kornerr/ruvid
* обрезать видео инцидента с MAX
00:53
28.01: 30
* переписать вводную
27.01: 55
* переименовать статью
Что нам стоит на КМП построить?
* описать текущее положение дел
26.01: 60
* найти статьи про КМП на хабре
понять наполнение
* создать первую версию вводной
https://habr.com/ru/articles/989286/
25.01: 55
* повторить вставку morning balance с Cursor для Android
вставляет в поле
но логика не пересчитывается
* повторить вставку morning balance с Cursor для iOS (без кода до)
вставляет в поле
но логика не пересчитывается
* повторить morning balance c Cursor для iOS именно с промптом продубировать функциональность, которую добавил для Android с пояснением про вставку
это получилось как-будто 1-в-1
типа Cursor чего-то может понять про копии
это даёт какую-то надежду
* конвертнуть записанные видео с ИИ в MP4
24.01: 30
* оформить ЗС
https://github.com/kornerr/git-budget/pull/9
* влить ЗС
* продублировать копирование из буфера в morning balance для iOS под запись
* оформить ЗС
https://github.com/kornerr/git-budget/pull/10
* влить ЗС
* видео ios: ~/gbart
23.01: 30
* оформить ЗС
https://github.com/kornerr/git-budget/pull/8
* влить ЗС
* сделать копирование из буфера в morning balance для Android под запись
видео: ~/gbart
22.01: 40
* README: Long, Double
* обновить версию до 1.3.0
* обновить changelog
* оформить ЗС
https://github.com/OGStudio/cross-language-dialect/pull/12
* влить ЗС
* сделать копирование из буфера в spent
* сделать копирование из result в буфер
* подключить функциональность из gb в iOS
21.01: 30
* сделать Swift extension для возможности вызвать budgetCtrl().set(x, y) без label
работает
* заполнить setupShoulds
* передать inputSpent
* передать inputMorningBalance
* передавать result
* заполнить setupEffects заготовкой
20.01: 30
* исправить weekday, чтобы reportedWeekday был 7, а не 1
* добавить registerCallback для отладки
19.01: 40
* создать заготовку компонента budget в iOS
* реализовать budgetReportedDate()
* реализовать budgetReportedWeekday()
18.01: 30
* собрать проект с подключенной либой gb
* вызвать simplyPrint в iOS
* перенести функции в gb
18.01: 50
* досоздать заготовку build.gradle.kts
* создать заготовку ver-sdkios
* переименовать ver-sdkios -> sdk-ios
* сделать скрипт util/gen-ios
√ сборка
√ архивирование
17.01: 40
* доверстать заготовку интерфейса
два поля ввода
текстовый результат
кнопки для буфера
17.01: 35
* сверстать поле ввода spent с кнопкой
16.01: 40
* долг:
entities.yml: удалить copyResult
это didClickCopy ведь уже
* создать заготовку приложения на iOS по примеру песочницы
* оформить ЗС
https://github.com/kornerr/git-budget/pull/7
* влить ЗС
16.01: 35
* создать ЗС
[GigaIDE AI version]
до изменений paste
* повторить копирование в буфер через Giga IDE
не удалось
ибо не работает агент
15.01: 45
* уведомить о факте копирования
на моём Samsung это и так происходит
ГигаЧат сказал, что и многие другие производители отображают уведомление на копирование в буфер
итог: не надо ничего показывать дополнительно
* создать новую ветку для ЗС с помощью Cursor
* продублировать копирование в буфер с помощью Cursor
* оформить ЗС cursor
* оформить ЗС ручной
* влить ЗС ручной
* скачать Giga IDE
15.01: 35
* оформить ЗС ручной
* влить ЗС ручной
* включить запись
* добавить кнопку копирования в буфер
* сделать копирование результата в буфер руками
https://stackoverflow.com/questions/19253786/how-to-copy-text-to-clipboard-in-android
14.01: 40
* оформить ветку, но не сливать её
https://github.com/kornerr/git-budget/pull/2
* сделать руками вставку в буфер
тоже под запись
замерить время
вышло 40 минут
а с cursor AI было 40 минут второй части + сколько в первой
т.е. никак не быстрее
как минимум то же время
но в голове меньше мыслей было
а по факту было больше review
и меньше внимательности
ибо я пропустил в review, что нужно было didClickPaste вместо pasteSpent
14.01: 40
* исправить работу с inputSpent, pastedSpent
надо ввести shouldResetSpent
spent на основе inputSpent и pastedSpent
после чего убрать из shouldResetResult весь блок if с вызовом budgetCtrl()
ибо внутри should нельзя вызывать эффекты вроде budgetCtrl()
* исправить задание значения для vm.inputSpent из spent при отличии
cursor неверно выбрал поле и не так написал эффект
* проверить отображение pasted spent в поле ввода
и что нет цикла после задания inputSpent руками
цикла нет
отображение есть
вставка из буфера произошла успешно
13.01: 40
* оформить ЗС
https://github.com/kornerr/git-budget/pull/1
* влить ЗС
перед Cursor AI
обязательно
иначе потом ничего не видно будет по комитам
* сделать вставку из буфера
13.01: 45
* сделать budgetReportedWeekday()
использовать LocalDate
оно больше подходит, чем Calendar
https://stackoverflow.com/questions/38739983/calendar-set-day-of-week-not-correct
* передавать значения по умолчанию
* сделать подсчёт строки результата
* (практически) сравнять функциональность W и A
12.01: 45
* добавить Scaffold
как-будто из-за его отсутствия может быть чёрная штука вверху при выборе поля
не использовать modifier из Scaffold
использовал - помогло
* сделать два поля ввода
* сделать budgetReportedDate()
12.01: 40
* переименовать Playground -> Budget
* сверстать интерфейс с двумя полями ввода и одним выводом
11.01: 35
* влить ветку budget на сайте
чтобы можно было добавить cv/ files
* запустить заготовку в Android Studio
запустилось
* создать util/do-tmux
* вернуть и перегенерить cld/*
11.01: 40
* обработать файлы первого уровня
* обработать уровень app
* обработать уровень app/src/main
* обработать уровень app/src/main/res
* обработать уровень app/src/main/kotlin
10.01: 25
* найти репозиторий старого git budget
https://github.com/kornerr/git-budget
его и возьму
* найти эталон по UI для бюджета
вот этот сайт плюс-минус на мой уровень
https://costtrack.app/
общий список прилложений по бюджетированию
https://t-j.ru/short/all-budget-apps
итог
эталона нет
почти все приложения уродливые
так что я могу делать свою уродливую версию
а там уже посмотрим
09.01: 35
* определять weekday / weekend
* считать перерасход
* считать 'осталось Р/д' для будней
09.01: 30
* обдумать создание отдельного приложения
уже без JS
либо забить на буфер пока что
но потом всё равно хочется его иметь
либо всё-таки приложение
тогда и гит чисто для бюджета будет смотреться логичнее
да и просто как пример приложения-доказательства выглядит лучше
создать надо, но в следующей итерации
прямо сейчас мне полезнее подсчёт, а не форма
итог:
потом -да, сейчас - нет
* убрать pre
кнопки буфера можно оставить, они ведь в браузере работают
* считать целевой утренний баланс
08.01: 45
* изучить отсутствие вставки из буфера в WebView
Uncaught (in promise) NotAllowedError: Failed to execute 'readText' on 'Clipboard': Read permission denied.
после ввода WebCC ничего не изменилось
onPermissionRequest не вызывается
короче, это прям проблема на WebView
так что аналог электрона - это прям сильно упорото будет
в JS стопицот вещей иначе работают
их тупо невозможно поддержать
гораздо проще КМП
08.01: 45
* добавить кнопку быстрой вставки из буфера в поле ввода
* добавить кнопку быстрого копирования результата
* сделать вставку из буфера
07.01: 15
* исправить форматирование даты 3.1 -> 03.01
* учитывать отрицательный баланс