Skip to content

Instantly share code, notes, and snippets.

View brownsoo's full-sized avatar
🐢
Step by step

brownsoo brownsoo

🐢
Step by step
View GitHub Profile
@brownsoo
brownsoo / ajax_refresh_token_sample.js
Last active September 26, 2023 07:35
토큰 갱신을 위한 Ajax 목업
class Rest {
static apiBaseUrl = '';
static getApiHeader({withoutContentType = false} = {}) {
const header = {};
header['reqVersion'] = 2;
// if (authentic) {
// header['Authorization'] = this.getAuthToken();
// }
@brownsoo
brownsoo / ajax_retry.js
Last active January 8, 2023 14:39
jquery ajax retry workout
// extends ajax
$.ajax = (($oldAjax) => {
var df = $.Deferred();
// on fail, retry by creating a new Ajax deferred
function check(self, status) {
console.log("check " + status + " => " + self.retries);
const shouldRetry = status != 'success' && status != 'parsererror';
if (shouldRetry && self.retries > 0) {
setTimeout(() => {
console.log("retry " + self.retries);
@brownsoo
brownsoo / KVOBindingImplements.swift
Created November 23, 2021 08:36
KVO Binding sample
/// 바인딩
private var observations: [NSKeyValueObservation] = []
private var viewModel = ExpenseViewModel()
// 뷰 바인딩
observations = [
viewModel.observe(\.price) {
let price = $0 ?? 0.0
self.updatePriceText(with: price)
self.changesPublisher.onNext(1)
@brownsoo
brownsoo / KVOViewModel.swift
Created November 23, 2021 08:33
ViewModel for KVO example
class ExpenseViewModel: NSObject {
@objc dynamic var price = -1.0
@objc dynamic var title = ""
@objc dynamic var text: String? = nil
}
@brownsoo
brownsoo / KVOBinding.swift
Created November 23, 2021 08:29
extension for KVO
extension NSObjectProtocol where Self: NSObject {
func observe<Value>(_ keyPath: KeyPath<Self, Value>,
onChange: @escaping (Value?) -> Void) -> NSKeyValueObservation {
return observe(keyPath, options: [.initial, .new]) { _, change in
onChange(change.newValue)
}
}
func bind<Value, Target>(_ sourceKeyPath: KeyPath<Self, Value>,
@brownsoo
brownsoo / Canceling an Action.java
Created August 13, 2021 05:32
Canceling an Action
Scheduler scheduler = Schedulers.newThread();
Scheduler.Worker worker = scheduler.createWorker();
worker.schedule(() -> {
result += "First_Action";
worker.unsubscribe();
});
worker.schedule(() -> result += "Second_Action");
Assert.assertTrue(result.equals("First_Action"));
@brownsoo
brownsoo / Scheduling an Action.java
Created August 13, 2021 05:31
Scheduling an Action
Scheduler scheduler = Schedulers.immediate();
Scheduler.Worker worker = scheduler.createWorker();
worker.schedule(() -> result += "action");
Assert.assertTrue(result.equals("action"));
@brownsoo
brownsoo / publisher_sequence.swift
Created January 5, 2021 02:42
Combine publishers to sequence result
func fetchCoachingRoom(complete: @escaping (Error?) -> Void) {
refreshCoachingRoomStatus = .working
cancellableCoachingRoom?.cancel()
cancellableCoachingRoom = apiService.stream(Api.getCoachingRoom())
.map({ (res) -> [AClass] in
return res.userClassList
})
.receive(on: DispatchQueue.main)
.map { [weak self] list -> [Int] in
self?.coachingRoomClasses = list
@brownsoo
brownsoo / water_2d_effect.js
Last active January 5, 2021 01:37
water 2d effect
// Hugo Elias Water 2D Effect
let COLUMNS = 40;
let ROWS = 40;
let BLOCKS = COLUMNS * ROWS;
let LEVEL = 50;
let HIGH_LEVEL = LEVEL * 2;
let HUE = 210;
let SATU = 95;
@brownsoo
brownsoo / MakingPasswordDialog.kt
Created April 16, 2020 02:50
Making a input password dialog programmatically
// activity with android:windowSoftInputMode="stateHidden"
private fun showPasswordDialog() {
val context = this.context ?: return
val editText = EditText(context)
editText.inputType = InputType.TYPE_CLASS_NUMBER or InputType.TYPE_NUMBER_VARIATION_PASSWORD
editText.filters = arrayOf(InputFilter.LengthFilter(4))
val frame = FrameLayout(context)
frame.addView(editText)