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

1
.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
.html

View File

@@ -1,216 +0,0 @@
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
* учитывать отрицательный баланс

93
budget/2026-01_article.md Normal file
View File

@@ -0,0 +1,93 @@
Title: Что нам стоит на КМП построить?
URL: https://habr.com/ru/articles/989286/
Может ли Kotlin Multiplatform сократить трудозатраты при разработке одного продукта под несколько платформ? Мои вычисления говорят, что да, на 21%. Покажу это на примере своего хобби-проекта GitBudget для Android + iOS.
# Текущее положение дел
Одним из популярных способов разработки под несколько платформ является схема «одна платформа - одна команда разработки». Например, взглянем на известный мессенджер, заточенный под парковки. Некоторое время назад я словил следующую багу исчезновения сообщений:
<cut/>
<iframe src="https://kornerr.ru/vid/max-msg-disappear_2026-01-28.mp4"></iframe>
Как следует из видео, в ходе переписки с GigaChat у меня пропадали сообщения: на Android бага проявилась лишь раз (4-я секунда видеозаписи), на Web бага повторялась стабильно. Разное поведение на разных платформах свидетельствует о том, что продукт под разные платформы делают разные команды разработки. У каждой команды свой язык программирования, своя архитектура, свой процесс code review, свой уникальный набор порождаемых багов, своя команда тестирования, свой ФОТ и т.д..
Таким образом, чем больше мы дублируем в коде, тем больше мы вынуждены дублировать организационно. КМП может помочь сократить дублирование части кода, но, конечно, не полностью, а лишь на определённый процент. Каков этот процент? Посчитаем на примере моего хобби-проекта GitBudget.
# Обзор GitBudget
GitBudget - это крошечный хобби-проект для упрощения ведения собственных трат. На текущий момент нет истории трат, поддержки Git и прочего запланированного. Тем не менее, я пользуюсь этим приложением не первый месяц для упрощения ежедневного подсчёта двух важных для меня цифр:
1. Перерасход: Насколько на текущий день траты превышают план (бюджет)
2. Осталось ₽/д: Сколько можно потратить сегодня и в последующие дни текущей недели средств, чтобы не превысить недельный план (бюджет)
Углубляться в формулу и в архитектуру сейчас не буду, т.к. они не предмет данной статьи. Пытливый читатель всё это найдёт сам [на GitHub](https://github.com/kornerr/git-budget).
Ознакомимся с внешним видом приложения на Android и iOS:
![Android, iOS](https://habrastorage.org/webt/e2/bz/f5/e2bzf5lblg0xsydakc88zb5a_hu.jpeg)
Никакой фантастики в UI/UX нет, все элементы интерфейса стандартные (и даже не везде выровненные). Использование приложения на текущий момент сводится к трём действиям пользователя:
1. Вставить из буфера обмена траты за вчера (Spent)
2. Вставить из буфера обмена остаток баланса на вчерашний день (Morning balance)
3. Скопировать итоговый расчёт в буфер обмена (Result)
# Трудозатраты на разработку
Для удобства подсчёта условимся о разделении всего кода приложения на три группы:
| № | Группа | Пример | Файлы Android | Файлы iOS |
| --- | --- | --- | --- | --- |
| 1 | UI | Jetpack Compose, SwiftUI | MainActivity.kt, VM.kt | AppView.swift, VM.swift |
| 2 | Платформа | ClipboardManager, UIPasteboard | budget.kt, main.kt, other-android.kt, registerOneliners.kt | budget.swift, cld-ios.swift, other-ios.swift |
| 3 | Логика | budgetShouldResetMorningBalance | budgetFun.kt, entities.yml | budgetFun.kt, entities.yml |
КМП в GitBudget я использую лишь для логики, а UI и платформенный код нативные. Почему так? Потому что логика полностью под моим контролем, она обновляется по моему усмотрению. С UI и платформенным кодом ситуация иная - это собственность корпораций Apple и Google, они задают правила игры и обновляют UI с платформой по своему усмотрению (например, придумывают [Liquid Glass](https://habr.com/ru/articles/956116/), от которого не увернуться).
Считать будем два объективных показателя - количество строк кода и время, затраченное на реализацию какой-либо функциональности. На каждый из этих показателей посмотрим в разрезе вышеобозначенных трёх групп - UI, платформа, логика - и двух платформ - Android, iOS.
## Первый показатель: Количество строк кода
| № | Платформа | Всего | UI | Платформа | Логика |
| --- | --- | --- | --- | --- | --- |
| 1 | Android | 692 | 160 (23%) | 221 (32%) | 311 (45%) |
| 2 | iOS | 540 | 90 (16%) | 139 (26%) | 311 (58%) |
**Вывод-1**: 311 строк логики для iOS я **не писал повторно** благодаря КМП, это **58%** всего кода iOS.
**Вывод-2**: 311 ненаписанных повторно строк кода для iOS с точки зрения обеих платформ (692 + 540 = 1232) означают, что **25%** кода всего проекта я не писал повторно.
## Второй показатель: Время реализации функциональности
Под запись я добавил кнопку `Paste` для поля ввода `Morning balance` как для Android:
<iframe src="https://kornerr.ru/vid/git-budget-balance-android_800_2026-01-28.mp4"></iframe>
Так и для iOS:
<iframe src="https://kornerr.ru/vid/git-budget-balance-ios_800_2026-01-28.mp4"></iframe>
В итоге получились такие цифры:
| № | Платформа | Тип реализация | Особенности реализации | Время |
| --- | --- | --- | --- | --- |
| 1 | Android | Первичная | Создаём новую функциональность, которой не было, собираем почти все грабли | 17:34 |
| 2 | iOS | Вторичная | Подключаем готовую логику, дописываем лишь UI, граблей практически нет | 07:33 (43%) |
**Вывод-3**: Повторение функциональности на iOS с готовой логикой заняло на **57% меньше времени**, т.е. произошло **в 2 раза быстрее**
**Вывод-4**: Если принять, что без КМП функциональность на каждой из двух платформ делали бы в сумме 17:34 * 2 = 35:08 минут, то сэкономленные 10 минут при повторении функциональности для iOS означают, что для всего проекта я **сэкономил 21% времени**.
# Выводы
Итак, экономия с КМП в цифрах выглядит так:
1. Количество строк для iOS снизилось на **58%**
2. Суммарно количество строк кода по всему проекту снизилось на **25%**
3. Время, необходимое на повторение функциональности для iOS, снизилось на **57%**
4. Суммарно затраченное время по всему проекту на реализацию функциональности снизилось на **21%** (эту цифру я использовал в самом начале статьи)
# Вопросы читателю
1. Суммарная экономия в 21% по времени проекта - это много или мало?
2. Окупает ли экономия в 21% явно не однодневный переход команд на новый процесс разработки?
3. Насколько важен синхронный выпуск функциональности на обе платформы, причём работающей одинаково на каждой платформе?

22
budget/2026-01_email.md Normal file
View File

@@ -0,0 +1,22 @@
Title: КМП как альтернатива сокращению
Кому: Зуев Игорь, Корнюшин Пётр, Сухов Сергей, Терентьев Евгений, Петров Виктор
Привет, коллеги,
завтра состоится серия созвонов по поводу сокращения троих человек из
команды iOS Connect.
У меня есть встречное предложение по повышению эффективности
команд разработки с помощью Kotlin Multiplatform. Предлагаю перевести
сокращаемых троих человек в новую команду КМП, которую я готов возглавить
без отрыва от руководства командой iOS Connect.
КМП может сэкономить около 21% времени разработки, подробно я это расписал
в статье на Хабре: https://habr.com/ru/articles/989286/
Если предложение заинтересовало, буду рад обсудить детали данной спецоперации.
С уважением,
Михаил.

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

View File

@@ -1,3 +1,7 @@
ознакомитья с другой статьёй про AI
https://kean.blog/post/experiencing-claude-code
возможно, толковая
плюсы: плюсы:
хорошо описывает стуртуру кода и шаблоны используемые хорошо описывает стуртуру кода и шаблоны используемые
хоть сам Cursor и не умеет им следовать хоть сам Cursor и не умеет им следовать
@@ -7,7 +11,9 @@
а в самом начале их и использовать не будешь, т.к. вроде и не нужны а в самом начале их и использовать не будешь, т.к. вроде и не нужны
но Cursor их проставил, т.к. они могут понадобиться но Cursor их проставил, т.к. они могут понадобиться
можно тренироваться делать review и оценивать эффективность своих советов по правкам можно тренироваться делать review и оценивать эффективность своих советов по правкам
писать действительно можно, но динамика не положительная писать действительно можно, но скорее в момент изучения
когда хорошо представляешь себе результат
но плохо представляешь себе код
минусы: минусы:
часто ошибается и пишет код не туда, т.е. нарушает архитектуру часто ошибается и пишет код не туда, т.е. нарушает архитектуру
@@ -39,7 +45,20 @@
т.к. одна строка и сравнение на самом деле не нужно т.к. одна строка и сравнение на самом деле не нужно
цикла ведь нет цикла ведь нет
а это можно увидеть и почувствовать лишь при записи руками а это можно увидеть и почувствовать лишь при записи руками
при поиске, как сделать какую-то штуку ты НЕ наткнёшься на интересное
например, вот я искал про Binding
https://www.hackingwithswift.com/quick-start/swiftui/how-to-create-custom-bindings
а там ссылка была сюда
https://www.revenuecat.com/blog/engineering/apple-retention-messaging-api/
из этой ссылки я уже узнал, что в Apple есть стандарт на ответ от бэка
700мс
теперь я могу трясти с команды бэка ответы до 700мс, ибо вот так делает Apple
если бы мне ИИ написал решение, я бы всего этого не получил
и остался бы менее просвещённым
ИИ-чат бот в FF
Gemini
Недоступен in your country, stay tuned!, лол
видео: видео:
~/cursorai ~/cursorai
@@ -48,7 +67,12 @@
реклама реклама
фотки с Грокс от 14.01 фотки с Грокс от 14.01
реклама GigaIDE с 25% приростом производительности реклама GigaIDE с 25% приростом производительности
наливатор коктейлей: https://habr.com/ru/companies/yandex/articles/985556
routerai: якобы x10 скорость прототипирования
ох, прям аккуратно вставили слово "прототипирования"
ответы по теме AI
1. https://www.linkedin.com/feed/update/urn:li:activity:7426127984128036864?commentUrn=urn%3Ali%3Acomment%3A%28activity%3A7426127984128036864%2C7427564907996278786%29&dashCommentUrn=urn%3Ali%3Afsd_comment%3A%287427564907996278786%2Curn%3Ali%3Aactivity%3A7426127984128036864%29
Философские вопросы Философские вопросы
Если всё так радужно, то почему преподаватели курсов волшебного ИИ Если всё так радужно, то почему преподаватели курсов волшебного ИИ
@@ -72,6 +96,14 @@
за 5 минут напишет ИИ? Или за 5 минут не напишет? А за 50 минут разве за 5 минут напишет ИИ? Или за 5 минут не напишет? А за 50 минут разве
тоже не напишет? А за 50 дней тоже не напишет? Вопросы, вопросы... тоже не напишет? А за 50 дней тоже не напишет? Вопросы, вопросы...
лиды:
из статьи про KMP сделать ссыку на AI
из статьи про AI сделать ссылка на KMP
статья KMP
PS: Если вы в своей компании хотите внедрить KMP для повышения производительности, то пишите в личку ;)
заметки с телефона заметки с телефона
[  ] ИИ: Восхваление: https://habr.com/ru/companies/redmadrobot/articles/978112/ [  ] ИИ: Восхваление: https://habr.com/ru/companies/redmadrobot/articles/978112/
[  ] Вопрос по ИИ: иногда пишет не тот код, а ктоттогда этот ИИ попрпвит, если разработчик сам не знает, насколько сгенеренный код соответствует архитектуре? [  ] Вопрос по ИИ: иногда пишет не тот код, а ктоттогда этот ИИ попрпвит, если разработчик сам не знает, насколько сгенеренный код соответствует архитектуре?

View File

@@ -1,21 +1,82 @@
НАДО: НАДО:
* исправить weekday, чтобы reportedWeekday был 7, а не 1 * создать generator
в iOS monday == 2 тут будет лишь ver-nodejs
* добавить registerCallback для отладки тогда, возможно, даже и смысла в ver-nodejs нет
* заполнить setupShoulds да, смысла нет, это слишком важный инструмент, чтобы иметь несколько вариаций
* заполнить setupEffects * создать helloworld/
* подключить функциональность из gb в iOS тут уже будут ver-nodejs, ver-android, ver-ios, ver-macos-x64/arm64, ver-linux-x64, ver-windows-x64
* исправить -0%
* сделать Swift extension для возможности вызвать budgetCtrl().set(x, y) без label далее сначала нужно перевести на nodejs
затем уже наварганить генерацию обёрток для C++
и функций в KT для получения готовых экземпляров всего
сделать геренацию полей F по аналогии со спецструктурой YML
т.е. генерить спецструктуру со статическими полями?
это после C++ генерации станет ясно, как лучше оформить
* отдельно сделать версию CLDController для cinterop
ибо по умолчанию не компилится не для C++
либо это отдельный файл должен быть в CLD
формат надо обдумать
* оформить ЗС * оформить ЗС
https://github.com/kornerr/git-budget/pull/8 https://github.com/OGStudio/kotlin-dialect/pull/13
* влить ЗС
* обновить ссылку на git clone в проекте KOM для подтягивания новой версии CLDController
теперь это KDController
* проверить ответ на YouTrack
в итоге я могу туда дать ссылку на свой пример
* переключиться на CLD
можно сделать пока перевод на NodeJS
заодно подумать недельку о NodeGui
* перейти на NodeGui?
или найти движок внутри C++/JS?
* изучить QML + JS
можно ли загрузить код на Kotlin?
* передать в QML budgetCtrl
чтобы в QML вызывать что-то вроде budgetCtrl.set("key", value)
хотя не факт, что можно Any передать из QML
* оформить ЗС
https://github.com/kornerr/git-budget/pull/16
* влить ЗС * влить ЗС
* CLD: * после исправления CLD:
обновить до 1.3.0 удалить iso установочный
влить подвисший ЗС
* поделитья статьёй по KMP-1 с Гришей
* исправить -0%
* Android
* iOS
* ответить на вопросы Олега и Ильи к статье
ПСКОВ
добавить recent files
где-нибудь вместо File: /path
или сделать это выпадашкой
прям надо переключаться между файлами последними
преимущество off-line
никакой рекламы и отвлечения от записи мысли
просто запиши и не будь отвлечён
в отличие от записи мысли в готовящейся статье на хабре
там реклама отвлечёт
потеряешь время
* iOS:
проверить настройку отключения вопроса вставки из буфера
Настройки
Приложение
Вставка из других приложений
* оформить ЗСы с ИИ * оформить ЗСы с ИИ
https://github.com/kornerr/git-budget/pull/2 https://github.com/kornerr/git-budget/pull/2
@@ -23,7 +84,9 @@
добавить ссылки на статью добавить ссылки на статью
добавить ссылки на видеозаписи добавить ссылки на видеозаписи
* записать видео процесса переноса с Android на iOS
копируем код как есть
подправяем синтаксис и вызовы API
* восстановить страницу kornerr.ru/git-budget * восстановить страницу kornerr.ru/git-budget
её же на своём сайте добавить в примеры её же на своём сайте добавить в примеры
@@ -66,7 +129,8 @@
тогда всё лучше сходится тогда всё лучше сходится
* тысячи форматировать доппробелами * тысячи форматировать доппробелами
* изучить планировщики задач 2025 (топ для iPhone)
https://dzen.ru/a/ZshWUWbMiXuc-VFd
* сделать вставку из буфера * сделать вставку из буфера
* сделать кнопку копирования результата * сделать кнопку копирования результата
показывать уведомление о факте копирования показывать уведомление о факте копирования

View File

@@ -1,60 +0,0 @@
11.01: 30
* пройти тест по Инглишу на HH
попробовал C1
не удалось
повторить 11 февраля
* прочитать MKCV-Brief_2019-11
чтобы сопоставить с полной версией
там лишь примеры и технологии
без лишних описаний, самое то
* прочитать МКР_2019-11
* прочитать МКР_2021-03
* создать заготовку нового МКР 2026-03
https://docs.google.com/document/d/1DKlY6ObDF278sRKj138eget5NwQek-O7irH0_mlFeXI/edit?tab=t.0
11.01: 35
* написать первичный список нужных полномочий
* прочитать MKCV_2019-10
10.01: 60
* изучить потенциал Cursor AI
может ли оно заменить слабого программиста
т.е. того, кому надо максимально описать задачу, чтобы получить нужный результат
да, слабого может, но надо дотошно описывать желаемые изменения
* расписать первичный план КМП грубо
дублирование на Android
дублирование на iOS
сделать ГТО по разработке для Android: Compose (Input, Text, Button, Row, Column)
сделать ГТО по CSE
сделать ГТО по КМП
заготовление списка контактов на Web
заготовление информации о контакте на Web
дублирование на Android
дублирование на iOS
комбинация для iOS Ucim
комбинация для Android Ucim
* составить план по КОТу для первого квартала
07.01: 10
* расписать R, T цели по SMART-2
06.01: 110
* расписать цель по SMART-1
Научиться команде за два квартала выдавать фичи сразу и для iOS, и для Android
Specific: не указано
Measurable: не указано
Achievable: не указано
Relevant: не указано
Time-bound: два квартала
* расписать S и M цель по SMART-2
Изменить процесс разработки в команде на КМП так, чтобы в 2026-м году выдавать фичи сразу и для iOS, и для Android
* расписать A цели по SMART-2
05.01: 25
* подготовить и отправить КП-3: Мария Сарафанова

View File

@@ -0,0 +1,38 @@
Title: Первичное собеседование
Company: Исходный код (mos.ru, Моя Москва)
Date: 2026-02-12
URL: https://zoom.us/j/92528151011?pwd=CEmahrxZya91kYz6F0bIcQOECrntPc.1
В какую команду ищете руководителя?
Надо командами разработки
√ Какие команды есть?
25 человек - это все-все
11 всего на android, ios, web команды
SRUM
спринты 3 недели
daily 11:30 ежедневно
техрадар: обмен знаниями
performance review: раз в полгода
матрица компетенций
360
раз в год
√ Сколько в командах человек?
√ Есть ли отдел аналитики?
√ Есть ли отдел тестирования?
√ ДМС со стоматологией
√ Офис: ст. м. Пролетарская
√ Время работы: 10:00-19:00
* Как выглядит процесс от постановки задачи до приёмки?
* Какая ситуация по срокам?
* Какие сейчас есть проблемы?
* Какие цели надо достичь мне как руководителю?
* По ГПХ работаете?
Потенциальные вопросы ко мне
как предотвратить выгорание команд?
Прочитать про
матрицу компетенции
360
сигнальная таблица

195
business/2026-Q1.md Normal file
View File

@@ -0,0 +1,195 @@
14.02: 40
* ответить Еремееву и Lycett на LinkedIn
* спросить у Анастасии (Исходный код), что именно привело к отказу
чтобы, как она выразилась на созвоне, этот созвон был не зря
и чтобы я тоже понял, что надо поменять на своей стороне
13.02: 25
* освежить часть вопросов по iOS
остановился: 18. 🟢 В чем разница между if let и guard let?
12.02: 15
* проверить отклики на почте и в HH
11.02: 35
* обновить резюме на LinkedIn
10.02: 45
* частично обновить резюме на LinkedIn
09.02: 20
* проверить почту и отклик
* пн: откликнуться
исходный код
https://hh.ru/vacancy/129040090
отметить в таблице
07.02: 30
* завершить Английскую версию резюме
06.02: 40
* составить таблицу по собесам
уже двоим отправил
надо упростить отслеживание
https://docs.google.com/spreadsheets/d/17nzM6tuQFQ-t1nAEQGn4UBcj5yLa9F5vzcmmF-UdjAM/edit?gid=311411124#gid=311411124
* перевести половину резюме на Ангийский
05.02: 20
* добавить Redux-like arch в CV
* почта
* откликнуться на ООО Корпу
https://hh.ru/vacancy/129305916?hhtmFrom=vacancy_search_list
откликнулся
04.02: 30
* перепроверить резюме на HH
* проверить почту GMail
чтобы там не было лишнего
отписаться
03.02: 40
* перенести в HH опыт разработчика-2
* перенести в HH опыт руководителя-1
* перенести в HH опыт разработчика-1
02.02: 30
* перенести в HH опыт руководителя-2
01.02: 15
* написать пункт про ускорение на основе данных таблицы?
с двузначных на однозначное по превышению сроков выпуска перешли
лучше про создание команды
* записать усиление команды в момент шторма
31.01: 35
* изучить правила ПЭ
* бегло ознакомиться с ПЭ: Заработок
* бегло посмотреть ПЭ: Нетворкинг: 10%
остановился на https://t.me/c/2431091628/48/1985
это около 30/300, 10%
30.01: 30
* досчитать цифры по Android, iOS за 2020
29.01: 30
* сократить техники
* описать технологии
* заполнить заготовками интересное
* досчитать цифры по Android, iOS за 2021
27.01: 25
* описать возврат к управлению
сделать самой большой секцией
это текущее
* описать техники
26.01: 35
* описать возврат к разработке
25.01: 40
* дописать до первого руководства включительно
24.01: 30
* vps: влить ветку 25K4
* vps: создать ветку 26k1
* vps: продублировать файлы cv из github на сайт
в www/cv
а потом в publish.prod сделать symlink
* сделал новую заготовку дя резюме
23.01: 40
* заполнить ios за 2024, 2023
* заполнить android за 2024, 2023
22.01: 30
* заполнить desktop 25
https://wiki.iva.ru/spaces/IVCS/pages/165708340/IVCS+Desktop.+Version+25.0
* заполнить desktop за 2024, 2023
21.01: 30
* составить таблицу дат выпусков по фронтам за 2025-й
сделал android, ios, web
11.01: 30
* пройти тест по Инглишу на HH
попробовал C1
не удалось
повторить 11 февраля
* прочитать MKCV-Brief_2019-11
чтобы сопоставить с полной версией
там лишь примеры и технологии
без лишних описаний, самое то
* прочитать МКР_2019-11
* прочитать МКР_2021-03
* создать заготовку нового МКР 2026-03
https://docs.google.com/document/d/1DKlY6ObDF278sRKj138eget5NwQek-O7irH0_mlFeXI/edit?tab=t.0
11.01: 35
* написать первичный список нужных полномочий
* прочитать MKCV_2019-10
10.01: 60
* изучить потенциал Cursor AI
может ли оно заменить слабого программиста
т.е. того, кому надо максимально описать задачу, чтобы получить нужный результат
да, слабого может, но надо дотошно описывать желаемые изменения
* расписать первичный план КМП грубо
дублирование на Android
дублирование на iOS
сделать ГТО по разработке для Android: Compose (Input, Text, Button, Row, Column)
сделать ГТО по CSE
сделать ГТО по КМП
заготовление списка контактов на Web
заготовление информации о контакте на Web
дублирование на Android
дублирование на iOS
комбинация для iOS Ucim
комбинация для Android Ucim
* составить план по КОТу для первого квартала
07.01: 10
* расписать R, T цели по SMART-2
06.01: 110
* расписать цель по SMART-1
Научиться команде за два квартала выдавать фичи сразу и для iOS, и для Android
Specific: не указано
Measurable: не указано
Achievable: не указано
Relevant: не указано
Time-bound: два квартала
* расписать S и M цель по SMART-2
Изменить процесс разработки в команде на КМП так, чтобы в 2026-м году выдавать фичи сразу и для iOS, и для Android
* расписать A цели по SMART-2
05.01: 25
* подготовить и отправить КП-3: Мария Сарафанова

View File

@@ -1,3 +1,12 @@
Простая экономика
20-е марта
about:config
dom.event.clipboardevents.enabled
* Могу придумывать систему * Могу придумывать систему
Пример: задание оценить способность Cursor AI ускорить разработку Пример: задание оценить способность Cursor AI ускорить разработку

View File

@@ -1,24 +1,76 @@
НАДО: НАДО:
* продублировать файлы cv из github на сайт
* переиначить текущую заготовку про прошлое
схлопнуть в секции
управление (ещё нет, надо написать)
разработка
управление
разработка
* освежить SCRUM * на LinkedIn ответить, что мне интереснее управление командой
https://habr.com/ru/articles/825354/ √ Сергею Еремееву
√ Robert Lycett
Anastasiya Sundeeva
* составить таблицу дат выпусков по фронтам за 2025-й * написать копию статьи про КМП на English в LinkedIn
чтобы понять, на каком мы месте были сделать на неё ссылку с хабра для тех, кому нужен English
* составить таблицу дат выпусков за 2024-й сделать из статьи LinkedIn ссылку на статью на Хабре
* составить таблицу дат выпусков за 2023-й? из неё сделать ссылку на ТГ канал @kotlindialect
* написать Леониду Слепхину (LinkedIn)
после публикации статьи KMP на Английском в LinkedIn
* освежить крупными мазками с вопросами-ответами по iOS
https://github.com/vyachesIavskiy/iOS-Interview-Questions
продолжить: 18. 🟢 В чем разница между if let и guard let?
после 11 февраля:
повторить тест по Инглишу на C1
* ознакомиться отдельно со structured concurrency
actor
Sendable
найти статью исчерпывающую
* ознакомиться с
Big-O notation
как оптимизировать время компиляции программы
как оптимизировать время запуска программы
* проверить отклики на почте и в HH
* перепроверить задание от Сани Некрасова от 2020-го?
уже нет смысла
я ж не прогером хочу быть
* ответить Сане на его публикацию об ИИ своей
https://www.linkedin.com/posts/aleksandr-nekrasov_2025-key-takeaways-ai-still-cant-reliably-activity-7425753210319036416-u2sn?utm_source=share&utm_medium=member_desktop&rcm=ACoAAAdqeucBN55Ve2Lq5eMSZiIkc_pDn270344
* спросить у Сани о вакансиях development team lead
* отклинуться
sber user
https://hh.ru/vacancy/130219025?hhtmFromLabel=suitable_vacancies&hhtmFrom=negotiation_list
* записаться на семинар Liquid Glass
https://developer.apple.com/events/view/QGV7T9L3L8/dashboard
* посмотреть ПЭ: Нетворкинг
продолжить c https://t.me/c/2431091628/48/1985
* подготовить текст о себе в ПЭ: Нетворкинг
* написать текст для потенцильного техсобеса, почему нет особого смысла, почему вопросы технические имеют мало смысла
предложить определиться здесь, подходим ли мы друг другу
для этого надо немного скорректировать формат собеса
что скажешь?
прежде всего факты
убрал созвоны daily - ничего не ухудшилось
убрал обязательное review - тоже
но это сильно радикально, только в крайнем случае рассказывать
цель не в том, чтобы никого не пущать
цель в том, чтобы сделать работу эффективнее
а для надо и пущать, и быть гибче
не отвергать по своему мнению,
а делать пилотные проекте и принимать решение лишь с цифрами в руках
привести пример с представителями гибдд
* составить CV * составить CV
выкладки по пользе от KMP в цифрах не писать выкладки по пользе от KMP в цифрах не писать
@@ -26,9 +78,21 @@
сначала не публичить своё резюме сначала не публичить своё резюме
попробовать пару собесов по своему таймингу попробовать пару собесов по своему таймингу
перешёл на Android для понимания среды перешёл на Android для понимания среды
добавить ссылки на 2 статьи хабра (будущие)
пример работы с ИИ с аналитикой
пример KMP с аналитикой
11 февраля:
повторить тест по Инглишу на C1 * освежить SCRUM
https://habr.com/ru/articles/825354/
* освежить знания про архитектуру
см личку в ТГ
has_a, is_a
* дополнить таблицу дат выпусков по фронтам за 2025-й
* заполнить web за 2024, 2023
* заполнить ios, desktop за 2022
* составить план по Бюджету и ПСКОВу для первого квартала * составить план по Бюджету и ПСКОВу для первого квартала
* составить план по Делу для первого квартала * составить план по Делу для первого квартала

View File

@@ -19,4 +19,23 @@
После конкретного вопроса про CLD исправися После конкретного вопроса про CLD исправися
Не смог найти ответ на вопрос "How to run the project" Не смог найти ответ на вопрос "How to run the project"
Но смог на "How to launch PSKOV" Но смог на "How to launch PSKOV"
Психологически не ты сам пишешь код, а машина
хотя по факту времени тратишь столько же
т.е. выигрыша по времени нет
а проигрышь по ownership есть
ownership очень важно для собственнго развития
чтобы не быть арендатором лишь
Скептицизм
> Configure project :app
w: file:///Volumes/MOE/p/kom/ver-android/app/build.gradle.kts:24:9: 'jvmTarget: String' is deprecated. Please migrate to the compilerOptions DSL. More details are here: https://kotl.in/u1r8ln
Если все умеют в суперумный ИИ, то чего же он не может такую простую ошибку исправить?
Философия
ИИ - это проекция собственных знаний и ошибок
ИИ - это просто классный автомобиль, не более, он не знает, не хочет и ему не нужно
никуда ехать без водителя
это не замена человека

406
kmp/2026-Q1.md Normal file
View File

@@ -0,0 +1,406 @@
https://jira.iva.ru/browse/VCSMOB-13473
[KMP] Отображать аватарки
12.02: 155
* изучить про AsyncImage
https://swiftwithmajid.com/2021/07/07/mastering-asyncimage-in-swiftui/
нет возможности задать заголовки HTTP
хотя я ведь могу для всех сессию задать!!
нет, в shared URLSession нет возможности настройки
возможно, это намеренно
* изучить Kingfisher вместо AsyncImage
https://stackoverflow.com/a/79837058/3404710
kingfisher может конфликтовать
попробую сначала Nuke
он очеть похож на то, что можно делать на Android
* изучить библиотеку для отображения картинок в One
Nuke
вроде есть возможность задать заголовки
* проверить текущее состояние приложений
заметил лишь добавление вёрстки экрана информации о контакте на Android
* проверить изменения в ava* с моего влития
onPainterLoaded
спросил у Дениса, зачем нам это надо
видимо, опять какая-то неясная экономия и оптимизация
* добавить зависимость Nuke
* отображать квадратные изображения в iOS
* привести изображение к круглому виду
* завязать на состояние загрузки
* починить расширение изображения
11.02: 105
* отобразить заготовки аватарок в iOS
* отобразить заглушки в iOS
* вынести contUI.swift
после подлития main
ибо сильно крупный шаг
* оформить ЗС
https://git.hi-tech.org/ivasdk/kom/-/merge_requests/37
* сообщить о ЗС
Сливаю ЗС об отображении заглушек аватарок на iOS: https://git.hi-tech.org/ivasdk/kom/-/merge_requests/37
√ 583, main, >=2
* влить ЗС
* записать в таблицу
10.02: 190
* переиспользовать ЗС
https://git.hi-tech.org/ivasdk/kom/-/merge_requests/27
* ввести mutableState для ав
чтобы из VM получать флаг для отображения заглушки в нужный момент
avaShouldResetPlaceholderVisibility
* отображать заглушку
лишь до успешной загрузки
лишь на неудачную загрузку изображения
* сделать цветовую заглушку по известным функциям
* сделать инициалы
* починить отображение авы в списке чатов
нужна Session? ибо 403 возвращает сервер
поправил
* проверить iOS
* оформить ЗС
https://git.hi-tech.org/ivasdk/kom/-/merge_requests/27
* сообщить о ЗС
Сливаю ЗС об отображении заглушек аватарок на Android: https://git.hi-tech.org/ivasdk/kom/-/merge_requests/27
√ 262, main, >=2
* влить ЗС
* добавить в таблицу
09.02: 150
* починить загрузку аватарок после изменений Ильи
что-то поменялось сильно
теперь нихера нет контактов именно в моей сборке
у Ильи есть
надо сделать заново на основе последних изменений
это как-будто дешевле всего
т.е. нужен новый ЗС
этот позже переиспользую
* повторить частичный накат
√ util/other
√ README
√ ava.kt
√ avaUI.kt
√ const.kt
√ other.kt
√ gradle
~ entities.yml
* восстановить иконку в списке контактов
* проверить работопособность в iOS
* оформить ЗС
√ описать изменения gen-entities
√ упомянуть о рассмотрении Glide
√ упомнять об avaUI
https://git.hi-tech.org/ivasdk/kom/-/merge_requests/16
* сообщить о ЗС
Сливаю ЗС об отображении аватарок в списке контактов на Android: https://git.hi-tech.org/ivasdk/kom/-/merge_requests/16
√ 219, main, >=2
* влить ЗС
* отметить ЗС в таблице
* сообщить Денису о починке cld translator и необходимости ручных изменений для этого
* восстановить иконку в инфе о выбранном контакте
* вынести contUI.kt
* подлить main
* оформить ЗС
~ сообщить Олегу убрать шуды на каждое поле контакта
https://git.hi-tech.org/ivasdk/kom/-/merge_requests/28
* сообщить о ЗС
Сливаю ЗС об отображении аватарки в инфе о контакте на Android: https://git.hi-tech.org/ivasdk/kom/-/merge_requests/28
√ 278, main, >=2
* влить ЗС
* отметить ЗС в таблице
07.02: 90
* ввести в VM contInfoItem
* добавить аву в инфу о контакте
* добавить аву в список чатов
06.02: 190
* проверить запуск KOM на Xcode 13 на 10.12.2.184
kotlin 2.1.21
json 1.8.0
xcodegen 2.35.0
не удалось в Package.swift сослаться на zip xcframework
хотя вроде как должно было бы работать в Xcode 13
не выгорело: 1.5 часа потратил
* починить CLD tr на Linux
1. надо поменять руками для CLD tr версию java version с 8 на 21
сделать патч по версии java?
да не, пусть руками, это один раз же
в будущем надо переделать translator на nodejs
но это потом
написать в README KOM заметку для CLD в Linux
2. далее sed -i.backup + rm $file.backup
* ознакомиться с примером AvatarLoader + Compose от Дениса
не очень понятно
смущает @OptIn и странная ситуация с API в Glide
итог: попробую Coil
* изучить загрузку картинок в Compose по URL
тут вся суть Session на сервер отправить
без него не будет картинки
Coil выглядит приятнее, чем Glide
хотя по факту работает и так
* добавить зависимость Coil
* отобразить картинку в Compose
https://ivcs.hi-tech.org/services/resource?resourceId=e64bf0bf-442b-4370-894a-8f7f827c7866&width=100
* закруглить изображение
* сделать заглушки-изображения?
это уже можно не мне
хотя у нас же заглушка-текст по ivac!
тогда мне
* заменить ContItem.avaId -> avaURL
* отследить неудачную загрузку авы
onError
* улавливать состояние загрузки
onState
* создать компонент аватарок
05.02: 140
* создать ветку по авам
* изучить Glide и Coil
https://bumptech.github.io/glide/int/compose.html
https://coil-kt.github.io/coil/compose/
* узнать URL запроса в Ucim/Ava
ИГР Shortcuts.loadRI url: 'https://ivcs.hi-tech.org/services/resource?resourceId=e64bf0bf-442b-4370-894a-8f7f827c7866&width=100'
ИГР ImageCS.retrieve url/token: 'Optional(https://ivcs.hi-tech.org/services/resource?resourceId=e64bf0bf-442b-4370-894a-8f7f827c7866&width=100)'/'8ccabf0b-73ed-43c3-add7-969b9c727f05'
* определиться с заголовками
Серёга сказал, что Session нужно отправлять
* скачать Ubuntu 25.10
===
https://jira.iva.ru/browse/VCSMOB-13464
[KMP] Создать заготовку информации о контакте для Android
04.02: 130
* создать ветку
andinf
сделал
* добавить /* 1 */ в if своих шудах в контактах
забыл первоначально
* восстановить упущенные Ильёй поля в
стоп, подлить от Ильи сначала ветку
да, Илья исправил
мне не надо восстанавливать
* улавливать выбор контакта
* отображать экран-заглушку
* возвращаться назад
* переименовать ContactInfo -> Info
* локализовать confInfoTitle
как раз в эффекте contLocalize
* отображать имя выбранного контакта
* оформить ЗС
https://git.hi-tech.org/ivasdk/kom/-/merge_requests/10
* сообщить о ЗС
Сливаю ЗС об отображении заготовки информации о контакте: https://git.hi-tech.org/ivasdk/kom/-/merge_requests/10
√ 163, main, >=2
* влить ЗС
* отметить ЗС в таблице
===
https://jira.iva.ru/browse/VCSMOB-13334
[KMP] Создать заготовку списка контактов
03.02: 270
* создать ветку
paste
* сделать значения по умолчанию для хоста для Android
чтобы достаточно было нажать на кнопки Далее без ввода
делать по аналогии с вводом в GitBudget через Paste
* переименовать DBGFillHostInput -> DBGHost
* продублировать для iOS
надо замутить свой Binding как-будто, чтобы разделить getter и setter
https://www.hackingwithswift.com/quick-start/swiftui/how-to-create-custom-bindings
* оформить ЗС
√ фотки переделать
√ записать видео
https://git.hi-tech.org/ivasdk/kom/-/merge_requests/6
* сообщить о ЗС
Сливаю ЗС об отладочной кнопке заполнения поля ввода хоста: https://git.hi-tech.org/ivasdk/kom/-/merge_requests/6
√ 127, main, >=2
* влить ЗС
* отметить в таблице КЗС
* Илья:
выдать кнопку заполнения username/password
* создать ветку
* разобраться с двойной передачей login из AC в CC
два раза был вызов MainComponent.setupEffects
закомментировал
* сделать запрос контактов
* разобраться с ошибкой запроса контактов
loadURL без установки заголовков ещё
добавить
* разбирать контакты
* отображать заглушки контактов
* отображать список контактов с настоящими именем и почтой
* оформить ЗС
https://git.hi-tech.org/ivasdk/kom/-/merge_requests/8
* сообщить о ЗС
Сливаю ЗС об отображении заготовки списка контактов на Android: https://git.hi-tech.org/ivasdk/kom/-/merge_requests/8
√ 193, main, >=2
* влить ЗС
* отметить в таблице КЗС
02.02: 130
* отображать заглушку списка контактов на Android
* продублировать заглушку списка контактов на iOS
* оформить ЗС
https://git.hi-tech.org/ivasdk/kom/-/merge_requests/5
* сообщить о ЗС
Сливаю ЗС о создании заглушки списка контактов: https://git.hi-tech.org/ivasdk/kom/-/merge_requests/5
√ 473, main, >=2
* влить ЗС
* отметить в таблице КЗС
===
https://jira.iva.ru/browse/VCSMOB-13302
[KMP] Создать заготовку авторизации для iOS
27.01: 170
* создать заготовку экрана логина
* сообщать об ошибке логина/пароля
* добавить Starscream
* добавить websocket на основе Starscream
https://dev.to/fassko/websockets-in-ios-using-swift-276l
* подключиться к WS
* ознакомитья с Task
https://habr.com/ru/articles/762148
* восстановить пинги
тут как раз нужен Task sleep
* A: вынести resetWebSocket в эффекты
* продублировать авторизацию для iOS
* README: отметить авторизацию iOS
* обдумать внутреннюю статью про KOM
хотя внутреннюю статью как-будто публиковать-то и нельзя
ведь на KOM добро не все давали
можно ли рассмотреть этой статьёй основные моменты с тем,
чтоб потом быстрее написать про git-budget?
итог: нет смысла, лучше время на код потратить
* сделать видеозапись
ввести неверный хост
увидим алёрт
ввести верный хост
передём на логин пароль
ввести неверные логин и пароль
увидим алёрт
ввести верные логин и пароль
увидим пустое окно
* подготовить видеодемонстрацию
* оформить ЗС
https://git.hi-tech.org/ivasdk/kom/-/merge_requests/4
* влить ЗС
26.01: 185
* создать заготовку sdk-ios
* сделать заготовку скрипта gen-ios
* создать заготовку ver-ios
* сделать видеодемонстрацию
показать util/gen-ios
* оформить ЗС
https://git.hi-tech.org/ivasdk/kom/-/merge_requests/3
* влить ЗС
* создать заготовку экрана хостов
* придать вид карточки
* добавить тень
* делать запрос
* сообщать об ошибке хоста
* скрывать экранр хоста после успешного ввода
===
https://jira.iva.ru/browse/VCSMOB-13212
[KMP] Создать заготовку авторизации для Android
24.01: 100
* перенести UI авторизации
* перенести VM авторизации
* перенести auth/Fun.kt
* исправить невозможность сделать запрос
вернуть serialization plugin
* перенести авторизацию для Android
* записать видео авторизации
ввести неверный хост
увидим алёрт
ввести верный хост
передём на логин пароль
ввести неверные логин и пароль
увидим алёрт
ввести верные логин и пароль
увидим пустое окно
* подготовить видео с титрами
* оформить ЗС
https://git.hi-tech.org/ivasdk/kom/-/merge_requests/2
добавить видео
* влить ЗС
23.01: 45
* исправить генерацию entities.kt
обновить и пересобрать cld
* копировать CLDController/Context из CLD в Android
* перенести CLD
entities.yml
√ отметить /*@JsExport*/
√ добавить клонирвание translator куда-нибудь в ~/iva-smth
√ сделать запуск translator из ~/iva-smth
√ заменить generate-entities на какой-либо один скрипт в util/
причём его надо будет вызывать всегда для всех платформ
* кратко описать CLD translator в README
* оформить ЗС
https://git.hi-tech.org/ivasdk/kom/-/merge_requests/1
* влить ЗС
22.01: 75
* создать репозиторий KOM
* описать в таблице README готовую функциональность
* генерить entities.kt в корень проекта временно
* создать заготовку Android HW
на основе git-budget
* генерить entities.kt в ver-android
===
https://jira.iva.ru/browse/VCSMOB-13190
[KMP] Описать движение данных в архитектуре CSE
21.01: 180
* создать динамический пример движения данных архитектуры CSE
~/m/p/svg
выдал Ване KaiSD проверить 21.01.26
* от Вани получил следующий отзыв
Выглядит как пошаговый визуализатор исполнения кода,
но при этом разделение на блоки не очень понятно.
И логика движения кружка тоже.
Можно увидеть куда он двигался, но нельзя понять куда он должен двигаться.
Возможно, нужны точки соединения и линии между ними.
20.01: 90
* ознакомитья с SVG
https://www.w3schools.com/graphics/svg_animation.asp
* от руки нарисовать схему с авториацией текущей
слева - контроллер / контекст
справа-вверху - шуды
справа-внизу - эффекты
полоски должны путешествовать ctx -> should -> ctx, effect -> ctx, ctx -> effect
полоски и будут отображать движение данных
* найти редактор SVG
https://freesvgeditor.com/en/svg-editor-online
* набросать пример
~/c/svg(4).svg

View File

76
kmp/now.md Normal file
View File

@@ -0,0 +1,76 @@
13.02: 17:15-18:45 90
* проверить тормоза без использования VM
для начала просто проверить тормоза без Ava.View полностью в ячейках
да, без lazy image то же самое еле заметно подёргивание
* изучить изменения в ava после !34
* подлить main
* сделать видеозапись
* оформить ЗС
https://git.hi-tech.org/ivasdk/kom/-/merge_requests/39
* сообщить о ЗС
Сливаю ЗС по отображению изображений аватарок на iOS: https://git.hi-tech.org/ivasdk/kom/-/merge_requests/39
√ 57, main, >=2
* влить ЗС
* записать в таблицу
* сделать отчёт в чат КМП
√ подготовить видео
√ посчитать количество сэкономленных строк кода
√ ввести скрипт
НАДО:
* подготовить документ с графом связей между сущностями
* оформить ЗС
https://git.hi-tech.org/ivasdk/kom/-/merge_requests/43
тут дока больше
* сообщить о ЗС
* влить ЗС
* таблица
* добавить ссылки на API endpoints рядом с сущностями в YML
* попутно удалить shouldResetInfo и соответствующие поля из ContContext
* ввести <PRE>_ACTIVE_SHOULDS и регистрацию отладки сразу внутри <PRE>Fun.kt
* проверить гипотезу кэширования второй Ava одного запроса
чтобы не было двух запросов одной картинки
* сделать комбинацию на Android
* подготовить шпаргалку по Redux / CSE
* ввести линтер с запретом @State и @Binding вне VM.swift
ввести аналогию для Android
* проверить замену на Glide
именно после полной реализации на Coil
чтобы функционально всё удовлетворяло
в Android Connect ведь Glide
чтобы меньше трения было при добавлении
и без увеличения размера
https://bumptech.github.io/glide/int/compose.html
* улавливать изменения в имени контакта по WS
это важно сделать для задания пути работы с WS
* доработать локализацию до генерации нативных файлов Android
* доработать локализацию до генерации нативных файлов iOS
* добавить ширину авы в параметры Ava()
сейчас в инфе о контакте фотка размытая выходит
но тогда будет загрузка вторая
т.е. при переходе на контакт будет сначала видна заглушка
тут прям не так просто
надо подумать
* продулировать авторизацию на Desktop
для Пети:
* описать архитектуру
* кто за что отвечает
* iOS input 2026-01-27:
переключаться на Return с поля username на password
сейчас не надо, ибо SwiftUI поднимает вьюху в свободное пространство при показе клавы
* iOS input 2026-01-27:
скрывать клавиатуру на Return в поле password
сейчас не надо, ибо SwiftUI поднимает вьюху в свободное пространство при показе клавы