diff --git a/budget/2026-01_email.md b/articles/2026-01_KMP-email.md similarity index 100% rename from budget/2026-01_email.md rename to articles/2026-01_KMP-email.md diff --git a/budget/2026-01_article.md b/articles/2026-01_KMP-ru.md similarity index 100% rename from budget/2026-01_article.md rename to articles/2026-01_KMP-ru.md diff --git a/articles/2026-02_KMP-en.md b/articles/2026-02_KMP-en.md new file mode 100644 index 0000000..4da7239 --- /dev/null +++ b/articles/2026-02_KMP-en.md @@ -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: + + + +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: + + +And iOS: + + +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? + diff --git a/budget/2026-Q1.md b/budget/2026-Q1.md index e2fe4d7..dd721c5 100644 --- a/budget/2026-Q1.md +++ b/budget/2026-Q1.md @@ -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 diff --git a/budget/ai-article-points.md b/budget/ai-article-points.md index afd91a2..c4943fb 100644 --- a/budget/ai-article-points.md +++ b/budget/ai-article-points.md @@ -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 diff --git a/budget/now.md b/budget/now.md index b9506ba..4faeae6 100644 --- a/budget/now.md +++ b/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 для получения готовых экземпляров всего -сделать геренацию полей 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 * влить ЗС diff --git a/business/2026-02-21_Андрей-Пронин.md b/business/2026-02-21_Андрей-Пронин.md new file mode 100644 index 0000000..2f9a176 --- /dev/null +++ b/business/2026-02-21_Андрей-Пронин.md @@ -0,0 +1,15 @@ +Title: Предложение о сотрудничестве в качестве руководителя или разработчика в ответ на просьбу откликнуться продажников +Company: Proninteam.ru +Date: 2026-02-21 + +Привет, Андрей. + +Увидел в комментариях канала Галеры твой призыв откликнуться продажников, поэтому решил откликнуться, хоть и не продажник :) + +Умею следующее: +1. Руководить группой разработки +2. Создавать мобильные приложения Android + iOS + +На основной работе занимаюсь большую часть времени руководством (10 человек), но не забываю и регулярно писать код. + +Моя цель в том, чтобы создать себе второй доход в дополнение к основной работе. У меня нет завышенных ожиданий по размеру этого дохода, поэтому готов обсудить любой формат взаимодействия. \ No newline at end of file diff --git a/business/2026-03-09_Александр-Ноксон.md b/business/2026-03-09_Александр-Ноксон.md new file mode 100644 index 0000000..0c44b93 --- /dev/null +++ b/business/2026-03-09_Александр-Ноксон.md @@ -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. Стандартный режим "половина рабочего дня": Готов за сумму, заметно меньше +рыночной, работать половину обычного дня, чтобы скорость выдачи результата была +привычной для заказчика. + +Жду ответного гудка 🙂 \ No newline at end of file diff --git a/business/2026-04-02_Глеб-Архангельский-Про-бизнес.md b/business/2026-04-02_Глеб-Архангельский-Про-бизнес.md new file mode 100644 index 0000000..aa976d9 --- /dev/null +++ b/business/2026-04-02_Глеб-Архангельский-Про-бизнес.md @@ -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. Станет ли придуманная бизнес-идея "делом", а не просто "бизнесом"? + + + + + diff --git a/business/2026-Q1.md b/business/2026-Q1.md index 50d2f5d..6447b91 100644 --- a/business/2026-Q1.md +++ b/business/2026-Q1.md @@ -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 diff --git a/business/cv-ideas.md b/business/cv-ideas.md index 76c69dd..50a9500 100644 --- a/business/cv-ideas.md +++ b/business/cv-ideas.md @@ -5,7 +5,8 @@ dom.event.clipboardevents.enabled - +* Сдеать свою приложеньку прототипирования?! + как раз KD тут может чрезвычайно решить многие проблемы! * Могу придумывать систему Пример: задание оценить способность Cursor AI ускорить разработку diff --git a/business/idea-proto-app.md b/business/idea-proto-app.md new file mode 100644 index 0000000..050ad6d --- /dev/null +++ b/business/idea-proto-app.md @@ -0,0 +1,11 @@ + +НАДО: + +* создать приложение для прототипирования сайтов, мобилок, приложений десктоп +* Kotlin -> JS тут сильно поможет для перезагрузки без переустановки +* по факту это может в итоге стать не просто прототипирования, а быстрый показ возможностей +* изучить Combine Multiplatform? + тогда получится на все платформы разом делать прототип? +* не делать обязательную регистрацию + structure.app хочет регистрацию + а нафиг её \ No newline at end of file diff --git a/business/now.md b/business/now.md index 6e18c39..3c89bc8 100644 --- a/business/now.md +++ b/business/now.md @@ -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/ * освежить знания про архитектуру см личку в ТГ diff --git a/business/raspberry.md b/business/raspberry.md new file mode 100644 index 0000000..db6c462 --- /dev/null +++ b/business/raspberry.md @@ -0,0 +1,4 @@ + +НАДО: + +* apt install qt6-base-dev cmake g++ \ No newline at end of file diff --git a/kmp/2026-Q1.md b/kmp/2026-Q1.md index 9045b54..63ac6e8 100644 --- a/kmp/2026-Q1.md +++ b/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 + итог: не вижу, не надо делать +* ввести
_ACTIVE_SHOULDS и регистрацию отладки сразу внутри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 diff --git a/kmp/now.md b/kmp/now.md index c0c9bc7..020ceb8 100644 --- a/kmp/now.md +++ b/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 -* влить ЗС -* записать в таблицу -* сделать отчёт в чат КМП - √ подготовить видео - √ посчитать количество сэкономленных строк кода - √ ввести скрипт НАДО: -* подготовить документ с графом связей между сущностями -* оформить ЗС - 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 -* ввести_ACTIVE_SHOULDS и регистрацию отладки сразу внутри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() сейчас в инфе о контакте фотка размытая выходит diff --git a/pskov.cfg b/pskov.cfg index 0866a7d..d354eca 100644 --- a/pskov.cfg +++ b/pskov.cfg @@ -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