A tiny collection of Kotlin snippets that I find useful.
Keep in mind this is not an end all be all measurement since the jvm has indeterministic garbage collection but it can give you a general idea of whats taking time.
With return value
import android.support.annotation.StringDef | |
import android.text.Editable | |
import android.text.TextWatcher | |
import android.widget.EditText | |
@StringDef(PHONE_9_MASK, PHONE_8_MASK, CPF_MASK, ZIP_CODE_PT_BR, MONTH_YEAR, CREDIT_CARD) | |
@Retention(AnnotationRetention.SOURCE) | |
annotation class MaskType | |
const val PHONE_9_MASK = "(##) #####-####" |
#!/bin/bash | |
# Usage | |
# chmod +x semverdiff.sh | |
# Get diff between 1.0.0..1.0.1 | |
# ./semverdiff 1.0.1 | |
get_diff() { | |
sed -n "/^## \[$1\]/,/^## /p" CHANGELOG.md | egrep "^(-|\s+)" | |
} |
class MainActivity : AppCompatActivity(R.layout.activity_main) { | |
@Inject | |
lateinit var viewModel: MainActivityViewModel | |
@Inject | |
lateinit eventChannel: ConflatedBroadcastChannel<MainActivityView.Event> | |
private var isInitialised: Boolean = false |
class MainActivity : AppCompatActivity(R.layout.activity_main) { | |
@Inject | |
lateinit var viewModel: MainActivityViewModel | |
private var isInitialised: Boolean = false | |
override fun onCreate(savedInstanceState: Bundle?) { | |
super.onCreate(savedInstanceState) |
Latency Comparison Numbers (~2012) | |
---------------------------------- | |
L1 cache reference 0.5 ns | |
Branch mispredict 5 ns | |
L2 cache reference 7 ns 14x L1 cache | |
Mutex lock/unlock 25 ns | |
Main memory reference 100 ns 20x L2 cache, 200x L1 cache | |
Compress 1K bytes with Zippy 3,000 ns 3 us | |
Send 1K bytes over 1 Gbps network 10,000 ns 10 us | |
Read 4K randomly from SSD* 150,000 ns 150 us ~1GB/sec SSD |
@Composable | |
fun ParallaxScreen(modifier: Modifier = Modifier) { | |
val context = LocalContext.current | |
val scope = rememberCoroutineScope() | |
var data by remember { mutableStateOf<SensorData?>(null) } | |
DisposableEffect(Unit) { | |
val dataManager = SensorDataManager(context) | |
dataManager.init() |
based on https://morningcoffee.io/stable-pagination.html.
In order for this to work I had to use uuidgen -t
to generate time-based uuids otherwise the ordering would be messed up after 2-3 pages in.
sqlite3 pagination.db
[*.{kt,kts}] | |
# possible values: number (e.g. 2), "unset" (makes ktlint ignore indentation completely) | |
indent_size=4 | |
# true (recommended) / false | |
insert_final_newline=false | |
# possible values: number (e.g. 120) (package name, imports & comments are ignored), "off" | |
# it's automatically set to 100 on `ktlint --android ...` (per Android Kotlin Style Guide) | |
max_line_length=off | |
ktlint_standard_no-empty-first-line-in-method-block=disabled | |
ktlint_standard_trailing-comma-on-declaration-site=disabled |