Twitterでふぁぼったものをひたすら試します

try! Swiftに参加しました(4回目) #tryswiftconf

カンファレンスには一般参加したり学生参加したりスタッフ参加したり色々してきた。
今回はスポンサーチケットで、スポンサー役を。

-1日目

tryswifttokyo-aftertalks.connpass.com

勉強会自体が久しぶりで、ぱそこん持ってくるのを忘れる失態を犯した。

XcodeDebug Memory Graph を使った華麗なるデバッグ

Xcodeの Memory graph を使った華麗なるデバッグ - Speaker Deck

実装はGitHub - po-miyasaka/LLDB: A LLDB command creating a variable from a arbitrary instance address for debugで見れる。
ビルドにン十分かかるやつを触るとなるとあの手この手でビルドを回避しないといけないから、助かる。今回はDeNAさんもLLDBチートシートをくれたのではかどっちゃう

アプリの起動速度と Dynamic/Static Framework の関係を紐解く

App startup time with Dynamic/Static frameworks - Speaker Deck

Optimizing App Startup Time - WWDC 2016 - Videos - Apple Developerが参考になるとのこと。まとめてくれる人がいてたすかる。

0日目

github.com

縁あってハンズオンした。
Kituraと一緒に使えるパッケージがたくさん用意されているのはありがたい。世の中にはDarwin専用というか、Darwin上で動かすことしか想定していないものが多いので、使い合わせやら何やらを考えずにさくっと雑に作れる。

さっそくお家帰ってつくろうとしたら私用Macbookがつかえない子になっていた*1ので断念。いい加減買い換えようと決心した(3度目)→買いました

1日目

Color Contrast for Accessibility

https://raw.githubusercontent.com/emarley/ColorContrast/master/ColorContrast.pdf

色関係の話になるとすぐそうやって数式が出てくるんだから!(それはそう)
我々に求められているのはsRGB→XYZである

JavascriptでWC3のコントラスト計算式を書いてみる|意識の高い時に雑記
XYZ-RGB の変換式とカラートライアングル(JavaScript版)

数式は数式だからまだ何とかなるのだけど、どうやってデザイナーさん達と協力していくかのほうが10000倍難しそう。がんばりましょう。

Color - Visual Design - iOS - Human Interface Guidelines - Apple Developer
Web Content Accessibility Guidelines (WCAG) 2.0

protocol/extensionにジェネリクスを入れたい

GitHub - y-yu/try-swift-slide

protocol HList {
    associatedtype Head
    associatedtype Tail: HList
}

// ScalaのNothingは全ての型のサブタイプであるであるがSwiftにそんなものはなかった
enum Nothing {}

struct HNil: HList {
    typealias Head = Nothing
    typealias Tail = HNil

    // Scala object classの代わり
    private init() {}
    static let singleton = HNil()
}

// (A, (B, (...)))のような構造
struct HCons<T, U: HList>: HList {
    typealias Head = T
    typealias Tail = U

    let head: Head
    let tail: Tail
}

で表されるheterogenous list*2略して HList がある。

この HList 同士の結合を考える。

protocol HAppendable {
    associatedtype Left: HList
    associatedtype Right: HList
    associatedtype Result: HList

    static func append(_ lhs: Left, _ rhs: Right) -> Result
}

空リスト HNil と リスト T: HList の結合は、リストのほうをそのまま返せばいい。

enum Nil足すList<T: HList>: HAppendable {
    typealias Left = HNil
    typealias Right = T
    typealias Result = T

    static func append(_ lhs: HNil, _ rhs: T) -> T {
        return rhs
    }
}

HNilと非空リストとの結合ができたので、非空リスト同士の結合ができればあとは無限に好きなだけリストを繋げられる。
T: HList + U: HList -> V: HList
が定義されているとき、
非空リスト同士の結合
(W, T: HList) + U: HList
W, T, U つまり (W, V): HList とすればいいので、

enum List足すList<T, U, V, W, EV: HAppendable>: HAppendable
    where T == EV.Left, U == EV.Right, V == EV.Result {
    typealias Left = HCons<W, T>
    typealias Right = U
    typealias Result = HCons<W, V>

    static func append(_ lhs: HCons<W, T>, _ rhs: U) -> HCons<W, V> {
        return HCons(head: lhs.head, tail: EV.append(lhs.tail, rhs))
    }
}

// あるいは

func append<T: HList>(_ lhs: HNil, _ rhs: T) -> T {
    return rhs
}

func append<EV: HAppend, T, U, V, W>(_ lhs: HCons<W, T>, _ rhs: U, ev: EV.Type) -> HCons<W, V> where T == EV.Left, U == EV.Right, V == EV.Result {
    return HCons(head: lhs.head, tail: EV.append(lhs.tail, rhs))
}

である。ほんとか??????誰かもっと綺麗に書いてほしい。だめだ修行が足りない。ワタシハSwiftゼンゼンカケナイ

swift-can-not-infer-concrete-type-from-protocol.swift · GitHub

github.com

あ、TaPL以外に参考書ない?とか色々質問して、「プログラミング言語の基礎概念」「Scala DOT*3」の存在を教えてもらいました。みなさんもたまにはTaPL以外を推してみてください。なさそう。

テストケースでMemory Leakを発見する

Keynote for iCloud

たしかにその方法でメモリリーク発見できる……が、……そのオチ、かなしいですね

2日目

Swift type metadata

Swift Type Metadata - Speaker Deck

Metadataってあっさり取れちゃうもんなんですねえ

UnsafePointer - Swift Standard Library | Apple Developer Documentation
SwiftにおけるMethod Dispatchについて - Qiita
What is a nominal type? - Speaker Deck

All about linking libraries

All about linking libraries - Speaker Deck
Keynote for iCloud

同じく、まとめられてて助かるやつ。自分でまとめろよという話だが

The Philosopher's String

これ資料公開されてる?代わりにniwatakoさんのブログを。
賢者のString | try! Swift Tokyo 2019 2-12 - niwatakoのはてなブログ

あんま関係ないけど、都道府県リストもソート時には罠っすよね。国名とかアメリカ州リストと違って南北にソートせにゃならんという。かといって日本の地理把握してない外国人向けだと辞書順になるのか?とか。

3日目

Open Source Swift Workshop

じぶんのぱそこんはだめなこなので、そのへんのつよそうな32GBまっくぶっく*4をひろってつかいました。じしゃかいさいでたすかりました。

どうにかして初PR出した。しかしへんじがないようだ。

[SR-10155] Support string interpolations with binary value by S-Shimotori · Pull Request #23510 · apple/swift · GitHub

まとめ

  • スポンサーブース、出し物として面白みに欠けたんだけどわたしそこまでアイデアマンじゃないからつらい
  • つよいIPアドレスをください
  • お疲れ様でした。今年もありがとうございました

*1:ストレージが残り10GB未満だとXcodeをアップデートできず、Kitura+Swift4.2(+Docker)を用意できない

*2:こういう手のものをプログラミング言語で表現する場合はSwiftなどという言語ではなく大人しくHaskell先輩の実装Heterogenous collections - HaskellWikiでも読んだ方が良さそうまだ読んでないけど

*3:ざっとぐぐったら 何で走っているのだろう: Scalaの型と型関連の機能DOT/dottyについて調べてみた | κeenのHappy Hacκing Blog が出てきた。あとでよむ

*4:入社して1年で2回PCを乗りかえたのは悪いと思ってい、ません