Skip to content

Instantly share code, notes, and snippets.

View iamchiwon's full-sized avatar
💭
I'm awake

Song Chiwon iamchiwon

💭
I'm awake
View GitHub Profile
@iamchiwon
iamchiwon / imgandvid.txt
Created January 2, 2024 09:47
test image and video
https://storage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4
https://storage.googleapis.com/gtv-videos-bucket/sample/ElephantsDream.mp4
https://storage.googleapis.com/gtv-videos-bucket/sample/ForBiggerBlazes.mp4
https://storage.googleapis.com/gtv-videos-bucket/sample/ForBiggerEscapes.mp4
https://storage.googleapis.com/gtv-videos-bucket/sample/ForBiggerFun.mp4
https://storage.googleapis.com/gtv-videos-bucket/sample/ForBiggerJoyrides.mp4
https://storage.googleapis.com/gtv-videos-bucket/sample/ForBiggerMeltdowns.mp4
https://storage.googleapis.com/gtv-videos-bucket/sample/Sintel.mp4
https://storage.googleapis.com/gtv-videos-bucket/sample/SubaruOutbackOnStreetAndDirt.mp4
https://storage.googleapis.com/gtv-videos-bucket/sample/TearsOfSteel.mp4
@iamchiwon
iamchiwon / main.dart
Last active October 30, 2023 06:09
Youtube Shorts Player in Flutter
import 'package:flutter/cupertino.dart';
import 'package:get/get.dart';
import 'package:webview_player/shorts_player.dart';
void main() {
runApp(App());
}
class ShortsPlayerController implements IShortsPlayerController {
@override
@iamchiwon
iamchiwon / Bezier.swift
Created March 6, 2023 05:49
Chainable Bezierr
import UIKit
extension UIBezierPath: Chainable {}
extension Chain where T: UIBezierPath {
func move(to point: CGPoint) -> Chain {
origin.move(to: point)
return self
}
class System {
func openAppSetting() {
if let bundleId = Bundle.main.bundleIdentifier,
let settingUrl = URL(string: UIApplication.openSettingsURLString + bundleId),
UIApplication.shared.canOpenURL(settingUrl) {
UIApplication.shared.open(settingUrl, options: [:]) { _ in }
}
}
func isSystemPushAllowed(completion: @escaping (Bool) -> Void) {
import Foundation
private func filename(_ path: String) -> String {
guard let filename = path.split(separator: "/").last else { return path }
return String(filename.prefix(upTo: filename.index(filename.endIndex, offsetBy: -6)))
}
private func functionName(_ function: String) -> String {
guard let functionName = function.split(separator: "(").first else { return function }
return String(functionName)
import UIKit
@IBDesignable extension UIView {
@IBInspectable public var borderColor: UIColor? {
get {
if let color = layer.borderColor {
return UIColor(cgColor: color)
} else {
return nil
}
import UIKit
extension UIColor {
convenience init(red: Int, green: Int, blue: Int, a: Int = 255) {
assert(red >= 0 && red <= 255, "Invalid red component")
assert(green >= 0 && green <= 255, "Invalid green component")
assert(blue >= 0 && blue <= 255, "Invalid blue component")
self.init(
red: CGFloat(red) / 255.0,
import Foundation
extension Int {
public func decimal() -> String {
let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = NumberFormatter.Style.decimal
return numberFormatter.string(from: NSNumber(value: self))!
}
public func currencyKRW() -> String {
import Foundation
extension JSONDecoder {
static func decodeFromString<T: Decodable>(_ type: T.Type, from: String) -> T? {
guard let data = from.data(using: .utf8) else { return nil }
return try? JSONDecoder().decode(type, from: data)
}
}
extension JSONEncoder {
import UIKit
let screenSize = UIScreen.main.bounds.size
let screenWidth = screenSize.width
let screenHeight = screenSize.height
let statusHeight: CGFloat = {
guard let window = UIApplication.shared.keyWindow else {
return 0
}