This commit is contained in:
Михаил Капелько
2026-04-03 10:19:38 +03:00
parent 493863ae5a
commit d4028d2a0d
17 changed files with 1616 additions and 61 deletions

121
articles/2026-02_KMP-en.md Normal file
View File

@@ -0,0 +1,121 @@
TODO-Title: Does LinkedIn publication have a title?
TODO-URL: LinkedIn
TODO: Вернуть хостинг своего сайта на GitHub?
TODO: Починить открытие видеозаписей
TODO: Сделать ссылку на Русскую статью из Английской
TODO: Сделать ссылку из Английской статьи на Русскую
Is Kotlin Multiplatform able to cut development costs for products
that support multiple platforms? My calculations say yes, by 21%.
# Current state of products for multiple platforms
One of the most popular ways to develop for multiple platforms relies on having
a separate team for each platform. For example, here's one particular bug I faced
in the russian messenger MAX some time ago:
<iframe src="https://kornerr.ru/vid/max-msg-disappear_2026-01-28.mp4"></iframe>
As you can see, while I was chatting with GigaChat AI my messages were
disappearing: Android had the bug once (the 4th second), Web had
the bug multiple times. Having a different behavior on multiple platforms means
there are different teams doing the same product for multiple platforms. Each
team has its own programming language, its own architecture, its own code review
process, its own set of unique bugs, its own team of testers, its own wage fund,
and so on.
Thus, the more we duplicate the code, the more we have to duplicate the
organization structures. Kotlin Multiplatform (KMP) can help reduce code
duplication. Of course, KMP won't remove code duplication completely, only
to some degree. Let's have a look at my hobby project GitBudget to find out
that degree.
# GitBudget summary
GitBudget is a tiny hobby project to help me ease calculating my day-to-day
spendings. Currently there's no history, no Git support, etc. Nonetheless
I've been using it for several months now to speed up tedious calculations of
the two important figures:
1. Overrun: Did I spend more than my daily budget allows? If so, how many rubles?
2. Left ₽/day: How many more rubles do I have left to spend a day by taking the overrun into account?
I don't intend to dive deep into the formulas, it's outside the topic of the article.
If you're interested you can have a look at the source code here
[at GitHub](https://github.com/kornerr/git-budget).
Let's see how the application looks like for Android and iOS:
![Android, iOS](https://habrastorage.org/webt/e2/bz/f5/e2bzf5lblg0xsydakc88zb5a_hu.jpeg)
No fancy UI/UX here, each UI element is a standard one (sometimes not even
aligned correctly). As a user I usually use the application the following way:
1. Paste from the clipboard the sum I spent yesterday (Spent)
2. Paste from the clipboard the remaining budget balance I had for yesterday's morning (Morning balance)
3. Copy the result of calculations into the clipboard (Result)
# Development costs
Let's divide the source code by three groups;
| № | Group | Example | Android files | iOS files |
| --- | --- | --- | --- | --- |
| 1 | UI | Jetpack Compose, SwiftUI | MainActivity.kt, VM.kt | AppView.swift, VM.swift |
| 2 | Platform | ClipboardManager, UIPasteboard | budget.kt, main.kt, other-android.kt, registerOneliners.kt | budget.swift, cld-ios.swift, other-ios.swift |
| 3 | Logic | budgetShouldResetMorningBalance | budgetFun.kt, entities.yml | budgetFun.kt, entities.yml |
I use KMP only for logic in GitBudget. UI and platform code are native. Why?
Because logic is under my full control, it's only updated when I need it.
UI and platform, on the other hand, are the properties of Apple and Google.
They dictate the rules and update UI with the platform to their liking
(for instance, Apple's unavoidable [Liquid Glass](https://www.nngroup.com/articles/liquid-glass/)).
We'll have a look at two objective indicators: lines of code and time spent to
implement a functionality.
## Indicator #1: Lines of code
| № | OS | Total | UI | Platform | Logic |
| --- | --- | --- | --- | --- | --- |
| 1 | Android | 692 | 160 (23%) | 221 (32%) | 311 (45%) |
| 2 | iOS | 540 | 90 (16%) | 139 (26%) | 311 (58%) |
**Conclusion-1**: I didn't write 311 lines of code for iOS **again** thanks to KMP, that's **58%** of all iOS code
**Conclusion-2**: From the perspective of both operating systems (692 + 540 = 1232), these 311 unwritten iOS lines of code result in **25%** of code I didn't write for the whole project
## Indicator #2: Time spent to implement a functionality
I've recorded the process of adding a new `Paste` button for `Morning balance` input both for Android:
<iframe src="https://kornerr.ru/vid/git-budget-balance-android_800_2026-01-28.mp4"></iframe>
And iOS:
<iframe src="https://kornerr.ru/vid/git-budget-balance-ios_800_2026-01-28.mp4"></iframe>
The results are:
| № | OS | Implementation type | Description | Time |
| --- | --- | --- | --- | --- |
| 1 | Android | Initial | I've created a new functionality that has not existed before | 17:34 |
| 2 | iOS | Secondary | I've used already existing logic in KMP, only added a new UI | 07:33 (43%) |
**Conclusion-3**: It took **57%** less time to repeat the functionality for iOS, i.e., it happened **2 times faster**
**Conclusion-4**: If we assume that creating the same functionality for both OSes without KMP would take 17:34 * 2 = 35 minutes, then the saved 10 minutes to repeat the functionality for iOS result in **21% of saved time** for the whole project
# Conclusions
Thus, these are the figures when using KMP:
1. iOS lines of code down by **58%**
2. Total project's lines of code down by **25%**
3. Time spent to repeat the functionality for iOS down by **57%**
4. Total time spent to implement the functionality for the project as a whole down by **21%** (this is the figure I've used in the beginning of the article)
# Questions to a reader
1. Is 21% of saved time worth it?
2. Is 21% good enough to actually step into KMP realm yourself?
3. How important is it to synchronously release the same functionality for both OSes?

View File

@@ -1,3 +1,446 @@
02.04: 35
* прочитать предыдующую статью
* написать короткую статью за раз
* перевести на английский
01.04: 60
* проверить замену hwSet с template на std::any
быстро не удалось
итог: оставить шаблоны
* генерить hwSet для .h
31.03: 45
* fobjContexts -> other.contextIds
* генерить F
30.03: 40
* генерить расширения
registerCallbackC
* ввести rawCPPSDK
* оставить в tmp.kt лишь временное ручное (setupComponentDebugging)
29.03: 25
* генериь конвертацию
28.03: 35
* скинуть Всеволоду ЗС
https://github.com/OGStudio/kotlin-dialect/pull/6
* определиться с форматом конвертации
нужно ли ввести тип kotlincpp?
или лучше отдельный файл генерить?
чем больше файлов, тем как-будто хуже в среднем
тогда, выходит, тип нужен новый
sdkc++?
итого:
ввести sdkc++ или c++sdk
* написать kd.yml желаемый
27.03: 55
* дополнить пример kd example кнопкой
* создать видеодемонстрацию примера
26.03: 30
* перенести тело hwSet в KT внутри класса API
25.03: 40
* сделать заготовку oneliners
* сделать обёртку над KDController
* сделать обёртку над KDContext
* продумать решение вопроса с processOneliners
статичные функции в статичном компоненте!
24.03: 35
* линковать sdk-mac в ver-mac
* сделать заготовку компонента main
23.03: 50
* подготовить заготовку Qt HW для ver-mac-x64
* сделать заготовку sdk-mac-x64
22.03: 60
* установить AS на W10
* добавить в README инструкции для запуска примера
* переиначить ссылку на KD
сделать через клон
иначе это неподъёмно будет для пользоателей примера
никто не догадается сделать клон
когда в примере была ссылка на родителя
* оформить ЗС
https://github.com/OGStudio/kotlin-dialect/pull/4
* влить ЗС
21.03: 60
* убрать пустые файлы из ver-android
* переименовать в example/helloworld
* убрать лишние импорты из MainActivity
* подготовить компоненту main
* сгенерить kd.kt
* заигнорить/удалить ignore.kd.kt
* сделать отображение окна через шуд
* сделать отображение "hello world" через шуд
20.03: 70
* подготовить проект ver-android
19.03: 35
* создать kotlin-dialect-hello-world на Android, десктоп, iOS, web для винды
создать в репе kotlin-dialect?
добавить тег kotlin-dialect
нет, лучше отдельно, т.к. тогда можно будет форкать!
хотя форкать - это как-будто не самое критичное
это ведь скорее examples/helloworld
сильно ли важно форкать? как-будто это сильно второстепенно
ведь можно скопировать, и всё
итог: не надо делать отдельную репу, хватит текущей
* KD: README
убрать --out
уточнить: Klin, a translator to convert YML to Kotlin
-> to Kotlin and Swift
* игнорировать kd.kt, emb64.kt
* установить зависимости новые
brew install gradle
* поднять gradle до 9.3.1
чтобы собиралось с openjdk 25
* README: добавить building prerequisites
* собрать
18.03: 60
* установить Android Studio Panda 2
17.03: 30
* переместить файлы из bootcamp на второй комп
* удалить Windows
* установить Linux Mint
16.03: 40
* скачать Linux Mint
15.03: 30
* заполнить CHANGELOG.md за ЗС-2
забыл про 2.1
* поднять версию до 3.0
я же отменяю --out, это breaking change
* заполнить CHANGELOG.md про 3.0
* оформить ЗС
https://github.com/OGStudio/kotlin-dialect/pull/3
* влить ЗС
* tag 3.0
14.03: 40
* встроить src/*.swift
embSwift64?
embKotlin64?
* добавить embSwift64 в outputSwift
* генерить F в Swift (проверить генерацию F)
struct F {
static let didClickReload = F.shared.didClickReload??
}
* проверить использование F в KOM
всё работает, не надо придумывать FF
* применить обновлённую версию klin для генерации
kom
удалить cld-ios.swift
* проверить работоспособность в KOM
лишь затем вливать
всё работает
13.03: 55
* сделать цикличное сохранение по всем output paths
типы
jsexport
kotlin
swift
реагировать на смену currentOutputPathId для задания c.outputFile и c.outputFileContents
т.е. два шуда надо обновить
а затем в эффектах завязаться на более поздний
* сохранять файлы
* применить обновлённую версию klin для генерации
самого klin
тесты kd
* удалить шаг stripTestKDJS
* определиться насчёт 'import iv'
где его указывать?
swift: ?
да, это самое простое
* подготовить исходники KDController ext и registerOneliners
* проверить сборку kom ios сейчас
работает
с тестовым ручным struct FF и экспортированным F.shared из KT
* YML: поддержать 'swift:'
чтобы 'import iv' указать
* добавить rawSwift в outputSwift
12.03: 40
* ввести appShouldResetInputFileDir
* сделать запись одного первого output path
11.03: 45
* ввести outputKotlin
просто убрать import js and @JsExport
делать на результат outputJSExport
* генерить kotlin
без @JsExport
* генерить F obj с @JsExport для type: jsexport
хотя можно jsexport по умолчанию везде делать как-будто
* генерить js
оставлять @JsExport
* удалить appShouldParseOutputFilePath
* удалить --out
в т.ч. сообщение-помощь при запуске без аргументов
* переиначить outputPaths
* ввести заготовочную генерацию outputSwift
чтобы просто было что-то в файле по итогу сохранения
10.03: 25
* ограничить debug output
* ввести outputJSExport
09.03: 50
* подготовить yml
√ для klin
√ для klin test
√ для kom
* разбирать output
* ввести util/debug-klin
запуск не dist/app.js, а из BUILD_DIR
08.03: 40
* оформить fexp
пусть пока только и для JVM
но оно же есть
* влить
* ОБНОВИТЬ сертификат kornerr.ru
чтобы починить статью КМП
а затем скинуть офер Александру Ноксону
сделать README в vps/cert
всё-таки надо
а то за квартал забываю
07.03: 50
* разделить klin/kd.yml на два
js: в klin
jvm: в test
* разделить скрипт util/run-klin-dbg на build и dist
чтобы dist не перезатирал ничего автоматом
ибо dist редко нужно делать
а build - постоянно
run - убрал совсем, ибо это на самом деле build лишь
* сократить вывод максимальный отладочный до 50
* вынести расчёты FObj в fobj.kt
* убрать генерацию полей F структур, надо ведь только для контекстов генерить
06.03: 45
* (неудачно) попытаться генерить
* продумать уместность fexp как есть
возможно, стоит просто влить как есть
даже несмотря на то, что нужно ещё доработать для iOS
ибо тут сильное усложнение идёт
может, это усложнение стоит провести отдельными компонентами?
поэтому разумно закомитить текущие результаты по F
хотя и неполные
итог: надо влить
05.03: 40
* KD: продумать формат YML для генерации нужных обёрток в языке назначения
swift или ios?
outputs:
ver-android:
ver-ios:
sdk-ios:
ver-browser?nodejs?js?
* разбирать outputPaths
04.03: 40
* опубликовать статьи
03.03: 45
* прочитать предыдующую статью
* обновить в январской статье EN ссылку на Reddit
* написать заготовку статьи на Русском и Английском
02.03: 50
* добавить F Obj в output kd.kt
* добавить F.none
* объединить все файлы node.js в один файл js?
просто засунуть не помогло
* изучить, можно ли npx без загрузки из сети запускать
ибо npx удобнее всего
но без сети по умолчанию не работает
не нашёл такого
* убрать дублирование полей
* описать в README использование
01.03: 35
* собрать все поля всех контекстов
* сделать геренацию полей F по аналогии со спецструктурой YML
28.02: 40
* переместить kd.yml от klin внутрь klin
ведь у тестов будет свой kd.yml
чтобы не было путаницы
* подготовить kd.yml для тестов
* исправить запуск тестов
он как раз про то, что генерить надо разные варианты тех же файлов
в частности для тестов надо без @JsExport сделать
или мне нужны два разных вид файлов в src
одни c JsExport
другие - без
пока решил @JsExport решать на уровне скриптов util
ибо разруливать сейчас это через YML и Klin выглядит сильно лишним
27.02: 45
* поддержать isDbg
критически важно для переключения флага на стороне iOS БЕЗ пересборки KMP
* ввести outputEntityContents
* ввести outputKDContents
удалять package org.opengamestudio и import kotlin.js.JsExport
хотя если я их удаляю, то зачем мне их там размещать?
для кого-то, кто будет по одному файлу таскать?
никому это не надо
тогда легче сразу убрать ненужное, в т.ч. copyright
прям сейчас не удалить, ибо я пока ещё прямо ссылаюсь
так что надо удалять всё-таки
* генерить файлы KDController/Context/registerOneliners сразу в kd.kt
убрать симлинки на оригиналы
26.02: 30
* генерить b64 без package и import для каждого файла KD
хотя именно b64 можно генерить без предварительных правок
а вот после распаковки b64 правки как раз уместнее, ибо ближе к телу
* создать файл c package для хранения переменной с b64
* размещать b64 в коде
25.02: 35
* обдумать путаницу в названиях klin.kt/klin.yml
ведь проект называется Kotlin Dialect
а всё оказывается в непонятном файлы klin.kt
как-будто kd.yml и kd.kt гораздо яснее и естественнее
итог: переименовать всё в kd
хотя сам бинарь может остаться как раз klin
вот файлы уже kd
* переименовать файлы в kd
транслятор остаётся с названием klin
* сохранять содержимое KDController/Context/registerOneliners как Base64
* ввести шаги в run-klin-dbg
22.02: 20
* добавить кодирование в/из Base64
21.02: 55
* создать новую репу kotlin-dialect
* обновить README
* обновить CHANGELOG.md
* отполировать перед влитием
F.field - потом будет
убрать object F
* оформить ЗС
* влить ЗС
20.02: 50
* восстановить чтение файла
* передать didLaunch
* восстановить запись файла
* восстановить прежнюю генерацию
с учётом @JsExport
* восстановить isDbg?
как-будто нет смысла
убрал
* перевести на Node.js
* выяснить формат F
проверить доступность как в Kt, так и в JS
object F { val field = ... } работает
доступ везде есть как F.field
19.02: 35
* передавать аргументы
* задать аргументы временно внутри run-klin-dbg
передал klin.yml и klin.kt
18.02: 45
* переименовать инструмент в kd?
klin как-то не вяжется
с другой стороны, kd уже присуствует в npx
тогда фиг туда добавить этот очень важный инструмент
итог: оставляем klin
* временно ввести cld/entities для генерации Context?
или просто файл entities.kt взять как есть?
тогда и запускать не надо будет ничего
и даже можно будет довести до состояния CLD
после чего уже самого себя использовать для генерации!
итог: пока просто скопировать файлы
* скопировать большинство файлов
17.02: 35
* выбрать имя генератора
klin
и город в МО
и сокращение от kotlin
* переименовать generator в klin
16.02: 40
* починить сборку
проблема была в настройке settings
* выводить hw в консоль
проблема была в том, что не в src лежали исходники
* создать helloworld/
тут уже будут ver-nodejs, ver-android, ver-ios, ver-macos-x64/arm64, ver-linux-x64, ver-windows-x64
15.02: 45
* обдумать форму generator
тут будет лишь ver-nodejs
тогда, возможно, даже и смысла в ver-nodejs нет
да, смысла нет, это слишком важный инструмент, чтобы иметь несколько вариаций
хотя в будущем может появиться веб-интерфейс
да и другие версии
просто потому что могут
плюс это будет этаким стандартным подходом иметь ver-платформа везде
* создать заготовку проекта generator
14.02: 35
* продумать структуру проекта KD

View File

@@ -1,8 +1,21 @@
Title: ИИ является инструментом копирования, который не даёт ускорения
AltTitle: Практический опыт вайб-кодинга от синьора
ознакомитья с другой статьёй про AI
https://kean.blog/post/experiencing-claude-code
возможно, толковая
статья-треш про крутой Cursor
https://habr.com/ru/amp/publications/908750/
чел 15 лет не прогал, вот она аудитория
плюсы:
можно не знать проект
и вот тут Cursor помогает сократить время
но возникает и вопрос, кто именно пишет хвалебные отзывы
тот, кто не хочет разбираться с кодом из принципа?
хорошо описывает стуртуру кода и шаблоны используемые
хоть сам Cursor и не умеет им следовать
можно узнать о новых спецификаторах для Compose
@@ -16,6 +29,11 @@
но плохо представляешь себе код
минусы:
видос, когда не смог добавить таб
на вопрос
Вопрос к тебе на засыпку. По твоим представлениям, должен ли джун уметь делать такую задачу: Добавить новую вкладку в таббар с какой-нибудь иконкой и названием, а при её выборе отображать заглушку "Hello, world"?
коллега ответил
Это должно уметь делать задолго до того, как стать джуном
часто ошибается и пишет код не туда, т.е. нарушает архитектуру
приходится постоянно уточнять мысль вместо того, чтобы написать сразу туда
приходится и постоянно делать review/проверку
@@ -96,7 +114,22 @@
за 5 минут напишет ИИ? Или за 5 минут не напишет? А за 50 минут разве
тоже не напишет? А за 50 дней тоже не напишет? Вопросы, вопросы...
Если бы ИИ действительно экономил время, то почему многие инфоцыгане,
втюхивающие ИИ, просто бы не купили условно 10 мощных компов
или 10 лицензий, подписали бы контракт с условным Сбером или ВТБ
и тупо, если ИИ экономит условно 50% времени, то почему бы они
просто не предолжили фирмам-гигантам те же услуги со скидкой 50%?
Почему если ИИ такой крутой и заменяет или дополняет или ускоряет
программиста, то меньше программисты не получают? А они получают
всё больше и больше?
Не сходится что-то
ИИ как элетромобиль! Тоже предрекали десятилетия назад, что будет огого
и где в итоге огого? Да, они ездят, но типа огого нет. Появился
ещё один вид автомобильно. Принцип совершенно не изменился. Революции
тоже что-то не видно. То же и с ИИ - это просто другой инструмент,
который, если посчитать, как я посчитал, ничего не экономит. А если
посчитать углеродный след или стоимость лицензии, то с ИИ даже
и невыгодно работать выходит. Синьору.
лиды:
из статьи про KMP сделать ссыку на AI

View File

@@ -1,23 +1,125 @@
НАДО:
* создать generator
тут будет лишь ver-nodejs
тогда, возможно, даже и смысла в ver-nodejs нет
да, смысла нет, это слишком важный инструмент, чтобы иметь несколько вариаций
* создать helloworld/
тут уже будут ver-nodejs, ver-android, ver-ios, ver-macos-x64/arm64, ver-linux-x64, ver-windows-x64
* отполировать
* влить ЗС
создать сразу новый на май
* опубликовать
сайт
VK
* сообщить Ване Kai SD
далее сначала нужно перевести на nodejs
затем уже наварганить генерацию обёрток для C++
* генерить hwSet для .cpp
* генерить EffectRegistry
* генерить Context
* генерить API
KD = Redux in Kotlin for Android, iOS, Desktop, and Browser
* доработать генератор
чтобы KOM заработал без KT.h/cpp
дублировать руками KT.h/cpp в KD example не нужно
ибо бессмысленно
генерить по частям/файлам
чтобы отщипывать по частям из KOM
сделать в KOM ветку новую
* генерить для C++
и функций в KT для получения готовых экземпляров всего
сделать геренацию полей F по аналогии со спецструктурой YML
т.е. генерить спецструктуру со статическими полями?
это после C++ генерации станет ясно, как лучше оформить
* обновить version
src files say 2.0.0
wrong
must be 3.1.0
when C++ gen is ready
* обновить README
* оформить ЗС
https://github.com/OGStudio/kotlin-dialect/pull/7
* влить ЗС
* сделать Main статичной компонентой
* сделать текст на основе логики руками
* выставить VM.cpp:_mainIsVisible = false
* подготовить заготовку ver-windows-x64
* helloworld readme
показать и рассказать про выполнение команд
./util/gen-kd
и прочие
* собрать на W10
* удалить gradlew.bat
если в MSYS2 достаточно gradlew
* оформить ЗС
https://github.com/OGStudio/kotlin-dialect/pull/5
* влить
* проверить пересоздание лишнее при перевороте устройства Android
* доработать пример ver-android
поле ввода
кнопка
загрузки
вставки URL фиксированного
текст
картинка
загружать картинку по URL из поля ввода
* mainViewIsVisible: задать false по умолчанию
* поправить запуск android HW на W10?
спрошу у Всеволода
* переключить версию Android на KD
* переключить версию iOS на KD
* ввести budgetSet() вместо budgetCtrl().set()
* ввести setupDebugging с short str
* использовать F
* ввести budgetProto для регистрации шудов и неповторения кода компонента
* сделать веб-версию
* описать в README все три версии GB
* описать зависимости mac (brew install node) и linux
* поднять версию
если KD не менялось, то 3.0.1
ибо после смены gradle на 9.3.1 поменялось содержимое dist/stdlib
хоть оно и несущественно, но это уже изменение третьей цифры
хотя если будем генерить для C++
то это уже 3.1, ибо новое без breaking change
* tag next version
* KD: переименовать app.js в klin.js
иначе в dist вообще не ясно, что запускать
либо dist в klin переименовать?
dist/klin/app.js?
* починить --help
* KD: линтер сделать проверки упорядоченности по имени названий сущностей
* Klin: сообщать о несущестующем пути для output
* отдельно сделать версию CLDController для cinterop
ибо по умолчанию не компилится не для C++
либо это отдельный файл должен быть в CLD
формат надо обдумать
* префикс JS делать перед сущностями инструментом?
сущности - можно
а вот функции-то не выйдет
так что надо самому всё равно прописывать JS
либо исходные файлы
хотя это такое себе
* принимать импорты-замены
чтобы org.opengamestudio заменять на другое
* оформить ЗС
https://github.com/OGStudio/kotlin-dialect/pull/13
* влить ЗС

View File

@@ -0,0 +1,15 @@
Title: Предложение о сотрудничестве в качестве руководителя или разработчика в ответ на просьбу откликнуться продажников
Company: Proninteam.ru
Date: 2026-02-21
Привет, Андрей.
Увидел в комментариях канала Галеры твой призыв откликнуться продажников, поэтому решил откликнуться, хоть и не продажник :)
Умею следующее:
1. Руководить группой разработки
2. Создавать мобильные приложения Android + iOS
На основной работе занимаюсь большую часть времени руководством (10 человек), но не забываю и регулярно писать код.
Моя цель в том, чтобы создать себе второй доход в дополнение к основной работе. У меня нет завышенных ожиданий по размеру этого дохода, поэтому готов обсудить любой формат взаимодействия.

View File

@@ -0,0 +1,36 @@
Title: Предложение о сотрудничестве автору ТГ-канала Веб разработка на заказ
TG Author: @sashanoxon
TG Channel: @aideaxondemos
Date: 2026-03-09
Приветствую, Александр,
меня зовут Михаил, предлагаю совместно поработать.
Для начала представлюсь. С 2021-го года руковожу командой мобильной разработки
(10 человек на текущий момент, Android + iOS) в компании, которая делает видеоконференцсвязь.
Некоторое время назад начал поиск вариантов мягкого выхода из найма: в конце прошлого года
пытался предлагать свои услуги (сайт и/или мобилки) авторам ТГ-каналов, обучающим Китайскому
(сам изучаю, поэтому хотел совместить приятное с полезным). К сожалению, никто не заинтересовался.
Поэтому решил теперь найти потенциального коллегу/партнёра, с которым смог бы совместно
предложить рынку больше, чем могу сделать один. Собственно, предложение у меня
простое - я могу делать мобильные приложения либо сам, либо чужими руками (руководить).
Для разработки на Android + iOS использую Kotlin Multiplatform в качестве
конкурентного преимущества, т.к. это позволяет оставаться полностью нативным
и одновременно экономить на трудозатратах (21%). Подробно цифры расписывал
в статье на Хабре: https://habr.com/ru/articles/989286/
Как я себе вижу потенциальное сотрудничество? Предполагаю, что у тебя есть
некоторое количество заказов на разработку сайтов. Возможно, кто-то из заказчиков
хотел бы получить в дополнение к сайту MVP в виде нативного приложения. Вот тут
я мог бы подключиться и сделать этот самый MVP. У меня есть два режима, в которых
я могу это сделать сам своими силами:
1. Медленный режим "после работы": Готов бесплатно до непосредственной передачи
продукта заказчику поработать в течение условно квартала, а потом попросить
символическую сумму, которая позволит мне договоритья с женой, что оно того стоит.
2. Стандартный режим "половина рабочего дня": Готов за сумму, заметно меньше
рыночной, работать половину обычного дня, чтобы скорость выдачи результата была
привычной для заказчика.
Жду ответного гудка 🙂

View File

@@ -0,0 +1,54 @@
Title: Созвон: Из найма в бизнес
Date: 2026-04-02
Оплата:
до 23:00 сегодня 02.04 - 14 тыс
оплатить в робокассе
зарегаться на странице курса
Страница онлайн-курса «Из наемного в бизнесмены»: https://glebarhangelsky.ru/online
Базовый тариф: https://tminvest.ru/pay/15000
Усиленный тариф: https://tminvest.ru/pay/25000
89161181977 Юлия телефон/MAX/тг - по всем вопросам
* Сохранить фотки по курсу
в Desktop
* проверить wordstat
чего люди-то хотят?
им нужен прототип-то?
* проверить custdev
Заметки:
* демиургическия функция:
не было квадратных пирожков, а я - сделал
* от работы на дядю переходишь к работе НА КЛИЕНТА
* не было квадратных пирожков, а я - сделал
Вопросы:
1. Зачем создавать свой бизнес?
2. Создавать бизнес навсегда или на продажу?
3. Как переходить от найма к бизнесу?
4. Нужен именно бизнес или независимый источник дохода?
5. Насколько нестандартный бизнес создавать?
Импортозамещение?
Как раз proto.io заменить?
6. Создавать бизнес одному или в партнёрстве?
7. Делать честный бизнес или стартап-возгонку?
8. Бусттреппинг или внешнее финансирование?
9. Как построить белый чистый бизнес?
Начинать с "ИП на упрощёнке"
10. Станет ли придуманная бизнес-идея "делом", а не просто "бизнесом"?

View File

@@ -1,3 +1,177 @@
19.03: 25
* Канал: рассказать про свои планы по Linux
и как они не удались
и как надо будет иное замутить
Краткая заметка про план и коррекцию
В первом пункте плана на эту неделю указан переход на Linux для решения проблемы с симлинками.
Всеволод этот пункт успешно сделал: запустил проект в Android Studio в виртуалке на Linux, но эмулятор Android работает слишком медленно, что делает процесс разработки неудобным.
Таким образом, у нас появилась развилка:
1) ради симлинков терпеть подтормаживания виртуалки
2) заморочиться с установкой Linux на физическую машину
3) смириться с Windows: отказаться от симлинков и скорректировать дальнейшие шаги
Симлинки (на Linux и macOS) позволили бы нам не копировать те файлы исходного код, которые не нужно писать более одного раза под несколько платформ. Без симлинков файлы надо копировать.
Мы выбрали 3-й путь: смириться с Windows и отказаться от симлинков. Поэтому придётся добавить в процесс настройки проекта (на одной из следующих недель) копирование файлов для второй платформы.
* Андрей: скинуть ссылку на канал Диалект Котлина
16.03: 25
* Всеволод: оформить итоги недели с видео по планам
и похвалить за собранность
* Всеволод: сориентировать по планам на неделю
1. Linux: Поставить Android Studio и начать работать с проектом из Linux
2. Сохранение: Использовать SharedPreferences для хранения данных на устройстве, например, сохранять все введённые данные в одну специальным образом форматированную строку
3. Compose: Переписать имеющийся интерфейс на Compose
* Андрей: скинуть ТЗ и тестовое
13.03: 30
* оформить предложения Андрею и Александру как отдельные документы датированные
по аналогии с остальными запросами на работу
* Андрей: придумать формат тестового задания
изучить основу donor search
* Андрей: придумать формат ТЗ
12.03: 10
* оформить предложения Андрею и Александру как отдельные документы датированные
по аналогии с остальными запросами на работу
11.03: 30
* попросить Всеволода расписать сценарии по формату
* подготовить таблицу для заполнения
https://docs.google.com/spreadsheets/d/1mKC2LinwfgnBTpoUILj0KA3H16uNCz2eDdTBW0xpjNY/edit?usp=sharing
сценарии
оценки в часах
оценки в датах
факт
* попросить Всеволода заполнить таблицу
* выдать публичное обещание в канале KD
09.03: 15
* починить домен
* сделать ревизию оффера автору канала "веб разработка на заказ"
@aideaxondemos
Приветствую, Александр,
меня зовут Михаил, предлагаю совместно поработать.
Для начала представлюсь. С 2021-го года руковожу командой мобильной разработки
(10 человек на текущий момент, Android + iOS) в компании, которая делает видеоконференцсвязь.
Некоторое время назад начал поиск вариантов мягкого выхода из найма: в конце прошлого года
пытался предлагать свои услуги (сайт и/или мобилки) авторам ТГ-каналов, обучающим Китайскому
(сам изучаю, поэтому хотел совместить приятное с полезным). К сожалению, никто не заинтересовался.
Поэтому решил теперь найти потенциального коллегу/партнёра, с которым смог бы совместно
предложить рынку больше, чем могу сделать один. Собственно, предложение у меня
простое - я могу делать мобильные приложения либо сам, либо чужими руками (руководить).
Для разработки на Android + iOS использую Kotlin Multiplatform в качестве
конкурентного преимущества, т.к. это позволяет оставаться полностью нативным
и одновременно экономить на трудозатратах (21%). Подробно цифры расписывал
в статье на Хабре: https://habr.com/ru/articles/989286/
Как я себе вижу потенциальное сотрудничество? Предполагаю, что у тебя есть
некоторое количество заказов на разработку сайтов. Возможно, кто-то из заказчиков
хотел бы получить в дополнение к сайту MVP в виде нативного приложения. Вот тут
я мог бы подключиться и сделать этот самый MVP. У меня есть два режима, в которых
я могу это сделать сам своими силами:
1. Медленный режим "после работы": Готов бесплатно до непосредственной передачи
продукта заказчику поработать в течение условно квартала, а потом попросить
символическую сумму, которая позволит мне договоритья с женой, что оно того стоит.
2. Стандартный режим "половина рабочего дня": Готов за сумму, заметно меньше
рыночной, работать половину обычного дня, чтобы скорость выдачи результата была
привычной для заказчика.
Жду ответного гудка :)
* отправить оффер
08.03: 50
* написать черновой вариант оффера Александру Ноксону
03.03: 30
* сделать запрос-оплеуху Андрею
скинуть два бага
и намекнуть, что я не дождался ответа
Привет, Андрей, пока ждал несостоявшегося звонка, нашёл пару ошибок на сайте proninteam.ru:
1. Ошибка в сокращении ИММК РАН: должно быть ИИМК РАН
2. На Samsung A54 сообщение о куках расползается до нечитаемых размеров
02.03: 20
* изучить вакансии на полставки на HH
чрезвычайно мало
* изучить вакансию на Хекслет
https://hh.ru/vacancy/129703750
уже нет
01.03: 30
* на LinkedIn сослаться на статью Reddit
https://www.linkedin.com/posts/michael-kapelko-74780135_from-the-kotlinmultiplatform-community-on-activity-7433740175991623680-yK0a?utm_source=share&utm_medium=member_desktop&rcm=ACoAAAdqeucBN55Ve2Lq5eMSZiIkc_pDn270344
28.02: 40
* добавить изображения руками
* опубликовать статью на Reddit
https://www.reddit.com/r/KotlinMultiplatform/comments/1rgtn1z/is_kotlin_multiplatform_able_to_cut_development/
* перечитать статью
23.02: 20
* сохранить черновик на Reddit
22.02: 10
* прочитать ответ по Kotlin C/C++
https://youtrack.jetbrains.com/issue/KT-84169
написал вопрос: 08.02
получил ответ: 17.02
* восстановить учётку Reddit
21.02: 30
* попробовать опубликовать статью в LinkedIn
нельзя, ибо огромная
тогда стоит на хабр выложить, возможно
а затем сослаться на неё в публикации
* написать Пронину в ТГ про парт-тайм разработку/руководство/whatever
@andpronin
20.02: 20
* прочитать про проблемы Liquid Glass
https://www.nngroup.com/articles/liquid-glass/
19.02: 30
* закончить первичный перевод статьи про КМП
18.02: 30
* перевести до непосредственного подсчёта строк
17.02: 30
* перевести начало обзора GitBudget
16.02: 30
* перевести начало статьи про КМП
15.02: 15
* на LinkedIn ответить, что мне интереснее управление командой
√ Сергею Еремееву
√ Robert Lycett
√ Anastasiya Sundeeva
14.02: 40
* ответить Еремееву и Lycett на LinkedIn

View File

@@ -5,7 +5,8 @@
dom.event.clipboardevents.enabled
* Сдеать свою приложеньку прототипирования?!
как раз KD тут может чрезвычайно решить многие проблемы!
* Могу придумывать систему
Пример: задание оценить способность Cursor AI ускорить разработку

View File

@@ -0,0 +1,11 @@
НАДО:
* создать приложение для прототипирования сайтов, мобилок, приложений десктоп
* Kotlin -> JS тут сильно поможет для перезагрузки без переустановки
* по факту это может в итоге стать не просто прототипирования, а быстрый показ возможностей
* изучить Combine Multiplatform?
тогда получится на все платформы разом делать прототип?
* не делать обязательную регистрацию
structure.app хочет регистрацию
а нафиг её

View File

@@ -1,18 +1,94 @@
23.03: 13:10-13:25 15
23.03: 16:00-16:40 40
* подготовить кратко про план на неделю
* стрясти итоги недели и 5 пунктов доработок приложения
* подготовить формат таблицы на 3-ю неделю
план/факт
дотошная структура hello world
* отправить в Канал кратко планы
На этой неделе начнём погружаться в подход "Диалект Котлина". Если кратко, то это сумма следующих слагаемых:
1. Redux-подобная архитектура в виде явного разделения
а) места принятия решений (шуды, reducers)
б) места исполнения решений (эффекты, side effects)
в) места хранения состояния (контекст, store)
2. Однонаправленный поток данных (Unidirectional data flow, UDF): Контекст -> Шуд -> Эффект -> Контекст -> ...
3. Единственный источник истины (Single source of truth, SSOT): задание значения поля контекста допустимо лишь в одном единственном месте, задание этого же поля в более чем одном месте считается ошибкой
НАДО:
* на LinkedIn ответить, что мне интереснее управление командой
√ Сергею Еремееву
√ Robert Lycett
Anastasiya Sundeeva
* написать копию статьи про КМП на English в LinkedIn
сделать на неё ссылку с хабра для тех, кому нужен English
сделать из статьи LinkedIn ссылку на статью на Хабре
из неё сделать ссылку на ТГ канал @kotlindialect
* написать Леониду Слепхину (LinkedIn)
* сварганить видеозапись созвона
2026-03-31 17.01.27 Zoom Meeting Michael Kapelko
25.03: 5
* найти node на w10
MSYS2 MINGW64
надо эту оболочку запускать
* получить отмашку от Всеволода по готовности заполнения плана на неделю
* пример shared preferences, если понадобится
https://stackoverflow.com/questions/3584267/android-equivalent-of-nsuserdefaults-in-ios
На прошлой неделе Всеволод выполнил свой двухдневный план по созданию задач в планировщике с подзадачами и заметками.
* сформулировать вопрос Ване Kai SD
если бы у тебя было X миллионов, необходимых для запуска компании и
этих денег хватило бы на 1 год:
1. что это была бы за компания?
2. что бы она производила?
3. зачем бы она это производила?
4. почему бы клиенты покупали её продукты?
5. какая была бы твоя роль в компании?
6. сколько человек было бы в компании?
* сделать из обеих статей КМП ссылки друг на друга
* опубликовать статью КМП на Medium
предложили на Reddit
значит, есть смысл
* скинуть статью про КМП
Володе Бородько
Денису Жукоборскому
Мише Зыкову
* созвон с Андреем
могу заметить то, что пропустили другие
сайт proninteam
принятие кук
ИИМК РАН
* сделать тестовое приложение React Native?
чтобы лучше понимать, как прорекламировать КМП в SaaSoft
ведь возникнет вопрос нафига козе баян
а тут и я сам дешевле готов
и КМП даёт всё нативное
в частности я пойму рендеринг, он как-будто ненативный в RN
* написать письмо в SaaSoft с предложением сделать WhoIsActive на мобилки
изучить текущую функциональность
60 т.р. по факту выкладки (за 3 месяца сделаю) + 3 месяца исправления багов в том же режиме
* откликнуться в Linked In / Messaging / Other
там много старых запросов
* ответить адептам ИИ в LinkedIn статьёй про мои проверки ИИ
после публикации статьи KMP на Английском в LinkedIn
Leonid Slepukhin
https://www.linkedin.com/posts/lslepukhin_i-keep-hearing-that-vibe-coding-isnt-real-activity-7426127984128036864-G3-u?utm_source=share&utm_medium=member_desktop&rcm=ACoAAAdqeucBN55Ve2Lq5eMSZiIkc_pDn270344
Pavel Gurov
https://www.linkedin.com/posts/pgurov_googleai-aistudio-gemini-ugcPost-7424531753370894336-JNXj?utm_source=share&utm_medium=member_desktop&rcm=ACoAAAdqeucBN55Ve2Lq5eMSZiIkc_pDn270344
* освежить крупными мазками с вопросами-ответами по iOS
https://github.com/vyachesIavskiy/iOS-Interview-Questions
@@ -29,7 +105,9 @@
Big-O notation
как оптимизировать время компиляции программы
как оптимизировать время запуска программы
* освежить SCRUM
https://habr.com/ru/articles/825354/
* проверить отклики на почте и в HH
@@ -83,8 +161,6 @@
пример KMP с аналитикой
* освежить SCRUM
https://habr.com/ru/articles/825354/
* освежить знания про архитектуру
см личку в ТГ

4
business/raspberry.md Normal file
View File

@@ -0,0 +1,4 @@
НАДО:
* apt install qt6-base-dev cmake g++

View File

@@ -1,6 +1,435 @@
https://jira.iva.ru/browse/VCSMOB-14236
[KMP] Подготовить первый ЗС в Android Connect
01.04:
* собрать последнюю версию KOM Android
* понизить openjdk до 21
иначе Gradle 8.12 жалуется
и Anroid Connect не патчится
* найти версию Android от Саши Беспалова в чате Всемобильный
Android 9
это SDK 28
а мы понизили до SDK 26
* подготовить ЗС в Android Connect
описать кратко изменения
сделать демку
https://git.hi-tech.org/mobile/ucim-android/-/merge_requests/4471
===
https://jira.iva.ru/browse/VCSMOB-14071
[КМП] Создать заготовку версии для десктопа
27.03:
* ввести F в C++
* ввести F в QML
* починить SSOT
убрать явные задания greetingText и isVisible
* оформить ЗС
https://git.hi-tech.org/ivasdk/kom/-/merge_requests/181
* перепроверить сборку android
* перепроверить сборку ios
* сообщить о ЗС
Сливаю ЗС о заготовке для десктопа: https://git.hi-tech.org/ivasdk/kom/-/merge_requests/181
√ 934, main, >=2, демо
* влить ЗС
таблица
26.03:
* вызывать processOneliners из класса
изучить https://stackoverflow.com/questions/12662891/how-can-i-pass-a-member-function-where-a-free-function-is-expected
может, надо просто не делать EffectRegistry?
т.е. сделать это частью компоненты?
если сделать статичным метод, то как-будто всё сходится
да, статичная функция работает
* придумать схему со статичной функцией компонента
сделать компонент статичным?
тогда можно будет обращаться к items статичного класса
и всё
итог: генерить EffectRegistry для каждого компонента свой
* ввести HWEffectRegistry
* вызывать эффекты с ручной обёрткой
* передавать значение isVisible в VM
* передавать значение greetingText в VM
* добавить кнопки
* убрать myapp/App.*
* перенести тело hwSet в KT внутри класса API
25.03:
* создавать hw ctrl в SDK
* ввести hwSet()
добиться вывода в консоль отладки
* зарегистрировать oneliners
* ввести KDCtrl.registerCallbackC
* вызывать processOneliners free func
24.03:
* подправить скрипты сборки и запуска
* ввести VM с полями для QML
* сделать заготовку SDK
* починить serializable
* сделать копирование файлов android -> desktop sdk
ignore.*
сделал пока лишь для apiConst.kt
* линковать SDK к бинарю
* заигнорить kd.kt/swift?
переименовав в tech.? generated.? copy.? ignored.? ignore.?
ignore. хорошо выглядит
сейчас нет смысла, ибо работает для мака
пусть будет для новых платформ лишь
далее - унифицируем
21.03: 90
* сделать заготовку HW Qt для w10 x64
config не проходит
* проверить проект qt-kt
тоже не собирается
возможно, всё из-за qt6 static
надо пересоздать винду
* переустановить заново винду
* сохранить снимок сразу после msys2
после установки msys2 и копирования проекта
до установки qt
проблема была в неверной версии cmake!
надо было ставить не просто cmake
а mingw w64 x86_64 cmake!
20.03:
* настроить VPN-IKE в Windows?
не нужно
сеть в VM локальная, всё доступно их хоста
* склонировать KOM в Windows
посмотреть, будут ли жалобы сразу на симлинки
жалоб нет, но в файлах просто пусть относительный
под виндой просто не будет работать, выходит
* сделать HW Qt для mac x64
19.03:
* перекинуть W10 на Mac
* скачать W10
* установить W10 в VBox
* установить msys2
https://wiki.qt.io/MSYS2
pacman -Sy
pacman --needed -S bash pacman pacman-mirrors msys2-runtime
pacman -Su
* установить qt
https://wiki.qt.io/MSYS2
√ pacman -S base-devel git
√ pacman -S mingw-w64-x86_64-toolchain
√ pacman -S mingw-w64-x86_64-qt6-static
√ pacman -S cmake
===
https://jira.iva.ru/browse/VCSMOB-14005
[КМП] Ввести F для работы с полями в шудах
16.03: 16:55-
* подлить main
* ввести kd/klin из tag 3.0
* перепроверить Android
* поправить calc-stats
* перепроверить iOS
* обновить README
CLD: out
KD: in
* оформить УЗС-1
описать кратко преимущества Klin KD
https://git.hi-tech.org/ivasdk/kom/-/merge_requests/49
* перевести Ava на F?
уже сделано
* сообщить об УЗС-1
Сливаю УЗС-1 о генерации констант F полей: https://git.hi-tech.org/ivasdk/kom/-/merge_requests/49
√ 728 (т: 534), 💀, main, >=2
* влить УЗС-1
* перевести Auth на F?
лишнее
таблица изменений уже и так гигантская
* оформить КЗС
√ демо
√ описать особенности нового генератора
https://git.hi-tech.org/ivasdk/kom/-/merge_requests/146
* !49
* сообщить о КЗС
КЗС: https://git.hi-tech.org/ivasdk/kom/-/merge_requests/146
√ 0, main, >=2, демо
* влить КЗС
таблица
===
https://jira.iva.ru/browse/VCSMOB-13778
[KMP] Создать пару комбинаций для Android
04.03: 235
* переименовать KOM.kt
иначе путаница сейчас в шагах
есть copyKOM
есть cloneKOM
имя
Bridge.kt?
KOMBridge.kt!
* поправить KOMBridge в v001
* отполировать KOMBridge
* обновить версию Android Connect
be01f725
2026-03-04
* обновить KOM
1f6a5014
2026-02-10
* сделать демо
* оформить ЗС
отметить v002 в README
https://git.hi-tech.org/ivasdk/obkom/-/merge_requests/2
* сообщить о ЗС
Сливаю ЗС о комбинации v002 на основе KOM!27 в Android Connect: https://git.hi-tech.org/ivasdk/obkom/-/merge_requests/2
√ 415, main, >=2
* влить ЗС
* таблица КЗС
* передать Олегу доведение от !27 до текущего KOM
+ починить web socket / comet
+ починить ресурсы
* изучить текущее состояние KOM на Android и iOS
* переименовать cld/entities.yml -> kd.yml
* найти причину 5dd60a7e
* обновить скрипт
* ввести KD/Klin для F.fields
* починить Android
* добавить в README: brew install node
03.03: 200
* выбрать проект из iva-combo
* спросить у Cursor обновить Kotlin до 2.2.0
а то даже Coil не заводится
да и прочее у меня тоже не заводится
не удалось за 1.5ч
* откатить
* проверить запуск после отката
* попробовать поднять Kotlin хотя бы до 2.1.20
coil 3.2.0 зависит от kotlin 2.1.20
кажется, получилось
* проверить необходимость изменений classpath в app/build.gradle
как-будто не надо
* проверить необходимость resolution strategy в android-app/build.gradle
вернул
ибо не собирается
* проверить gradle.properties: k2 = false
без них собралось
* изменения на 2.1.20 затянуть
* добавить coil3
добавить сначала в conference-connect/build.gradle
после чего просто собрать
без раскомментирования авы
* отобразить настоящие авы
02.03: 180
* ввести do-tmux
* сделать пути стандартным
$AND_CON_DIR/android-app/conference-connect/src/main/java/su/ivcs
$KOM_DIR/ver-android/app/src/main/kotlin/ru/iva
* скопировать ava*
* скопировать VM
* скопировать cont*
* import su.ivcs.conference_connect.R
* вставить полностью cont* в KOM.kt
* запустить компоненты ava, cont
* отобразить contUI без данных
* передать login и host
UserSessionManager.kt
* отобразить всамделишные данные
01.03: 80
* скопировать other*
* проверить вызов ru.iva.other* из C7
работает
* заменять версию языка
conference-connect/build.gradle
languageVersion = "2.0"
* комментировать uuid
return "1-2-3" //return Uuid.random().toHexDashString()
/* gradle-script/versions.gradle
kotlin_version
2.1.20
*/
27.02: 60
* отметить v001 в таблице README
* сделать заготовку комбинации v002 как копию v001
* обновить версию Android Connect до последней
* удостовериться в работе show-diff
* найти старую версию KOM с минимумом зависимостей
https://git.hi-tech.org/ivasdk/kom/-/merge_requests/28
09.02 выделил contUI.kt
хотя тут уже и аватарки есть
но можно, думаю, резать тут многое нещадно
даже авы, при необходимости
как первый шаг, например
* вспомнить функциональность версии KOM из !28
список контактов с пагинацией
ава с изображением и незавершённой заглушкой
заготовка инфы о контакте
* сделать шаг cloneKOM
26.02: 120
* изучить возможность сделать echo в нужную строку файла
чтобы вставить код связки с KOM в MainScreenActivity
https://unix.stackexchange.com/questions/32908/how-to-insert-the-content-of-a-file-into-another-file-before-a-pattern-marker
* сделать шаг insertContactsOverlay
* собрать результат v001
* оформить ЗС комбинации v001
https://git.hi-tech.org/ivasdk/obkom/-/merge_requests/1
* сообщить о ЗС
Сливаю ЗС о комбинации v001 для отображения заглушки контактов в Android Connect: https://git.hi-tech.org/ivasdk/obkom/-/merge_requests/1
√ 172, main, >=2
* влить ЗС
* таблица КЗС
25.02: 70
* создать репу obkom для комбинаций Android/iOS Connect + KOM
* сделать шаг cloneAndroidConnect
* сделать шаг copyKOM
===
https://jira.iva.ru/browse/VCSMOB-13657
[KMP] Сделать черновой вариант встраивания КМП-контактов в Android Connect
20.02: 85
* починить params.bottomToTop = R.id.bottom_navigation
* подключить C7Overlay из KOM
не работает
починил переключение
* вернуть переименование
* убрать старый размазанный код из MainScreenActivity
* отполировать KOM
* создать видео для отчёта о недельных итогах
19.02: 215
* отладить принтами файлы, которые трогал Cursor
ибо сейчас почти работает
чтобы понять движение данных
файлы:
ContactsMainScreenFragment.kt
тут вроде как кнопку можно добавить вверху контактов
MainScreenHeaderControl.kt
кажется, кнопки всех экранов в одной вьюхе
MainScreenHeaderAnimator.kt
MainScreenActivity.kt
main_screen_header.xml
* сделать новую репу с копией ucim-android
чтобы сливать без страха
https://git.hi-tech.org/m.kapelko/android-fork
* добавить игнор build
* сделать новую ветку и запушить
* выводить в консоль факт двойного нажатия на контакты
* менять название вкладки на C7 и обратно на Contacts на двойное нажатие
* изучить размещение одной View поверх другой
https://eclipsesource.com/blogs/2013/09/19/crossing-boundaries-with-the-new-android-viewoverlay/
* перекрывать текущие контакты заглушкой контактов
* создть заготовку object KOM
для размещения кода интеграции
проверить скорость пересборки в app target
58с
* сделать таргет kom?
сильно муторно
итог: пусть будет KOM.kt в app target
* замерить изменения
просто перезапуск без изменений: 16с
изменение внутри тела функции KOM.doTest: 8м 30с
* переместить KOM.kt в таргет conference-connect
* замерить изменения
80с
* продублировать частично код показа C7Overlay в KOM
18.02: 200
* найти переключение вкладки контактов с помощью отладчика визуального
https://developer.android.com/studio/debug/layout-inspector
ничего не показывает дельного
* найти MainActivity
нет такого файла
* добаить таб в таббар
спросить Cursor?
курсор не справился
* добавить кнопку C7
с третьего запроса Cursor справился
17.02: 60
* открыть проект Android Connect
* собрать Android Connect
* KOM-Android: сделать slideIn/Out для инфы о контакте
===
https://jira.iva.ru/browse/VCSMOB-13650
[KMP] Подготовить план разработки с закреплением владельцев
16.02: 85
* подготовить документ с графом связей между сущностями?
хрен знает
пока не ясно, как это лучше объяснить
возможно, лучше это сделать частью проекта Kotlin Dialect
итог: не вижу, не надо делать
* ввести <PRE>_ACTIVE_SHOULDS и регистрацию отладки сразу внутри <PRE>Fun.kt
* заменить avaCtrl().set() на avaCtrlSet.... or avaSet()???
да, пусть будет avaSet
* заменить auth: authSetupShoulds + authSet
* заменить cont: contSetupShoulds + contSet
* оформить ЗС
https://git.hi-tech.org/ivasdk/kom/-/merge_requests/43
* сообщить о ЗС
Сливаю ЗС о переносе регистрации шудов: https://git.hi-tech.org/ivasdk/kom/-/merge_requests/43
√ 196, main, >=2
* влить ЗС
* таблица
===
https://jira.iva.ru/browse/VCSMOB-13473
[KMP] Отображать аватарки
13.02: 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
* влить ЗС
* записать в таблицу
* сделать отчёт в чат КМП
√ подготовить видео
√ посчитать количество сэкономленных строк кода
√ ввести скрипт
12.02: 155
* изучить про AsyncImage

View File

@@ -1,45 +1,101 @@
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
тут дока больше
* сообщить о ЗС
* влить ЗС
* таблица
* оформить УЗС по publish ivameet (см. rift)
* подготовить отдельную репу для мостового кода
* использовать генератор для замены KT.h/cpp
* оформить ЗС
https://git.hi-tech.org/ivasdk/kom/-/merge_requests/203
* влить ЗС
таблица
демо
* сделать копирование на Windows
* ввести SDK для Windows
* проверить на Windows
* сделать для Linux
* генерить KT.h/cpp в kd.h/cpp
* генерить F в kd.h/cpp
* сделать заготовку будущего SDK
* найти замену okhttp
* донастроить W10
tmux
~/.gitconfig
git id_rsa
* KOM упорядочить kd.yml
* подготовить ЗС в Android Connect с накопленными изменениями
* сделать заготовку веб-версии
причём с копированием файлов
* перенести мостовой код в отдельную репу
* obkom: передавать в authCtrl?
host
login
хоть они и не из auth
но можно сохранить направление движения данных
* ориентироваться на ЗС combo work
но не вливать
ибо ЗС почему-то в прод хочет попасть
где-то я ошибся, поэтому не вливать
лишь ориентироваться
https://git.hi-tech.org/mobile/ucim-android/-/merge_requests/4274
* KOM-iOS: сделать slideIn/Out для инфы о контакте
* вернуть origin в ucim-android в .git/config
[remote "origin"]
url = git@git.hi-tech.org:mobile/ucim-android.git
fetch = +refs/heads/*:refs/remotes/origin/*
* добавить ссылки на API endpoints рядом с сущностями в YML
* попутно удалить shouldResetInfo и соответствующие поля из ContContext
* ввести <PRE>_ACTIVE_SHOULDS и регистрацию отладки сразу внутри <PRE>Fun.kt
* проверить гипотезу кэширования второй Ava одного запроса
чтобы не было двух запросов одной картинки
* удалить из cld-ios ctrl.set()
чтобы заставить перейти на authSet/etc
* выделить authUI
* сделать комбинацию на Android
* Android Connect: поднять Kotlin до 2.1.20
* сделать тестирование на основе веб-версии
* подготовить шпаргалку по Redux / Kotlin Dialect
* подготовить шпаргалку по Redux / CSE
* сдеать тесты на вебе
* ввести линтер с запретом @State и @Binding вне VM.swift
ввести аналогию для Android
* ввести линтер
запретить @State
запретить @Binding
запретить remember
запретить присвоение одного recentField (кроме none) из более чем одного шуда
запретить вызов avaSet и т.п. для одного ключа с более чем одного места
проверять ГОСТ функций
проверять названия переменных в VM
запретить комбинировать в UI значения из VM: все комбинации строго в шудах
префиксы проверять cont* (Ctx, VM), Cont* (UI)
в didClick* должны всегда передавать true
* проверить замену на Glide
именно после полной реализации на Coil
чтобы функционально всё удовлетворяло
@@ -52,8 +108,8 @@
* улавливать изменения в имени контакта по WS
это важно сделать для задания пути работы с WS
* доработать локализацию до генерации нативных файлов Android
* доработать локализацию до генерации нативных файлов iOS
* доработать локализацию до генерации нативных файлов Android из доки
* доработать локализацию до генерации нативных файлов iOS из доки
* добавить ширину авы в параметры Ava()
сейчас в инфе о контакте фотка размытая выходит

View File

@@ -1,4 +1,4 @@
input = budget;business;cursorai;faith;kmp;rlink;schedules;vid
input = articles;budget;business;cursorai;faith;kmp;rlink;schedules;vid
item = item.template
preview = preview.template
index = index.template