Skip to content

Instantly share code, notes, and snippets.

@haptaro
haptaro / gist:e848820bc2e7e9e2b7e66f7076a2adbb
Last active October 22, 2022 01:34
仮想化技術とかLinuxとかDocker for MacとかKubernetesとか
【仮想化技術】
- ハイパーバイザ型・・・ホストOSの上に仮想マシン(Virtual Boxなど)を乗っけて、その上にゲストOSを乗せる。実際にホストOS上にゲストOSをインストールするため起動が遅い。実際のハードウェアをエミュレートする仮想マシンが動く。ホストとは異なるOSを動かすことができる。OSカーネルについても別のものを実行できる。
- コンテナ型・・・ホストOSのカーネルを共有し、コンテナエンジン(Dockerなど)を乗っけてその上にコンテナを作る。ハイパーバイザ型よりすでに起動しているOSのカーネルを共有するので起動が速い。LinuxコンテナはホストのLinuxカーネルを共有するので同じホストOSと同じでないと起動できない。ハイパーバイザ型はカーネル空間まで分離するが、コンテナ型はカーネルは共有し、プロセス空間(アプリケーションが動いているユーザ空間)のみ分離している
【コンテナ仕様の標準規格】
- OCI(Open Container Initiative)・・・コンテナのランタイムとイメージの業界標準策定を目的として設立されたオープンソース団体。現在はLinux Foundation傘下
OCIランタイム: runcやgVisorはこれに準拠している
- OCI Image Format・・・OCIが定めるコンテナイメージの仕様。Docker Imageはこのフォーマットに準拠している
- CRI(Container Runtime Interface)・・・KubernetesのCRI(kebelet)をサポートするコンテナランタイムインタフェース
CRIランタイム: containerdやcri-o
@haptaro
haptaro / property_wrappers.md
Last active June 24, 2024 00:53
Property Wrappers

Property Wrappersとは?

  • プロパティアクセス時に行う何らかの処理(getter, setter)を共通化し再利用できる仕組み
  • どのようにプロパティがget, set, initされるのかという知識を別のオブジェクトに分離できる
  • getterとsetterを持つプロパティのシンタックスシュガー
  • ラップしたプロパティにアクセスするときはProperty Wrapper経由でのアクセスになる
  • Swift5.1から追加された機能で、Swift5.5で関数やクロージャの引数に対してもProperty Wrapperを用いた属性をつけられるように拡張された
  • 定義したProperty Wrapperは型ではなく 属性(先頭に@をつける) として利用される
struct SmallRectangle {
    @TwelveOrLess var height: Int // ← @TwelveOrLessがProperty Wrapper
// 格納型プロパティのみのクラス
class PropA {
var attr = 0
}
// 継承してプロパティオブザーバーを追加
class PropB : PropA {
override var attr: Int {
willSet { print("B: will set") }
didSet { print("B: did set") }
import UIKit
class TableViewController: UITableViewController {
var threeColor = UIColor.rgbColor(r: 205, g: 213, b: 255).nextColor
let prefectures = ["北海道", "青森県", "岩手県", "宮城県", "秋田県", "山形県", "福島県", "茨城県", "栃木県", "群馬県", "埼玉県", "千葉県", "東京都", "神奈川県", "新潟県", "富山県", "石川県", "福井県", "山梨県", "長野県", "岐阜県", "静岡県", "愛知県", "三重県", "滋賀県", "京都府", "大阪府", "兵庫県", "奈良県", "和歌山県", "鳥取県", "島根県", "岡山県", "広島県", "山口県", "徳島県", "香川県", "愛媛県", "高知県", "福岡県", "佐賀県", "長崎県", "熊本県", "大分県", "宮崎県", "鹿児島県", "沖縄県"]
override func viewDidLoad() {
super.viewDidLoad()
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var resultLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
import UIKit
class FirstViewController: UIViewController {
@IBOutlet weak var resultLabel: UILabel!
@IBOutlet weak var slider: UISlider!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
import UIKit
class SecondViewController: UIViewController, PlusViewControllerProtocol {
@IBOutlet weak var textField1: UITextField!
@IBOutlet weak var textField2: UITextField!
@IBOutlet weak var resultLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
import UIKit
extension UITextField {
var safeStringToInt: Int {
return Int(self.text ?? "") ?? 0
}
}
protocol PlusViewControllerProtocol {
var textField1: UITextField! { get }
import UIKit
class ViewController: UIViewController {
var randomValue: Int!
enum WinLoseValue: String, CustomStringConvertible {
case Win
case Lose
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var resultLabel: UILabel!
@IBOutlet weak var textField1: UITextField!
@IBOutlet weak var textField2: UITextField!
override func viewDidLoad() {
super.viewDidLoad()