У меня тут три дня скачет давление, и я пользуюсь новым электронным тонометром. Это прибор размером чуть больше пачки сигарет, крепится на запястье и питается от пары ААА батареек. Он полностью автоматический: надел, нажал одну кнопку, всё.
Моё поколение застало, как измеряли давление наши родители: манжета на плечо, которую не всегда легко затянуть одной рукой. Необходимость вручную накачать её грушей, а усилие для этого требуется немаленькое — удивительно, как бабушки справлялись. Затем нужно правильно закрепить головку стетоскопа на сгибе локтя. И слушать, параллельно следя за аналоговой стрелкой и стравливая воздух в нужном темпе.
Технологии в этом отношении сделали гигантский шаг в плане удобства. Хотя ничего принципиально магического в современном тонометре нет: и электрический компрессор и возможность прибором определить сердцебиение были и раньше. Но развитие вот таких бытовых вещей в целом идёт по пути автоматизации и уменьшения размеров. Можно попредставлять, какая техника сейчас не слишком удобна, и куда её будут улучшать. Хотя, конечно, где-нибудь в пределе ТРИЗ намекает нам о том, что решать задачу нужно совсем иначе — например, собрать человеку новое тело, вообще не нуждающееся в измерении давления. Но это уже другая история.
#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