В Телеграме есть функция "Похожие каналы". Не знаю, как платформа оценивает похожесть, но, думаю, что это комбинированная метрика из подписчиков и ключевых слов.
Так вот, тёзка Denull сделал прикольный кластеризатор каналов. Я просканировал свой канал на глубину 3 и обозначил кластеры.
Какие интересные выводы из этого можно сделать:
1. Каналов про айти так много (возможно именно в ближайших к моему, но я думаю, что и в целом), что они, в свою очередь, тоже делятся на выраженные кластеры: мобилки, фронт, дизайн и т.д.
2. Больше всего айтишных каналов про ML. Это очень модно.
3. Канал ровно на серединке между "Мобильной разработкой" и "Компьютерной безопасностью" — это канал про компьютерную безопасность в мобильной разработке! Прикольно.
4. Каналы со всякими новостями практически неотделимы от каналов с политикой.
5. Если якобы тематический канал находится очень близко к кластеру "Новости и политика", то, вероятно, этот канал часто постит нетематический ширпотребный мусор для разгона трафика. То есть, я бы на такие не подписывался.
6. Вообще нет кластера по настолкам. Похоже, эта тема довольно слабо освещается в блогах.
7. Стартапы и инвестиции находятся где-то между политикой и машинным обучением. Неспроста.
#web
🚀 Вышел стабильный JavaScript движок от Google для Android
Новая стабильная библиотека Jetpack JavaScript Engine позволит разработчикам выполнять JS код в изолированной и ограниченной среде.
class MainActivity : ComponentActivity() {
// Теперь nullable, без lateinit
private var jsSandbox: JavaScriptSandbox? = null
private var jsIsolate: JavaScriptIsolate? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
if (!JavaScriptSandbox.isSupported()) {
Log.e("JS", "JavaScriptSandbox не поддерживается")
return
}
lifecycleScope.launch {
// Создаём и сохраняем в nullable-поле
jsSandbox = JavaScriptSandbox
.createConnectedInstanceAsync(applicationContext)
.await()
jsIsolate = jsSandbox?.createIsolate()
// При выполнении гарантируем, что jsIsolate != null
val result: String = jsIsolate
?.evaluateJavaScriptAsync(JS_SCRIPT_SCRING)
?.await()
?: "Ошибка: isolate не инициализирован"
Log.d("JS", "Результат выполнения: $result")
}
}
override fun onDestroy() {
super.onDestroy()
// Закрываем только если не null
jsIsolate?.close()
jsSandbox?.close()
}
}
#jetpack#js