Пару лет назад я писал о том, что GoPro зря забросила направление камер Session: это был очень компактный и удобный в использовании кубик без всяких ненужных вещей вроде огромного цветного экрана, в который при спуске на лыжах или катании на мотоцикле всё равно не можешь смотреть. К тому же, GoPro продолжают раз за разом выкатывать свой унылый угловатый дизайн с некрасивой асимметрией. Кажется, на рынке их удерживает только топовая стабилизация, которой нет у конкурентов.
Вчера DJI представили Action 2 — экшен-камеру как раз в таком форм-факторе "Маленький кубик". Совершенно очевидно (всем, кроме GoPro), что устройство с подобным контекстом использования действительно должно выглядеть как-то так. А для извращенцев модули вроде большого экрана есть отдельно и присоединяются к камере на магнитах. Вообще, магниты это спорный момент, на скорости может и слететь, но есть надежда, что такая опытная компания об этом подумала.
Стабилизацию тоже обещают крутую. Если это окажется правдой, то перед нами первый серьёзный гвоздь в крышку гроба GoPro. Рынок давно ждал альтернатив от сильного конкурента, и конкретно на DJI были направлены взгляды в этом вопросе.
#gadgets
🚀 Вышел стабильный 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