カンファレンスには一般参加したり学生参加したりスタッフ参加したり色々してきた。
今回はスポンサーチケットで、スポンサー役を。
-1日目
tryswifttokyo-aftertalks.connpass.com
勉強会自体が久しぶりで、ぱそこん持ってくるのを忘れる失態を犯した。
Xcodeの Debug 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日目
縁あってハンズオンした。
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にジェネリクスを入れたい
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
元トピックのコンテクストがわかりませんが、ジェネリックプロトコルのことなら、GenericsManifestoのUnlikelyの中に挙げられてますね。https://t.co/GDA7JZ3R5x
— koher (@koher) March 21, 2019
あ、TaPL以外に参考書ない?とか色々質問して、「プログラミング言語の基礎概念」「Scala DOT*3」の存在を教えてもらいました。みなさんもたまにはTaPL以外を推してみてください。なさそう。
テストケースでMemory Leakを発見する
たしかにその方法でメモリリーク発見できる……が、……そのオチ、かなしいですね
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出した。しかしへんじがないようだ。
まとめ
*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を乗りかえたのは悪いと思ってい、ません