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 / 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 / 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 / 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 / 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 / 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 / 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 / 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 / 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 / IntRangeCase.swift
Created September 30, 2023 05:17
swift - switch range case
extension Int {
/// ์ˆซ์ž ๋ฒ”์œ„์— ๋”ฐ๋ผ ํ…์ŠคํŠธ ํ‘œ์‹œ
func readableCount() -> String {
let formatter = NumberFormatter()
formatter.numberStyle = .decimal
formatter.groupingSeparator = ""
formatter.maximumFractionDigits = 1
switch self {
case _ where self < 1000:
return "\(self)"
@brownsoo
brownsoo / GetPermutations.swift
Created October 10, 2023 04:56
๋ฐฐ์—ด์˜ ์กฐํ•ฉ ๊ตฌํ•˜๊ธฐ (์ˆœ์„œ๋ฌด๊ด€)
/// ๋ฐฐ์—ด์˜ ์กฐํ•ฉ ๊ตฌํ•˜๊ธฐ
/// ์ˆœ์„œ์— ์ƒ๊ด€์—†์ด ๊ฐ™์€ ์š”์†Œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋‹ค๋ฉด, ๊ฐ™์€ ์กฐํ•ฉ์œผ๋กœ ์ฒ˜๋ฆฌ (๊ฒฐ๊ตญ ์ฒ˜์Œ ์ œ๊ณต๋˜๋Š” ๋ฐฐ์—ด ์š”์†Œ๋“ค์˜ ์ˆœ์„œ๋ฅผ ์œ ์ง€ํ•œ๋‹ค)
/// - Parameters:
/// - arr: ์ œ๊ณต๋˜๋Š” ๋ฐฐ์—ด
/// - select: ๋ช‡๊ฐœ์˜ ์š”์†Œ๋ฅผ ์„ ํƒํ•ด์„œ ์กฐํ•ฉํ• ์ง€ ๊ฒฐ์ •
/// - Returns: ์ œ๊ณต๋œ ๋ฐฐ์—ด์—์„œ select ๊ฐœ๋ฅผ ์„ ํƒํ•ด์„œ ์กฐํ•ฉ๋œ ์ƒˆ ๋ฐฐ์—ด
func getPermutations(_ arr: [Book], select: Int) -> [[Book]] {
var results: [[Book]] = []
if select == 1 {
return arr.map { [$0] }