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 / GetAllPermutations.swift
Last active October 10, 2023 04:57
배열 요소의 모든 조합 구하기 (순열, 순서고려)
/// 배열의 모든 조합 구하기 (순열)
/// 순서에 상관하여 같은 요소라도 순서가 다르면 다른 조합으로 처리
/// - Parameters:
/// - arr: 제공되는 배열
/// - select: 몇개의 요소를 선택해서 조합할지 결정
/// - Returns: 제공된 배열에서 select 개를 선택해서 조합된 새 배열
func getAllPermutations(_ arr: [Int], select: Int) -> [[Int]] {
var results: [[Int]] = []
if select == 1 {
return arr.map { [$0] }
@brownsoo
brownsoo / iterable_extension.dart
Created September 25, 2023 02:39
dart iterable 에서 널러블 아이템 조회 확장함수
extension NullIterable<E> on Iterable<E> {
E? getFirstOrNull(bool test(E element)) {
try {
return this.firstWhere(test);
} catch (e) {
return null;
}
}
}
@brownsoo
brownsoo / ArrayExtension+Page.swift
Created September 19, 2023 14:59
swift array extension to access a property of elements
/// [Page] 배열에서 movies 값만 모아 가져오기.
extension Array where Element == Page {
var movies: [String] {
flatMap { $0.movies }
}
}
/// Page 샘플
struct Page {
let movies: [String]
@brownsoo
brownsoo / cache_workout.js
Created December 30, 2022 12:24
캐시 구현 목업 from Node.js 하이 퍼포먼스
// from Node.js 하이 퍼포먼스
var users = {};
function getUser(id, next) {
if (users.hasOwnPropoerty(id)) {
if (users[id].hasOwnProperty("data")) {
return next(null, users[id].data);
}
// 아직 값이 없음
@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"));