Skip to content

Instantly share code, notes, and snippets.

@mutkuensert
mutkuensert / Log.cpp
Created February 1, 2026 11:16
A Logging utility for Arduino projects
#include "Log.h"
void logf(const char* func, int line, const char* fmt, ...) {
Serial.print("[");
Serial.print(func);
Serial.print(":");
Serial.print(line);
Serial.print("] ");
char buffer[128];
@mutkuensert
mutkuensert / ScrollHintEffect.kt
Created January 19, 2026 14:44
A composable that indicates to the user there is a scrollable content
@Composable
fun ScrollHintEffect(content: @Composable (scrollState: ScrollState) -> Unit) {
var hasHinted by rememberSaveable { mutableStateOf(false) }
val density = LocalDensity.current
val scrollState = rememberScrollState()
LaunchedEffect(Unit) {
delay(300)
if (!hasHinted) {
hasHinted = true
import android.view.View
import android.view.ViewGroup
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import androidx.core.view.updateMargins
import androidx.core.view.updatePadding
import com.example.R
fun View.addStatusBarPadding() {
ViewCompat.setOnApplyWindowInsetsListener(this) { v, insets ->
void scanScreenAddress() {
Wire.begin();
Serial.begin(4800);
while (!Serial)
; // Needed for some cards, No problem for Nano
Serial.println("Scanning I2C devices...");
byte count = 0;
for (byte addr = 1; addr < 127; addr++) {
#include <iostream>
uint8_t mod256(uint16_t value) {
return static_cast<uint8_t>(value % 256);
}
int main() {
uint16_t sum = 0x02+ 0x01+ 0x00+0xFF+ 0xFF;
uint8_t result = mod256(sum);
std::cout <<std::hex<< static_cast<int>(result) << std::endl;
return 0;
}
@mutkuensert
mutkuensert / Base64StringToInputStream.kt
Last active May 13, 2025 10:26
An example that converts base64 string to an input stream without creating a new byte array
import android.util.Base64
import android.util.Base64InputStream
import org.apache.commons.io.input.ReaderInputStream //implementation 'commons-io:commons-io:2.19.0' https://central.sonatype.com/artifact/commons-io/commons-io?smo=true
import tr.com.avivasa.mobileapp.base.BasePresenter
import java.io.StringReader
import java.nio.charset.StandardCharsets
val base64String = "someBase64String"
val inputStream = Base64InputStream(
ReaderInputStream.builder()
@mutkuensert
mutkuensert / SpannedString.kt
Last active January 13, 2026 08:35
Adds a click action to the specific part of a text resource.
import android.graphics.Typeface
import android.text.Annotation
import android.text.SpannedString
import android.text.style.ForegroundColorSpan
import android.text.style.StrikethroughSpan
import android.text.style.StyleSpan
import android.text.style.UnderlineSpan
import androidx.annotation.StringRes
import androidx.compose.runtime.Composable
import androidx.compose.ui.graphics.Color
import android.content.Intent
import android.net.Uri
import android.os.Handler
import android.os.Looper
import android.os.ParcelFileDescriptor
import androidx.activity.ComponentActivity
import androidx.activity.result.ActivityResultLauncher
import androidx.activity.result.contract.ActivityResultContracts
import timber.log.Timber
import java.io.ByteArrayInputStream
fun <T : Any> T.equalsAtLeastOne(arg1: T? = null, arg2: T? = null, arg3: T? = null): Boolean {
return this == arg1 || this == arg2 || this == arg3
}
@mutkuensert
mutkuensert / NullChecks.kt
Created February 19, 2025 11:58
Useful null check methods
import kotlin.contracts.ExperimentalContracts
import kotlin.contracts.contract
@OptIn(ExperimentalContracts::class)
fun allNotNull(
arg1: Any?,
arg2: Any?,
arg3: Any? = Any(),
arg4: Any? = Any(),
arg5: Any? = Any()