Некоторые области удивительным образом игнорируют прогресс в других областях. Для меня самым характерным примером являются, пожалуй, бортовые компьютеры автомобилей.
Вчера я ехал на такси Комфорт+, это была вполне приличная и не старая Kia Optima. Водитель параллельно со своим телефоном включил встроенный навигатор, и он ожидаемо оказался очень плох. Мало того, что даже близко не адаптирован под Россию, с убогой не детализированной картой, так ещё и жутко тормозил: FPS анимаций в районе 1-2.
Потом я вспомнил, как мы с друзьями в Москве брали в каршеринге Genesis G70 — Южно-Корейский автомобиль премиум-класса с ценой от 2.5 млн рублей. И там стоял адаптированный бортовой компьютер под управлением Android. Надо ли говорить, что скорость его работы была настолько необъяснимо отстойной, что даже самый дешманский ноунейм китайфон справился бы с задачей навигации лучше?
Каждый раз, когда я вижу экран бортового компьютера автомобиля, я будто смотрю через маленькое окошко в прошлое 20-летней давности. И по скорости работы и по функциональным возможностям всё поразительно плохо. Можно оправдывать это якобы безопасностью (сторонний софт нельзя ставить, чтобы он не мог повлиять на движение автомобиля), но на деле эти цепи легко разделяются: двигатель и важные узлы в одном месте, а навигатор, информация с датчиков, климат-контроль — в другом, на другом процессоре с другой областью памяти.
Автомобильная промышленность в целом довольно консервативна. Поэтому большинство серийных моделей выглядят одинаково скучно, о каких-то крутых новых функциональных фишках мы слышим раз в десятилетие, а какие-то изобретенные полвека назад вещи до сих пор есть далеко не в каждой модели (например, парктроники). Но иногда до абсурда доходит: в тачке за пару лямов компьютер хуже, чем китайский планшет за десятку.
#gadgets#life
🚀 Вышел стабильный 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