Позавчера Еврокомиссия приняла закон, который обязывает все компании без исключения использовать USB Type-C, как основной стандарт для зарядного устройства. С осени 2024 года гаджеты в Европе должны уже полностью перейти на новую схему.
Есть косвенный побочный эффект: выпуск устаревших устройств с Micro USB в Европе будет невозможен. Я вот до сих пор (редко, но бывает) наталкиваюсь на новые устройства, которые можно купить в магазине прямо сейчас, и у которых почему-то Micro USB вместо Type-C. Видимо, какие-то очень древние складские залежи.
Но куда важнее воздействие на компанию Apple. Годами в айфонах упорно отказывались делать единый стандарт зарядки. Годами люди вынуждены были заряжать не-Apple устройства одним способом, а Apple другим. Более того: даже на новых iPad уже Type-C, но на iPhone до сих пор Lightning. Чем только это не оправдывалось: скоростью, безопасностью, экосистемой. Но на самом деле оправданий нет.
Цитата из одного старого поста @amima:
«Пол Грэм, инвестор и основатель самого авторитетного стартап-акселератора YCombinator, как-то писал: «Uber is so obviously a good thing that you can measure how corrupt cities are by how hard they try to suppress it». Есть явления, общественная польза которых настолько очевидна и проверена временем, что они сами по себе являются мерилом нормы.»
Одинаковый стандарт зарядки и порта передачи данных — одна из таких вещей. Начиная от уменьшения количества проводов в каждом доме, и заканчивая возможностью стрельнуть провод вообще у любого человека, у которого он есть с собой. Со стороны Apple было очень по-мудачески годами выдумывать оправдания вместо перехода на Type-C. Ну, теперь, если они хотят продолжать торговать в Европе, у них не останется выхода. Ждём на очередной конференции объявление об этом, как о революционном собственном решении.
#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