Небольшой апдейт!
В данный момент занимаюсь достаточно масштабным проектом для самообразования.
Пишу собственную реализацию виртуальной машины Dalvik на языке Rust. 🙂
По пути набирается достаточно много контента для блогпостов, так что в скором времени тут будет первая статья из цикла про Dalvik VM.
Статья будет у меня в блоге, а тут краткая выжимка и ссылка на статью.
Попутно делаю ребрендинг. Канал и блог теперь называются "A bit deeper" - таким образом пытаюсь подчеркнуть что я стараюсь писать контент как минимум чуть более глубокий чем большая часть условного "контента с медиума" или современного хабра.
В данный момент занимаюсь достаточно масштабным проектом для самообразования.
Пишу собственную реализацию виртуальной машины Dalvik на языке Rust. 🙂
По пути набирается достаточно много контента для блогпостов, так что в скором времени тут будет первая статья из цикла про Dalvik VM.
Статья будет у меня в блоге, а тут краткая выжимка и ссылка на статью.
Попутно делаю ребрендинг. Канал и блог теперь называются "A bit deeper" - таким образом пытаюсь подчеркнуть что я стараюсь писать контент как минимум чуть более глубокий чем большая часть условного "контента с медиума" или современного хабра.
👏4❤3⚡1💩1
Не могу не поделиться с вами этим шедевром 🙂
https://youtu.be/9qljpi5jiMQ
https://youtu.be/9qljpi5jiMQ
YouTube
GitHub Actions Feels Bad
To try everything Brilliant has to offer—free—for a full 30 days, visit https://brilliant.org/fasterthanlime/. The first 200 of you will get 20% off Brilliant’s annual premium subnoscription.
This video was sponsored by Brilliant.
Follow me on Mastodon: …
This video was sponsored by Brilliant.
Follow me on Mastodon: …
Сейчас пока болею на новогодних каникулах, решил заняться весёлой вещью - добавить поддержку WASM-JS таргета в семпл проекта на MVIKotlin/Decompose который я поддерживаю с того момента как его удалили из репозитория Compose Multiplatform
По пути оказалось что куча зависимостей пока что не поддерживает WASM-JS таргеты, так что я последовательно начал добавлять поддержку во все зависимости где нужно.
Первый PR уже готовятся мерджить и релизить новую бетку 🙂 https://github.com/badoo/Reaktive/pull/771
По пути оказалось что куча зависимостей пока что не поддерживает WASM-JS таргеты, так что я последовательно начал добавлять поддержку во все зависимости где нужно.
Первый PR уже готовятся мерджить и релизить новую бетку 🙂 https://github.com/badoo/Reaktive/pull/771
👍4🔥2🗿1
#public #events
Я давно заметил за собой любовь к тому, чтобы делиться знаниями с людьми.
С самого начала карьеры я всегда старался следить за миром разработки, последними новостями, изучать что-то за пределами своих рабочих обязанностей. А также пытался прививать людям эти знания и любовь к обучению. Достаточно часто я делал это вопреки их желаниям. Обратная связь от подобного подхода приводила к достаточно грустным последствиям - я не развивал свой потенциал и расстраивался в окружающей действительности.
Однако стремление никуда не исчезло!
За последний год я наблюдал, как формируются множество различных онлайн-сообществ и понял что контакты - самый ценный ресурс в карьере и в жизни.
Я развивал навык нетворкинга совершенно не в той мере, в которой способен.
В связи с этим, я принял решение двигаться в сторону большей публичности.
Развитие навыков публичных выступлений, нетворкинга и, потенциально, преподавания считаю своими New Year Resolutions 🙂
Организовать сообщество людей, желающих общаться, учиться и делиться своими знаниями с миром, выглядит наиболее эффективным способом развить перечисленные выше навыки.
Ровно этим я и собираюсь заняться в грядущие месяцы.
Я давно заметил за собой любовь к тому, чтобы делиться знаниями с людьми.
С самого начала карьеры я всегда старался следить за миром разработки, последними новостями, изучать что-то за пределами своих рабочих обязанностей. А также пытался прививать людям эти знания и любовь к обучению. Достаточно часто я делал это вопреки их желаниям. Обратная связь от подобного подхода приводила к достаточно грустным последствиям - я не развивал свой потенциал и расстраивался в окружающей действительности.
Однако стремление никуда не исчезло!
За последний год я наблюдал, как формируются множество различных онлайн-сообществ и понял что контакты - самый ценный ресурс в карьере и в жизни.
Я развивал навык нетворкинга совершенно не в той мере, в которой способен.
В связи с этим, я принял решение двигаться в сторону большей публичности.
Развитие навыков публичных выступлений, нетворкинга и, потенциально, преподавания считаю своими New Year Resolutions 🙂
Организовать сообщество людей, желающих общаться, учиться и делиться своими знаниями с миром, выглядит наиболее эффективным способом развить перечисленные выше навыки.
Ровно этим я и собираюсь заняться в грядущие месяцы.
🔥7❤2
A bit deeper
Сейчас пока болею на новогодних каникулах, решил заняться весёлой вещью - добавить поддержку WASM-JS таргета в семпл проекта на MVIKotlin/Decompose который я поддерживаю с того момента как его удалили из репозитория Compose Multiplatform По пути оказалось…
Reaktive смерджили мой PR!
UPD: уже порелизили! https://github.com/badoo/Reaktive/releases/tag/2.1.0-beta01
Это была целая эпопея, но в итоге всё работает 🙂
https://github.com/badoo/Reaktive/pull/771
На подходе kotlinx.html
https://github.com/Kotlin/kotlinx.html/pull/251
UPD: уже порелизили! https://github.com/badoo/Reaktive/releases/tag/2.1.0-beta01
Это была целая эпопея, но в итоге всё работает 🙂
https://github.com/badoo/Reaktive/pull/771
На подходе kotlinx.html
https://github.com/Kotlin/kotlinx.html/pull/251
GitHub
Support wasmJs target by IlyaGulya · Pull Request #771 · badoo/Reaktive
Fixes #767
In this PR:
I've shared most of js sources with wasmJs by introducing the jsWasmJsCommon sourceSets.
Enabled gradle configuration cache
Upgraded Kotlin Coroutines to 1.8.0-RC2
In this PR:
I've shared most of js sources with wasmJs by introducing the jsWasmJsCommon sourceSets.
Enabled gradle configuration cache
Upgraded Kotlin Coroutines to 1.8.0-RC2
🔥7👍5❤3
Классную статью тут нашёл https://unkey.dev/blog/uuid-ux
Про то как сделать более приятные для разработки уникальные идентификаторы без потери энтропии
Про то как сделать более приятные для разработки уникальные идентификаторы без потери энтропии
👍2🔥1
Слава JetBrains и фиче Local history!
Я случайно удалил папку с проектом который сегодня писал весь день.
Попытался восстановить через всякие тулзы для восстановления файлов - безуспешно.
В итоге попытал удачу:
1. Создал пустую папку проекта заново.
2. Открыл её в IDEA и открыл Local History.
3. Успешно нашёл изменение в котором удаляется весь проект и ревертнул его🥳
Я случайно удалил папку с проектом который сегодня писал весь день.
Попытался восстановить через всякие тулзы для восстановления файлов - безуспешно.
В итоге попытал удачу:
1. Создал пустую папку проекта заново.
2. Открыл её в IDEA и открыл Local History.
3. Успешно нашёл изменение в котором удаляется весь проект и ревертнул его
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10
UPD: рано радовался, половина файлов пустые 🙂
Видимо это знак - буду разрабатывать игру с нуля на стримах :D
Видимо это знак - буду разрабатывать игру с нуля на стримах :D
😢9👍2
Немного про платформу Intellij
Сегодня у меня на работе была небольшая задача - нужно было исправить названия строковых ресурсов в нашем проекте - избавиться от точек.
Было:
Стало:
Зачем это было нужно: стандартная инспекция
Соответственно, задача стояла в том чтобы перелопатить полторы тысячи ресурсов, делать это руками конечно же никакого желания и времени нету.
Также нужно не забывать что нужно не только переименовать ресурсы, но и их использование в
На ум пришла давняя идея - сделать плагин для
И тут я с удивлением обнаружил что такой инструмент давно существует в IDE!
Называется он
Внутри этого скрипта можно пользоваться всеми апи платформы Intellij которые обычно доступны при разработке плагинов для IDE. Также из скрипта можно получить значение последнего выполненного выражения, его будет видно в логе запуска скрипта.
Таким образом, задача упростилась донельзя:
1. Берём текущий открытый проект:
2. Ищем все XML файлы в проекте (по пути отфильтровываем сгенерированные):
3. Переименовываем строковые ресурсы:
4. Ищем все XML атрибуты в проекте в которых есть значение начинающееся с
5. Заменяем точки в этих атрибутах на underscore:
Вот таким нехитрым способом я смог безопасно выполнить нетривиальный рефакторинг в проекте.
Пользуйтесь!
Сегодня у меня на работе была небольшая задача - нужно было исправить названия строковых ресурсов в нашем проекте - избавиться от точек.
Было:
profile.expandСтало:
profile_expandЗачем это было нужно: стандартная инспекция
Find Usages в Android Studio не умеет понимать что использование R.string.profile_expand в коде это на самом деле использование ресурса profile.expand. Она работает только с названиями ресурсов у которых есть только андерскоры: profile_expand.Соответственно, задача стояла в том чтобы перелопатить полторы тысячи ресурсов, делать это руками конечно же никакого желания и времени нету.
Также нужно не забывать что нужно не только переименовать ресурсы, но и их использование в
xml по всему проекту.На ум пришла давняя идея - сделать плагин для
Intellij который позволит компилировать произвольный код для выполнения каких-то единичных операций прямо в IDE.И тут я с удивлением обнаружил что такой инструмент давно существует в IDE!
Называется он
IDE Scripting Console и получить к нему доступ можно через Cmd + Shift + A и поиск по строке IDE Scripting Console. Можете увидеть пример на скриншоте в первом комментарии к этому посту.Внутри этого скрипта можно пользоваться всеми апи платформы Intellij которые обычно доступны при разработке плагинов для IDE. Также из скрипта можно получить значение последнего выполненного выражения, его будет видно в логе запуска скрипта.
Таким образом, задача упростилась донельзя:
1. Берём текущий открытый проект:
val project = ProjectManager.getInstance().openProjects.first()
2. Ищем все XML файлы в проекте (по пути отфильтровываем сгенерированные):
val baseDir = VfsUtil.findFile(Paths.get(project.basePath), true)!!
val psiManager = PsiManager.getInstance(project)
val xmlFiles =
VfsUtil
.collectChildrenRecursively(baseDir)
.asSequence()
.filter { it.extension == "xml" }
.filterNot { it.path.contains("build") }
.mapNotNull { psiManager.findFile(it) as? XmlFile }
3. Переименовываем строковые ресурсы:
xmlFiles
.filter { it.virtualFile.path.contains("/res/values/") }
.mapNotNull { xmlFile -> xmlFile.rootTag?.findSubTags("string")?.asSequence() }
.flatten()
.mapNotNull { stringTag -> stringTag.getAttribute("name") }
.filter { nameAttribute -> nameAttribute.value?.contains('.') == true }
.forEach {
val oldName = it.value!!
val newName = oldName.replace('.', '_')
WriteCommandAction.runWriteCommandAction(project) {
it.setValue(newName)
}
}
4. Ищем все XML атрибуты в проекте в которых есть значение начинающееся с
@string и в котором присутствуют точки:fun XmlFile.getAllAttributesRecursively() =
generateSequence(
seed = listOf(element = rootTag!!),
nextFunction = {
val subTags = it.flatMap { it.subTags.toList() }
subTags.ifEmpty { null }
},
)
.flatMap { it.asSequence() }
.flatMap { it.attributes.asSequence() }
val allXmlAttributes = xmlFiles.flatMap { xmlFile ->
xmlFile
.getAllAttributesRecursively()
.filter { it.value!!.startsWith("@string/") }
.filter { it.value!!.contains('.') }
}
5. Заменяем точки в этих атрибутах на underscore:
allXmlAttributes.forEach {
WriteCommandAction.runWriteCommandAction(project) {
it.setValue(
it.value!!.replace('.', '_')
)
}
}Вот таким нехитрым способом я смог безопасно выполнить нетривиальный рефакторинг в проекте.
Пользуйтесь!
🔥20👍5👏3
Привет, друзья! 👋
Как вы возможно помните, почти 4 месяца назад мне пришла в голову идея создать IT-сообщество в Алматы.
Думал, буду делиться с вами новостями по ходу дела, но что-то не сложилось 😅
Так что сейчас просто расскажу, как всё идёт на текущий момент.
Я пообщался с Алексеем Гладковым (@mobiledevnews), и договорился что открою локальное сообщество Mobile Broadcast в Алматы. Утрясли все вопросы и я приступил к делу.
Для начала я познакомился с программным директором местной площадки, в которой можно бесплатно проводить мероприятия (бывшая Точка Кипения в Алматы - Qaynar Bulaq). Это был очень интересный опыт, дама невероятно заряженная, всё пыталась зазвать меня в кучу других активностей помимо сообщества. 😃
Мы с ней договорились добавить в расписание регулярные встречи моего сообщества по субботам.
Следующим шагом было создание Алматинского чатика, и тут понеслось! 🚀
Как только объявили о создании, сразу пришло 60 человек. Я прорекламировал чатик в местных IT-сообществах, и сейчас у нас уже 113 участников, здорово же!
Закономерно, пока что основную часть сообщества составляют Android разработчики. 😁
Сначала думал, буду проводить каждую неделю, но оказалось не так просто. 😅
Сейчас встречаемся раз в 2 недели, в самый раз.
В прошлую субботу была уже десятая, юбилейная!
В общем, опыт получился очень позитивный! 😊
Благодаря сообществу я познакомился с интересными людьми, теперь мы общаемся не только на встречах, ходим в кафешки, лазим в горы, играем в настолки.
А сами мероприятия проводить - совсем не сложно, даже в удовольствие!
Главное - это сильно помогло в эмиграции. Теперь я понимаю что самый лучший вариант как не остаться замкнутым в своём пузыре - взять всё в свои руки и начать искать людей с которыми будешь проводить досуг. Организовывать всё самому, потому что за тебя это никто не сделает.
Далее были мысли сделать какое-то подобие митапа, как только соберусь с силами - займусь этим.
Как говорится, Stay tuned!
Как вы возможно помните, почти 4 месяца назад мне пришла в голову идея создать IT-сообщество в Алматы.
Думал, буду делиться с вами новостями по ходу дела, но что-то не сложилось 😅
Так что сейчас просто расскажу, как всё идёт на текущий момент.
Я пообщался с Алексеем Гладковым (@mobiledevnews), и договорился что открою локальное сообщество Mobile Broadcast в Алматы. Утрясли все вопросы и я приступил к делу.
Для начала я познакомился с программным директором местной площадки, в которой можно бесплатно проводить мероприятия (бывшая Точка Кипения в Алматы - Qaynar Bulaq). Это был очень интересный опыт, дама невероятно заряженная, всё пыталась зазвать меня в кучу других активностей помимо сообщества. 😃
Мы с ней договорились добавить в расписание регулярные встречи моего сообщества по субботам.
Следующим шагом было создание Алматинского чатика, и тут понеслось! 🚀
Как только объявили о создании, сразу пришло 60 человек. Я прорекламировал чатик в местных IT-сообществах, и сейчас у нас уже 113 участников, здорово же!
Закономерно, пока что основную часть сообщества составляют Android разработчики. 😁
Сначала думал, буду проводить каждую неделю, но оказалось не так просто. 😅
Сейчас встречаемся раз в 2 недели, в самый раз.
В прошлую субботу была уже десятая, юбилейная!
В общем, опыт получился очень позитивный! 😊
Благодаря сообществу я познакомился с интересными людьми, теперь мы общаемся не только на встречах, ходим в кафешки, лазим в горы, играем в настолки.
А сами мероприятия проводить - совсем не сложно, даже в удовольствие!
Главное - это сильно помогло в эмиграции. Теперь я понимаю что самый лучший вариант как не остаться замкнутым в своём пузыре - взять всё в свои руки и начать искать людей с которыми будешь проводить досуг. Организовывать всё самому, потому что за тебя это никто не сделает.
Далее были мысли сделать какое-то подобие митапа, как только соберусь с силами - займусь этим.
Как говорится, Stay tuned!
❤22🔥5👍4👏1