Skip to content

Instantly share code, notes, and snippets.

View yaroslav-shlapak's full-sized avatar

Yaroslav Shlapak yaroslav-shlapak

View GitHub Profile
@yaroslav-shlapak
yaroslav-shlapak / TestDoubles.kt
Created October 23, 2025 17:04
The 5 Test Doubles as defined by Gerard Meszaros in "xUnit Test Patterns"
/**
* TLDR: The 5 Test Doubles
*
* 1. DUMMY: Fills parameters. (Passed in, but never used).
* 2. FAKE: Verifies State. (Has a real, simple implementation, e.g., an in-memory list).
* 3. STUB: Controls flow. (Provides "canned" answers, e.g., always returns 150).
* 4. SPY: Records calls. (Test "asks" the spy what happened, e.g., spy.sendCallCount).
* 5. MOCK: Verifies behavior. (Test "tells" the mock its expectations, then asks mock.verify()).
*/
@yaroslav-shlapak
yaroslav-shlapak / gist:d34ce123e8a9a3fadea891b1698f4935
Created September 1, 2020 20:57 — forked from psayre23/gist:c30a821239f4818b0709
Runtime Complexity of Java Collections
Below are the Big O performance of common functions of different Java Collections.
List | Add | Remove | Get | Contains | Next | Data Structure
---------------------|------|--------|------|----------|------|---------------
ArrayList | O(1) | O(n) | O(1) | O(n) | O(1) | Array
LinkedList | O(1) | O(1) | O(n) | O(n) | O(1) | Linked List
CopyOnWriteArrayList | O(n) | O(n) | O(1) | O(n) | O(1) | Array
@yaroslav-shlapak
yaroslav-shlapak / rozetka.html
Last active December 3, 2019 22:33
Simple script to parse goods names and price from the order print page saved as input.html to the html table that can be used to copy to spreadsheet
<!DOCTYPE html>
<html lang="en">
<head>
<script type="text/javascript">
function extract() {
let resultTable = document.getElementById('resultTable')
let html = loadPage('input.html');
let parsedDoc = new DOMParser().parseFromString(html, 'text/html');
let titles = parsedDoc.querySelectorAll(".print-cart-i-title")
@yaroslav-shlapak
yaroslav-shlapak / CompositeX509TrustManager.kt
Last active November 19, 2025 16:36
How to use certificates installed by user to Android system with OkHttp
import java.security.KeyStore
import java.security.KeyStoreException
import java.security.NoSuchAlgorithmException
import java.security.cert.CertificateException
import java.security.cert.X509Certificate
import javax.net.ssl.SSLContext
import javax.net.ssl.TrustManager
import javax.net.ssl.TrustManagerFactory
import javax.net.ssl.X509TrustManager
@yaroslav-shlapak
yaroslav-shlapak / Makefile.mk
Created June 26, 2019 14:49
How to generate chain of two certificates with selfsigned CA
DOMAIN ?= your.domain.com
COUNTRY := US
STATE := CA
COMPANY := MetricInsights.
# credits to: https://gist.github.com/fntlnz/cf14feb5a46b2eda428e000157447309
# usage:
@yaroslav-shlapak
yaroslav-shlapak / BarDataExtensions.kt
Created May 23, 2019 11:43
Extension to fix bar grouping on data with gaps
import androidx.annotation.FloatRange
import com.github.mikephil.charting.data.BarData
import timber.log.Timber
/**
* Created on 2019/05/22.
*/
/**
* Groups all BarDataSet objects this data object holds together by modifying the x-value of
* their entries.
@yaroslav-shlapak
yaroslav-shlapak / gist:c2b6ef164e2211fddeb4579c3a455c9c
Created January 29, 2019 09:49 — forked from adrbtk/gist:c8cb0381e7ce2283a77e2cc80aba40d3
Configure removing of logging in android release build
  1. Add next lines to the file proguard-rules.pro
-optimizations code/removal/*
-assumenosideeffects class android.util.Log {
    public static boolean isLoggable(java.lang.String, int);
    public static int v(...);
    public static int d(...);
    public static int i(...);
 public static int w(...);
import io.reactivex.Completable
import io.reactivex.Flowable
import io.reactivex.Observable
import io.reactivex.Single
import io.reactivex.disposables.CompositeDisposable
abstract class UseCase<out Type, in Params> where Type : Any {
internal val disposables = CompositeDisposable()