some
This commit is contained in:
121
articles/2026-02_KMP-en.md
Normal file
121
articles/2026-02_KMP-en.md
Normal 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:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
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?
|
||||||
|
|
||||||
@@ -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
|
14.02: 35
|
||||||
|
|
||||||
* продумать структуру проекта KD
|
* продумать структуру проекта KD
|
||||||
|
|||||||
@@ -1,8 +1,21 @@
|
|||||||
|
Title: ИИ является инструментом копирования, который не даёт ускорения
|
||||||
|
AltTitle: Практический опыт вайб-кодинга от синьора
|
||||||
|
|
||||||
ознакомитья с другой статьёй про AI
|
ознакомитья с другой статьёй про AI
|
||||||
https://kean.blog/post/experiencing-claude-code
|
https://kean.blog/post/experiencing-claude-code
|
||||||
возможно, толковая
|
возможно, толковая
|
||||||
|
|
||||||
|
статья-треш про крутой Cursor
|
||||||
|
https://habr.com/ru/amp/publications/908750/
|
||||||
|
чел 15 лет не прогал, вот она аудитория
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
плюсы:
|
плюсы:
|
||||||
|
можно не знать проект
|
||||||
|
и вот тут Cursor помогает сократить время
|
||||||
|
но возникает и вопрос, кто именно пишет хвалебные отзывы
|
||||||
|
тот, кто не хочет разбираться с кодом из принципа?
|
||||||
хорошо описывает стуртуру кода и шаблоны используемые
|
хорошо описывает стуртуру кода и шаблоны используемые
|
||||||
хоть сам Cursor и не умеет им следовать
|
хоть сам Cursor и не умеет им следовать
|
||||||
можно узнать о новых спецификаторах для Compose
|
можно узнать о новых спецификаторах для Compose
|
||||||
@@ -16,6 +29,11 @@
|
|||||||
но плохо представляешь себе код
|
но плохо представляешь себе код
|
||||||
|
|
||||||
минусы:
|
минусы:
|
||||||
|
видос, когда не смог добавить таб
|
||||||
|
на вопрос
|
||||||
|
Вопрос к тебе на засыпку. По твоим представлениям, должен ли джун уметь делать такую задачу: Добавить новую вкладку в таббар с какой-нибудь иконкой и названием, а при её выборе отображать заглушку "Hello, world"?
|
||||||
|
коллега ответил
|
||||||
|
Это должно уметь делать задолго до того, как стать джуном
|
||||||
часто ошибается и пишет код не туда, т.е. нарушает архитектуру
|
часто ошибается и пишет код не туда, т.е. нарушает архитектуру
|
||||||
приходится постоянно уточнять мысль вместо того, чтобы написать сразу туда
|
приходится постоянно уточнять мысль вместо того, чтобы написать сразу туда
|
||||||
приходится и постоянно делать review/проверку
|
приходится и постоянно делать review/проверку
|
||||||
@@ -96,7 +114,22 @@
|
|||||||
за 5 минут напишет ИИ? Или за 5 минут не напишет? А за 50 минут разве
|
за 5 минут напишет ИИ? Или за 5 минут не напишет? А за 50 минут разве
|
||||||
тоже не напишет? А за 50 дней тоже не напишет? Вопросы, вопросы...
|
тоже не напишет? А за 50 дней тоже не напишет? Вопросы, вопросы...
|
||||||
|
|
||||||
|
Если бы ИИ действительно экономил время, то почему многие инфоцыгане,
|
||||||
|
втюхивающие ИИ, просто бы не купили условно 10 мощных компов
|
||||||
|
или 10 лицензий, подписали бы контракт с условным Сбером или ВТБ
|
||||||
|
и тупо, если ИИ экономит условно 50% времени, то почему бы они
|
||||||
|
просто не предолжили фирмам-гигантам те же услуги со скидкой 50%?
|
||||||
|
Почему если ИИ такой крутой и заменяет или дополняет или ускоряет
|
||||||
|
программиста, то меньше программисты не получают? А они получают
|
||||||
|
всё больше и больше?
|
||||||
|
Не сходится что-то
|
||||||
|
ИИ как элетромобиль! Тоже предрекали десятилетия назад, что будет огого
|
||||||
|
и где в итоге огого? Да, они ездят, но типа огого нет. Появился
|
||||||
|
ещё один вид автомобильно. Принцип совершенно не изменился. Революции
|
||||||
|
тоже что-то не видно. То же и с ИИ - это просто другой инструмент,
|
||||||
|
который, если посчитать, как я посчитал, ничего не экономит. А если
|
||||||
|
посчитать углеродный след или стоимость лицензии, то с ИИ даже
|
||||||
|
и невыгодно работать выходит. Синьору.
|
||||||
|
|
||||||
лиды:
|
лиды:
|
||||||
из статьи про KMP сделать ссыку на AI
|
из статьи про KMP сделать ссыку на AI
|
||||||
|
|||||||
126
budget/now.md
126
budget/now.md
@@ -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 для получения готовых экземпляров всего
|
и функций в KT для получения готовых экземпляров всего
|
||||||
сделать геренацию полей F по аналогии со спецструктурой YML
|
* обновить version
|
||||||
т.е. генерить спецструктуру со статическими полями?
|
src files say 2.0.0
|
||||||
это после C++ генерации станет ясно, как лучше оформить
|
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
|
* отдельно сделать версию CLDController для cinterop
|
||||||
ибо по умолчанию не компилится не для C++
|
ибо по умолчанию не компилится не для C++
|
||||||
либо это отдельный файл должен быть в CLD
|
либо это отдельный файл должен быть в CLD
|
||||||
формат надо обдумать
|
формат надо обдумать
|
||||||
|
* префикс JS делать перед сущностями инструментом?
|
||||||
|
сущности - можно
|
||||||
|
а вот функции-то не выйдет
|
||||||
|
так что надо самому всё равно прописывать JS
|
||||||
|
либо исходные файлы
|
||||||
|
хотя это такое себе
|
||||||
|
* принимать импорты-замены
|
||||||
|
чтобы org.opengamestudio заменять на другое
|
||||||
* оформить ЗС
|
* оформить ЗС
|
||||||
https://github.com/OGStudio/kotlin-dialect/pull/13
|
https://github.com/OGStudio/kotlin-dialect/pull/13
|
||||||
* влить ЗС
|
* влить ЗС
|
||||||
|
|||||||
15
business/2026-02-21_Андрей-Пронин.md
Normal file
15
business/2026-02-21_Андрей-Пронин.md
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
Title: Предложение о сотрудничестве в качестве руководителя или разработчика в ответ на просьбу откликнуться продажников
|
||||||
|
Company: Proninteam.ru
|
||||||
|
Date: 2026-02-21
|
||||||
|
|
||||||
|
Привет, Андрей.
|
||||||
|
|
||||||
|
Увидел в комментариях канала Галеры твой призыв откликнуться продажников, поэтому решил откликнуться, хоть и не продажник :)
|
||||||
|
|
||||||
|
Умею следующее:
|
||||||
|
1. Руководить группой разработки
|
||||||
|
2. Создавать мобильные приложения Android + iOS
|
||||||
|
|
||||||
|
На основной работе занимаюсь большую часть времени руководством (10 человек), но не забываю и регулярно писать код.
|
||||||
|
|
||||||
|
Моя цель в том, чтобы создать себе второй доход в дополнение к основной работе. У меня нет завышенных ожиданий по размеру этого дохода, поэтому готов обсудить любой формат взаимодействия.
|
||||||
36
business/2026-03-09_Александр-Ноксон.md
Normal file
36
business/2026-03-09_Александр-Ноксон.md
Normal 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. Стандартный режим "половина рабочего дня": Готов за сумму, заметно меньше
|
||||||
|
рыночной, работать половину обычного дня, чтобы скорость выдачи результата была
|
||||||
|
привычной для заказчика.
|
||||||
|
|
||||||
|
Жду ответного гудка 🙂
|
||||||
54
business/2026-04-02_Глеб-Архангельский-Про-бизнес.md
Normal file
54
business/2026-04-02_Глеб-Архангельский-Про-бизнес.md
Normal 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. Станет ли придуманная бизнес-идея "делом", а не просто "бизнесом"?
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -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
|
14.02: 40
|
||||||
|
|
||||||
* ответить Еремееву и Lycett на LinkedIn
|
* ответить Еремееву и Lycett на LinkedIn
|
||||||
|
|||||||
@@ -5,7 +5,8 @@
|
|||||||
dom.event.clipboardevents.enabled
|
dom.event.clipboardevents.enabled
|
||||||
|
|
||||||
|
|
||||||
|
* Сдеать свою приложеньку прототипирования?!
|
||||||
|
как раз KD тут может чрезвычайно решить многие проблемы!
|
||||||
|
|
||||||
* Могу придумывать систему
|
* Могу придумывать систему
|
||||||
Пример: задание оценить способность Cursor AI ускорить разработку
|
Пример: задание оценить способность Cursor AI ускорить разработку
|
||||||
|
|||||||
11
business/idea-proto-app.md
Normal file
11
business/idea-proto-app.md
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
|
||||||
|
НАДО:
|
||||||
|
|
||||||
|
* создать приложение для прототипирования сайтов, мобилок, приложений десктоп
|
||||||
|
* Kotlin -> JS тут сильно поможет для перезагрузки без переустановки
|
||||||
|
* по факту это может в итоге стать не просто прототипирования, а быстрый показ возможностей
|
||||||
|
* изучить Combine Multiplatform?
|
||||||
|
тогда получится на все платформы разом делать прототип?
|
||||||
|
* не делать обязательную регистрацию
|
||||||
|
structure.app хочет регистрацию
|
||||||
|
а нафиг её
|
||||||
@@ -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 ответить, что мне интереснее управление командой
|
* сварганить видеозапись созвона
|
||||||
√ Сергею Еремееву
|
2026-03-31 17.01.27 Zoom Meeting Michael Kapelko
|
||||||
√ Robert Lycett
|
|
||||||
Anastasiya Sundeeva
|
|
||||||
|
|
||||||
* написать копию статьи про КМП на English в LinkedIn
|
25.03: 5
|
||||||
сделать на неё ссылку с хабра для тех, кому нужен English
|
* найти node на w10
|
||||||
сделать из статьи LinkedIn ссылку на статью на Хабре
|
MSYS2 MINGW64
|
||||||
из неё сделать ссылку на ТГ канал @kotlindialect
|
надо эту оболочку запускать
|
||||||
* написать Леониду Слепхину (LinkedIn)
|
|
||||||
|
* получить отмашку от Всеволода по готовности заполнения плана на неделю
|
||||||
|
|
||||||
|
* пример 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
|
после публикации статьи 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
|
* освежить крупными мазками с вопросами-ответами по iOS
|
||||||
https://github.com/vyachesIavskiy/iOS-Interview-Questions
|
https://github.com/vyachesIavskiy/iOS-Interview-Questions
|
||||||
@@ -29,6 +105,8 @@
|
|||||||
Big-O notation
|
Big-O notation
|
||||||
как оптимизировать время компиляции программы
|
как оптимизировать время компиляции программы
|
||||||
как оптимизировать время запуска программы
|
как оптимизировать время запуска программы
|
||||||
|
* освежить SCRUM
|
||||||
|
https://habr.com/ru/articles/825354/
|
||||||
|
|
||||||
* проверить отклики на почте и в HH
|
* проверить отклики на почте и в HH
|
||||||
|
|
||||||
@@ -83,8 +161,6 @@
|
|||||||
пример KMP с аналитикой
|
пример KMP с аналитикой
|
||||||
|
|
||||||
|
|
||||||
* освежить SCRUM
|
|
||||||
https://habr.com/ru/articles/825354/
|
|
||||||
|
|
||||||
* освежить знания про архитектуру
|
* освежить знания про архитектуру
|
||||||
см личку в ТГ
|
см личку в ТГ
|
||||||
|
|||||||
4
business/raspberry.md
Normal file
4
business/raspberry.md
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
|
||||||
|
НАДО:
|
||||||
|
|
||||||
|
* apt install qt6-base-dev cmake g++
|
||||||
429
kmp/2026-Q1.md
429
kmp/2026-Q1.md
@@ -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
|
https://jira.iva.ru/browse/VCSMOB-13473
|
||||||
[KMP] Отображать аватарки
|
[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
|
12.02: 155
|
||||||
|
|
||||||
* изучить про AsyncImage
|
* изучить про AsyncImage
|
||||||
|
|||||||
122
kmp/now.md
122
kmp/now.md
@@ -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
|
|
||||||
* влить ЗС
|
|
||||||
* записать в таблицу
|
|
||||||
* сделать отчёт в чат КМП
|
|
||||||
√ подготовить видео
|
|
||||||
√ посчитать количество сэкономленных строк кода
|
|
||||||
√ ввести скрипт
|
|
||||||
|
|
||||||
НАДО:
|
НАДО:
|
||||||
* подготовить документ с графом связей между сущностями
|
* оформить УЗС по publish ivameet (см. rift)
|
||||||
* оформить ЗС
|
|
||||||
https://git.hi-tech.org/ivasdk/kom/-/merge_requests/43
|
|
||||||
тут дока больше
|
|
||||||
* сообщить о ЗС
|
|
||||||
* влить ЗС
|
|
||||||
* таблица
|
|
||||||
|
|
||||||
|
* подготовить отдельную репу для мостового кода
|
||||||
|
|
||||||
|
|
||||||
|
* использовать генератор для замены 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
|
* добавить ссылки на API endpoints рядом с сущностями в YML
|
||||||
* попутно удалить shouldResetInfo и соответствующие поля из ContContext
|
* попутно удалить shouldResetInfo и соответствующие поля из ContContext
|
||||||
* ввести <PRE>_ACTIVE_SHOULDS и регистрацию отладки сразу внутри <PRE>Fun.kt
|
|
||||||
* проверить гипотезу кэширования второй Ava одного запроса
|
* проверить гипотезу кэширования второй 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
|
* проверить замену на Glide
|
||||||
именно после полной реализации на Coil
|
именно после полной реализации на Coil
|
||||||
чтобы функционально всё удовлетворяло
|
чтобы функционально всё удовлетворяло
|
||||||
@@ -52,8 +108,8 @@
|
|||||||
* улавливать изменения в имени контакта по WS
|
* улавливать изменения в имени контакта по WS
|
||||||
это важно сделать для задания пути работы с WS
|
это важно сделать для задания пути работы с WS
|
||||||
|
|
||||||
* доработать локализацию до генерации нативных файлов Android
|
* доработать локализацию до генерации нативных файлов Android из доки
|
||||||
* доработать локализацию до генерации нативных файлов iOS
|
* доработать локализацию до генерации нативных файлов iOS из доки
|
||||||
|
|
||||||
* добавить ширину авы в параметры Ava()
|
* добавить ширину авы в параметры Ava()
|
||||||
сейчас в инфе о контакте фотка размытая выходит
|
сейчас в инфе о контакте фотка размытая выходит
|
||||||
|
|||||||
@@ -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
|
item = item.template
|
||||||
preview = preview.template
|
preview = preview.template
|
||||||
index = index.template
|
index = index.template
|
||||||
|
|||||||
Reference in New Issue
Block a user