Skip to content

Instantly share code, notes, and snippets.

View vinaysshenoy's full-sized avatar

Vinay Shenoy vinaysshenoy

View GitHub Profile
@vinaysshenoy
vinaysshenoy / provider.kt
Last active November 29, 2022 16:31
Onion layers
interface Provider<T, U> {
fun provide(params: U?): T
}
class DatabaseProvider: Provider<User, string> {
override fun provide(id: string?): User {
// Query DB here
}
}
@vinaysshenoy
vinaysshenoy / fix.sh
Created September 28, 2022 05:15
Git LFS BS (Encountered files)
git rm .gitattributes
git reset .
git checkout .
@vinaysshenoy
vinaysshenoy / files sorted by size.sh
Last active February 2, 2022 03:29
macOS list files by size
find . -type f -print0 | xargs -0 ls -l | sort -k5,5rn > ~/files.txt
find -E . -regex '.*\.(jpg|png)' -print0 | xargs -0 ls -l | sort -k5,5rn
find -E . -regex '.*\.(jpg|jpeg|png|hdr|exr)' -print0 | xargs -0 stat -f "%N,%z" > ./files.csv
@vinaysshenoy
vinaysshenoy / .profile
Created May 27, 2021 05:21
Delete gradle log files older than 7 days on login
export GRADLE_USER_HOME="$HOME/Dev/.gradle"
# Delete all gradle log files older than 7 days
find $GRADLE_USER_HOME/daemon -type f -mtime +7 -iregex '.*\.\(dmp\|log\)$' -delete
@vinaysshenoy
vinaysshenoy / FirstFragment.kt
Created September 30, 2020 07:49
Render a view to a Bitmap of a specific size
package `in`.obvious.android.bitmaptest
import android.graphics.Bitmap
import android.graphics.Canvas
import android.graphics.Matrix
import android.graphics.RectF
import android.os.Bundle
import android.os.Handler
import android.os.Looper
import android.view.LayoutInflater
@vinaysshenoy
vinaysshenoy / CompositeExtension.kt
Created September 12, 2020 05:52
Composite JUnit5 extension for composing a group of domain specific extensions
import org.junit.jupiter.api.extension.AfterAllCallback
import org.junit.jupiter.api.extension.AfterEachCallback
import org.junit.jupiter.api.extension.AfterTestExecutionCallback
import org.junit.jupiter.api.extension.BeforeAllCallback
import org.junit.jupiter.api.extension.BeforeEachCallback
import org.junit.jupiter.api.extension.BeforeTestExecutionCallback
import org.junit.jupiter.api.extension.ConditionEvaluationResult
import org.junit.jupiter.api.extension.ExecutionCondition
import org.junit.jupiter.api.extension.Extension
import org.junit.jupiter.api.extension.ExtensionContext
@vinaysshenoy
vinaysshenoy / Mobius.kt
Last active May 19, 2020 08:45
Exploratory DSL for rendering a representing a Mobius graph
mobius("Login") {
state("Default") {
events {
"InputChanged" leadsTo "Default"
"SubmitClicked" leadsTo "ValidateInput"
}
}
transient("ValidateInput") {
@vinaysshenoy
vinaysshenoy / RequestPermissions.kt
Last active April 9, 2020 10:00
Automatic permission management
import android.app.Activity
import android.content.pm.PackageManager
import androidx.core.app.ActivityCompat
import io.reactivex.Observable
import io.reactivex.ObservableSource
import io.reactivex.ObservableTransformer
import io.reactivex.rxkotlin.cast
import io.reactivex.rxkotlin.ofType
import io.reactivex.subjects.PublishSubject
import org.simple.clinic.router.screen.ActivityPermissionResult
#!/bin/bash
sourceDirectory=${1}
targetDirectory=${2}
changedFile=
for file in $(ls $sourceDirectory)
do
sourceFile="$sourceDirectory/$file"
@vinaysshenoy
vinaysshenoy / bootstrap.sh
Last active November 1, 2023 07:03
Bootstrap file to setup a new account on macOS (10.15+)
#!/bin/zsh
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew install git
brew install jenv
brew install nvm
mkdir ~/.nvm
brew cask install gpg-suite
brew tap AdoptOpenJDK/openjdk