539 lines
25 KiB
Markdown
539 lines
25 KiB
Markdown
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
|
||
* учитывать отрицательный баланс |