From 493863ae5a1130b69cfe0c17f4fcb7a6737fbf56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9C=D0=B8=D1=85=D0=B0=D0=B8=D0=BB=20=D0=9A=D0=B0=D0=BF?= =?UTF-8?q?=D0=B5=D0=BB=D1=8C=D0=BA=D0=BE?= Date: Sun, 15 Feb 2026 06:45:27 +0300 Subject: [PATCH] feb15 --- .gitignore | 1 + budget/2026-01.md | 216 ------- budget/2026-01_article.md | 93 +++ budget/2026-01_email.md | 22 + budget/2026-Q1.md | 539 ++++++++++++++++++ ...article-points.md => ai-article-points.md} | 36 +- budget/now.md | 92 ++- business/2026-01.md | 60 -- ...02-12_Собес-ИсходныйКод.md | 38 ++ business/2026-Q1.md | 195 +++++++ business/cv-ideas.md | 9 + business/now.md | 94 ++- cursorai/now.md | 21 +- kmp/2026-Q1.md | 406 +++++++++++++ kmp/abc.md | 0 kmp/now.md | 76 +++ 16 files changed, 1590 insertions(+), 308 deletions(-) create mode 100644 .gitignore delete mode 100644 budget/2026-01.md create mode 100644 budget/2026-01_article.md create mode 100644 budget/2026-01_email.md create mode 100644 budget/2026-Q1.md rename budget/{article-points.md => ai-article-points.md} (73%) delete mode 100644 business/2026-01.md create mode 100644 business/2026-02-12_Собес-ИсходныйКод.md create mode 100644 business/2026-Q1.md create mode 100644 kmp/2026-Q1.md delete mode 100644 kmp/abc.md create mode 100644 kmp/now.md diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..56fafce --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.html diff --git a/budget/2026-01.md b/budget/2026-01.md deleted file mode 100644 index 3f39cbb..0000000 --- a/budget/2026-01.md +++ /dev/null @@ -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 -* учитывать отрицательный баланс \ No newline at end of file diff --git a/budget/2026-01_article.md b/budget/2026-01_article.md new file mode 100644 index 0000000..d197d60 --- /dev/null +++ b/budget/2026-01_article.md @@ -0,0 +1,93 @@ +Title: Что нам стоит на КМП построить? +URL: https://habr.com/ru/articles/989286/ + +Может ли Kotlin Multiplatform сократить трудозатраты при разработке одного продукта под несколько платформ? Мои вычисления говорят, что да, на 21%. Покажу это на примере своего хобби-проекта GitBudget для Android + iOS. + +# Текущее положение дел + +Одним из популярных способов разработки под несколько платформ является схема «одна платформа - одна команда разработки». Например, взглянем на известный мессенджер, заточенный под парковки. Некоторое время назад я словил следующую багу исчезновения сообщений: + + + +Как следует из видео, в ходе переписки с 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: + + +Так и для iOS: + + +В итоге получились такие цифры: + +| № | Платформа | Тип реализация | Особенности реализации | Время | +| --- | --- | --- | --- | --- | +| 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. Насколько важен синхронный выпуск функциональности на обе платформы, причём работающей одинаково на каждой платформе? + diff --git a/budget/2026-01_email.md b/budget/2026-01_email.md new file mode 100644 index 0000000..64a20c1 --- /dev/null +++ b/budget/2026-01_email.md @@ -0,0 +1,22 @@ +Title: КМП как альтернатива сокращению + +Кому: Зуев Игорь, Корнюшин Пётр, Сухов Сергей, Терентьев Евгений, Петров Виктор + + +Привет, коллеги, + +завтра состоится серия созвонов по поводу сокращения троих человек из +команды iOS Connect. + +У меня есть встречное предложение по повышению эффективности +команд разработки с помощью Kotlin Multiplatform. Предлагаю перевести +сокращаемых троих человек в новую команду КМП, которую я готов возглавить +без отрыва от руководства командой iOS Connect. + +КМП может сэкономить около 21% времени разработки, подробно я это расписал +в статье на Хабре: https://habr.com/ru/articles/989286/ + +Если предложение заинтересовало, буду рад обсудить детали данной спецоперации. + +С уважением, +Михаил. \ No newline at end of file diff --git a/budget/2026-Q1.md b/budget/2026-Q1.md new file mode 100644 index 0000000..e2fe4d7 --- /dev/null +++ b/budget/2026-Q1.md @@ -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 +* учитывать отрицательный баланс \ No newline at end of file diff --git a/budget/article-points.md b/budget/ai-article-points.md similarity index 73% rename from budget/article-points.md rename to budget/ai-article-points.md index c609869..afd91a2 100644 --- a/budget/article-points.md +++ b/budget/ai-article-points.md @@ -1,3 +1,7 @@ +ознакомитья с другой статьёй про AI + https://kean.blog/post/experiencing-claude-code + возможно, толковая + плюсы: хорошо описывает стуртуру кода и шаблоны используемые хоть сам Cursor и не умеет им следовать @@ -7,7 +11,9 @@ а в самом начале их и использовать не будешь, т.к. вроде и не нужны но Cursor их проставил, т.к. они могут понадобиться можно тренироваться делать 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 @@ -48,7 +67,12 @@ реклама фотки с Грокс от 14.01 реклама 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 минут разве тоже не напишет? А за 50 дней тоже не напишет? Вопросы, вопросы... + + +лиды: + из статьи про KMP сделать ссыку на AI + из статьи про AI сделать ссылка на KMP + статья KMP + PS: Если вы в своей компании хотите внедрить KMP для повышения производительности, то пишите в личку ;) + заметки с телефона [  ] ИИ: Восхваление: https://habr.com/ru/companies/redmadrobot/articles/978112/ [  ] Вопрос по ИИ: иногда пишет не тот код, а ктоттогда этот ИИ попрпвит, если разработчик сам не знает, насколько сгенеренный код соответствует архитектуре? diff --git a/budget/now.md b/budget/now.md index f4fa125..b9506ba 100644 --- a/budget/now.md +++ b/budget/now.md @@ -1,21 +1,82 @@ НАДО: -* исправить weekday, чтобы reportedWeekday был 7, а не 1 - в iOS monday == 2 -* добавить registerCallback для отладки -* заполнить setupShoulds -* заполнить setupEffects -* подключить функциональность из gb в iOS -* исправить -0% -* сделать Swift extension для возможности вызвать budgetCtrl().set(x, y) без label +* создать generator + тут будет лишь ver-nodejs + тогда, возможно, даже и смысла в ver-nodejs нет + да, смысла нет, это слишком важный инструмент, чтобы иметь несколько вариаций +* создать helloworld/ + тут уже будут ver-nodejs, ver-android, ver-ios, ver-macos-x64/arm64, ver-linux-x64, ver-windows-x64 + +далее сначала нужно перевести на 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: - обновить до 1.3.0 - влить подвисший ЗС +* после исправления CLD: + удалить iso установочный +* поделитья статьёй по KMP-1 с Гришей +* исправить -0% + * Android + * iOS +* ответить на вопросы Олега и Ильи к статье + + +ПСКОВ + добавить recent files + где-нибудь вместо File: /path + или сделать это выпадашкой + прям надо переключаться между файлами последними + + + преимущество off-line + никакой рекламы и отвлечения от записи мысли + просто запиши и не будь отвлечён + в отличие от записи мысли в готовящейся статье на хабре + там реклама отвлечёт + потеряешь время + +* iOS: + проверить настройку отключения вопроса вставки из буфера + Настройки + Приложение + Вставка из других приложений * оформить ЗСы с ИИ https://github.com/kornerr/git-budget/pull/2 @@ -23,7 +84,9 @@ добавить ссылки на статью добавить ссылки на видеозаписи - +* записать видео процесса переноса с Android на iOS + копируем код как есть + подправяем синтаксис и вызовы API * восстановить страницу kornerr.ru/git-budget её же на своём сайте добавить в примеры @@ -66,7 +129,8 @@ тогда всё лучше сходится * тысячи форматировать доппробелами - +* изучить планировщики задач 2025 (топ для iPhone) + https://dzen.ru/a/ZshWUWbMiXuc-VFd * сделать вставку из буфера * сделать кнопку копирования результата показывать уведомление о факте копирования diff --git a/business/2026-01.md b/business/2026-01.md deleted file mode 100644 index 78d2d27..0000000 --- a/business/2026-01.md +++ /dev/null @@ -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: Мария Сарафанова \ No newline at end of file diff --git a/business/2026-02-12_Собес-ИсходныйКод.md b/business/2026-02-12_Собес-ИсходныйКод.md new file mode 100644 index 0000000..3b83033 --- /dev/null +++ b/business/2026-02-12_Собес-ИсходныйКод.md @@ -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 + сигнальная таблица \ No newline at end of file diff --git a/business/2026-Q1.md b/business/2026-Q1.md new file mode 100644 index 0000000..50d2f5d --- /dev/null +++ b/business/2026-Q1.md @@ -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: Мария Сарафанова \ No newline at end of file diff --git a/business/cv-ideas.md b/business/cv-ideas.md index 0525f32..76c69dd 100644 --- a/business/cv-ideas.md +++ b/business/cv-ideas.md @@ -1,3 +1,12 @@ + +Простая экономика + 20-е марта + about:config + dom.event.clipboardevents.enabled + + + + * Могу придумывать систему Пример: задание оценить способность Cursor AI ускорить разработку diff --git a/business/now.md b/business/now.md index 78a31d2..6e18c39 100644 --- a/business/now.md +++ b/business/now.md @@ -1,24 +1,76 @@ НАДО: -* продублировать файлы cv из github на сайт -* переиначить текущую заготовку про прошлое - схлопнуть в секции - управление (ещё нет, надо написать) - разработка - управление - разработка -* освежить SCRUM - https://habr.com/ru/articles/825354/ +* на LinkedIn ответить, что мне интереснее управление командой + √ Сергею Еремееву + √ Robert Lycett + Anastasiya Sundeeva + +* написать копию статьи про КМП на English в LinkedIn + сделать на неё ссылку с хабра для тех, кому нужен English + сделать из статьи LinkedIn ссылку на статью на Хабре + из неё сделать ссылку на ТГ канал @kotlindialect +* написать Леониду Слепхину (LinkedIn) + после публикации статьи KMP на Английском в LinkedIn -* составить таблицу дат выпусков по фронтам за 2025-й - чтобы понять, на каком мы месте были -* составить таблицу дат выпусков за 2024-й -* составить таблицу дат выпусков за 2023-й? +* освежить крупными мазками с вопросами-ответами по 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 выкладки по пользе от KMP в цифрах не писать @@ -26,9 +78,21 @@ сначала не публичить своё резюме попробовать пару собесов по своему таймингу перешёл на Android для понимания среды + добавить ссылки на 2 статьи хабра (будущие) + пример работы с ИИ с аналитикой + пример KMP с аналитикой -11 февраля: - повторить тест по Инглишу на C1 + +* освежить SCRUM + https://habr.com/ru/articles/825354/ + +* освежить знания про архитектуру + см личку в ТГ + has_a, is_a + +* дополнить таблицу дат выпусков по фронтам за 2025-й + * заполнить web за 2024, 2023 + * заполнить ios, desktop за 2022 * составить план по Бюджету и ПСКОВу для первого квартала * составить план по Делу для первого квартала diff --git a/cursorai/now.md b/cursorai/now.md index 3ad01be..bb2a41a 100644 --- a/cursorai/now.md +++ b/cursorai/now.md @@ -19,4 +19,23 @@ После конкретного вопроса про CLD исправися Не смог найти ответ на вопрос "How to run the project" Но смог на "How to launch PSKOV" - \ No newline at end of file + Психологически не ты сам пишешь код, а машина + хотя по факту времени тратишь столько же + т.е. выигрыша по времени нет + а проигрышь по 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 + Если все умеют в суперумный ИИ, то чего же он не может такую простую ошибку исправить? + + + + Философия + ИИ - это проекция собственных знаний и ошибок + ИИ - это просто классный автомобиль, не более, он не знает, не хочет и ему не нужно + никуда ехать без водителя + это не замена человека + + \ No newline at end of file diff --git a/kmp/2026-Q1.md b/kmp/2026-Q1.md new file mode 100644 index 0000000..9045b54 --- /dev/null +++ b/kmp/2026-Q1.md @@ -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 \ No newline at end of file diff --git a/kmp/abc.md b/kmp/abc.md deleted file mode 100644 index e69de29..0000000 diff --git a/kmp/now.md b/kmp/now.md new file mode 100644 index 0000000..c0c9bc7 --- /dev/null +++ b/kmp/now.md @@ -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 +* ввести
_ACTIVE_SHOULDS и регистрацию отладки сразу внутри 
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 поднимает вьюху в свободное пространство при показе клавы