Вернулся в фотополимерную печать, и сразу с болью вспомнил, как много там возни. Да, детализация получается такая, что лучшим FDM не снилась, но всё-таки важнейший недостаток в том, что о возникновении проблемы при печати становится известно только к её середине, когда моделька уже на какую-то высоту покажется из жидкости. Из-за этого на тесты уходит и дорогой полимер и время. Тем более, после неудачи нередко нужно целиком сливать резину, очищать плёнку, всё мыть и так далее.
Впрочем, за прошедшие годы это направление развилось. Фотополимер стал дешевле и, что самое главное, появились водосмываемые варианты. Если раньше приходилось вонять дорогим и сложным к добыче изопропанолом, но сейчас тёплая водичка, доступная в любых количествах, решает проблему отмывки. Хотя сам полимер тоже сильно воняет. Появились версии без запаха, но они-то как раз спиртосмываемые.
Короче, почти неделю я бился с засветкой, менял настройки и расположение детали. То отвалится с поддержек, то слои смещаются, то к плёнке прилипнет. А оказалось всё просто: проблема механики. Рельса стала люфтить, пришлось разбирать её и натягивать эксцентрик. Никогда не стоит забывать проверять все аспекты. Если устройство состоит из химии и механики, то стоит учитывать возможный косяк и там и там.
Увидел, что в какой-то момент в моей мастерской одновременно работало два принтера. Да у меня же... принт-ферма!
#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