Мастерская 3/4. Кассетницы — моё спасение.
Много лет назад купил на Али простенькие модульные кассетницы с ящичками разных размеров. Сразу знал, что под электронные компоненты, но концепция их хранения менялась с тех пор неоднократно. Наконец, добрался, отсортировал всё, что было, сделал этикетки. Не сказать, чтоб много, но и свободных ячеек почти половина: можно докупать и заполнять.
А под крепеж и всякие бытовые мелочи купил серию от российской фирмы "Стелла-техник" и напечатал в них вертикальные вставки-перегородки. Что удобно, так это возможность полностью вытащить любой ящичек и взять с собой.
В целом такая система нужна чаще, чем кажется. И применяется в двух сценариях. Первый самый понятный: вам нужен, условно, винт М3 (саморез, дюбель, конфирмат итд), вы совершенно точно знаете, где его брать.
Но второй сценарий не менее важен. Вы купили шкаф, после сборки остались стяжки (наклейки, гвозди, шканты). И у вас есть совершенно определенные места, куда вы сразу же это всё складываете. Никакого захламления.
Я очень доволен. Теперь найти бы время попаять что-нибудь.
#diy#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