A bit deeper – Telegram
A bit deeper
204 subscribers
23 photos
2 videos
28 links
Админ: @ilyagulya
Английская версия: @abitdeeper_en
Download Telegram
Channel name was changed to «A bit deeper»
Небольшой апдейт!
В данный момент занимаюсь достаточно масштабным проектом для самообразования.
Пишу собственную реализацию виртуальной машины Dalvik на языке Rust. 🙂
По пути набирается достаточно много контента для блогпостов, так что в скором времени тут будет первая статья из цикла про Dalvik VM.
Статья будет у меня в блоге, а тут краткая выжимка и ссылка на статью.
Попутно делаю ребрендинг. Канал и блог теперь называются "A bit deeper" - таким образом пытаюсь подчеркнуть что я стараюсь писать контент как минимум чуть более глубокий чем большая часть условного "контента с медиума" или современного хабра.
👏431💩1
Сейчас пока болею на новогодних каникулах, решил заняться весёлой вещью - добавить поддержку WASM-JS таргета в семпл проекта на MVIKotlin/Decompose который я поддерживаю с того момента как его удалили из репозитория Compose Multiplatform
По пути оказалось что куча зависимостей пока что не поддерживает WASM-JS таргеты, так что я последовательно начал добавлять поддержку во все зависимости где нужно.
Первый PR уже готовятся мерджить и релизить новую бетку 🙂 https://github.com/badoo/Reaktive/pull/771
👍4🔥2🗿1
#public #events

Я давно заметил за собой любовь к тому, чтобы делиться знаниями с людьми.
С самого начала карьеры я всегда старался следить за миром разработки, последними новостями, изучать что-то за пределами своих рабочих обязанностей. А также пытался прививать людям эти знания и любовь к обучению. Достаточно часто я делал это вопреки их желаниям. Обратная связь от подобного подхода приводила к достаточно грустным последствиям - я не развивал свой потенциал и расстраивался в окружающей действительности.

Однако стремление никуда не исчезло!


За последний год я наблюдал, как формируются множество различных онлайн-сообществ и понял что контакты - самый ценный ресурс в карьере и в жизни.
Я развивал навык нетворкинга совершенно не в той мере, в которой способен.
В связи с этим, я принял решение двигаться в сторону большей публичности.

Развитие навыков публичных выступлений, нетворкинга и, потенциально, преподавания считаю своими New Year Resolutions 🙂
Организовать сообщество людей, желающих общаться, учиться и делиться своими знаниями с миром, выглядит наиболее эффективным способом развить перечисленные выше навыки.
Ровно этим я и собираюсь заняться в грядущие месяцы.
🔥72
Классную статью тут нашёл https://unkey.dev/blog/uuid-ux
Про то как сделать более приятные для разработки уникальные идентификаторы без потери энтропии
👍2🔥1
Слава JetBrains и фиче Local history!
Я случайно удалил папку с проектом который сегодня писал весь день.
Попытался восстановить через всякие тулзы для восстановления файлов - безуспешно.
В итоге попытал удачу:
1. Создал пустую папку проекта заново.
2. Открыл её в IDEA и открыл Local History.
3. Успешно нашёл изменение в котором удаляется весь проект и ревертнул его 🥳
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10
UPD: рано радовался, половина файлов пустые 🙂
Видимо это знак - буду разрабатывать игру с нуля на стримах :D
😢9👍2
Недавно приехал мой микрофон из Питера, но оказалось что где-то потерялось крепление к штативу.
Я потратил две недели в попытках найти замену, и сегодня попытки увенчались успехом.
Так что в скором времени буду стримить как я разрабатываю свою игру на Flutter в прямом эфире 🙂
🔥12
Audio
🔥4
Немного про платформу Intellij

Сегодня у меня на работе была небольшая задача - нужно было исправить названия строковых ресурсов в нашем проекте - избавиться от точек.
Было: 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!
22🔥5👍4👏1