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

技術書典4でバッグにチラシを詰めまくりました

仕事中の心境

ああ……詰めても詰めてもバッグとチラシが補充される……
まるで賽の河原じゃん……?

えっ

バッグとチラシの在庫無くなった
マジかよ!
詰め終わったやつもみんな持ってかれてる!!!

疲れはしましたが、詰めたものが全部皆さんに行き渡って、しかも戦利品でぱんぱんになっていると嬉しいものですね。
手に入れられなかった方ゴメンナサイ。

晴れると来場者数が2倍になるマジック。

戦利品

7,300円のおかいものをしました。

【お04】日経電子の本

0円

めっちゃお世話になった方々なので速攻もらってきた。
なんで新聞社さんがtry! SwiftにいらしてたりRebuild.fm公開収録してたりするんだ??というところから(個人的には)始まり、その後技術的な話題でちょくちょくバズって楽しい。

1面最下段の内輪ネタが面白かった。ご本人に読み上げていただkいやなんでもない

【う20】ニッチ技術への招待

1,000円

KuniwakさんのGitリカバリマニュアル狙い。
Kuniwakさんのお名前はGitのイベント(git challengeに参加して3位だった - S_Shimotori’s diary)の時に覚えたと思う。あれで結構Gitへの苦手意識が無くなった。

とはいってもコマンド覚えるだけじゃGitはマスターできそうにない。現状では「このコマンド打つと多分こうなるからうまくいく」という程度の理解。Gitの仕組みがどういう考え方なのかまで勉強しなくちゃなあ。

【え08】文鳥と読む労働法

200円

使われる側が法律わかってないとダメなんだなあってブラック事例を見て思ったので買った。この手の知識の出番がないことを祈る。

【え05】 Effective肉の多汁性測定

600円

前回に引き続き新刊を購入。Anovaをやるときの参考にする。
お肉は美味しいお肉を上手に焼かないと美味しくない。

【く08】 ZIP、完全に理解した

1,000円

そういえば全然知らない分野なので購入。知らない分野だけど、圧縮ファイルをメールで送るときはパスワードかけた上で別ファイルでパスワードを送り届けなくちゃいけないらしいってのは知ってる。

【く45】 大きめなAndroidアプリでの設計を考えてみる

1,000円

Androidマジでわからんので買った。GitHub - DroidKaigi/conference-app-2018: The Official Conference App for DroidKaigi 2018 Tokyoあたりが今1番無難なやり方なんだろうけど、知識がないとさっぱりわからない。

【き27】 Fast Code for Ruby

500円

Rubyのきもちになるために買った。もしRubyを書くことがあればRubyらしい書き方で書きたいし。
動的型付け言語つらい

【い14】 エウレ・テクノロギア

800円

もともとiOSタイポグラフィを狙って買ったのだが、他の章も面白そう。
かつてパンフレット制作をしていた後遺症で文字の位置どりが気になってしょうがない。

【あ03】 できるよ!中堅企業IT読本

100円 * 2冊

読み物として買った。技術情報目的というよりは情シスの気持ちになるつもり。

【け13】 「純肉」純粋培養肉

500円

将来食糧難で培養肉食べないといけないかもしれないから…… (?)
単に味の面で興味があって1冊買ってみた。というか、技術的なイメージが全然湧かなかったから買った。

【け05】 コンピュータによる旧字旧かな文書作成入門 2018増補版

0円(※ダウンロード版)

これも後遺症で組版や入力が気になって仕方ないので買った。古い文献を引用することはないと思うので、実践することはないかもだけど。

【い15】 日本語入力を作るのに必要だった本

1,000円

macOSとなればSwiftの数少ない出番だからね、知っておきたいよね。

【い15】 工場実習日記

500円

これも技術的な話が目的ではなく、工場実習の人の気持ちになって買った。
章立てからしてもうやばい。

まとめ

  • 晴れると人がめっちゃくる
  • さらにさらに知名度上がった
  • 疲れたねむい

try! Swift Tokyo 2018に参加してきた #tryswiftconf

全体的な感想

1銭も金にならなそうな話ばかりで満足度が高かった。そういう話が聞きたくて参加したんだ。

我々にはiOSDCがあるので、年に2度もお金になる話を聞いてしまうと厳しいものがある。この辺りのバランスはiOSとSwiftに特有の話かもしれない。iOS以外でSwiftをやっている方や海外からの方もいらっしゃる以上、全部のセッションを純Swift語の話にするわけにはいかないだろうけど、来年もこういう枠をいくつか用意してほしい。

どこかのDroidKaigiで見たようなバリスタさんがいらっしゃった。美味しかった。

スカラシップ制度を利用しました

当然スーパーSwift早割を速攻買ったがそれでも高いのでお願いした。来月就職を控えて後輩達ほど就職先に困っていない上、参加にホテル宿泊の手間と費用を必要としない私が制度利用をするのもどうかと思ったのだが、それでも元が高いんだもんしょうがない許して。

スポンサーはPicAppさん。
ちなみにPicAppさんはDroidKaigiでネットワークスポンサーだったので、今春はPicAppさんに支えられた春と言っても過言ではない。
DroidKaigi 2018にスタッフ参加してネットワーク環境の提供をした #droidkaigi - S_Shimotori’s diary

ありがとうございます!ありがとうございます!
後日ランチの場で色々お話させていただいた。企業様のお金でごはんをたべる用事はもうないので、学生の身分を理由に助けていただくのはこのPicAppさんが最後になりそう。今までカンファレンスチケットくれたりごはんくれたりしたみなさまありがとうございました。次は私が後輩たちのチケット代やごはん代を稼ぐ番ですが社畜にはなりたくないです。働きたくないでござる5000兆円ほしいでござる。

Qiita記事が未だ書き終わりません

私は常日頃から「Swiftを書きたいからバイトでiOSをやってきた。UIKitを触りたいとは一言も言ってないし余計に学習コストがかさむから触りたくない」と言ってきた。

それが祟ってか(?)、try! Swift参加前、後輩に
「なんでSwiftがいいんだ」
と聞かれ、
「そりゃーおめぇ、Protocol指向と列挙型があるから」
と答えたら
「似たようなの他の言語にもあるだろ」
と突っ込まれて泣いた。実際、パラダイムやデータ型が似ている言語としてScalaとKotlinとTypeScriptがあるのでSwift固有のメリットではない。でもTypeScriptだけはなんか使いづらそうだし敵じゃないな。

現在、復習を兼ねてtry! Swiftの発表の中からいくつか引用しつつSwiftの列挙型の強さの理由をまとめたQiita記事を書いている。できればどこかで発表したく思う。しかし書き終わらない。tarunonさんの発表]にあった存在型に関連して全称型を引用しようとして、型システム入門をやっつけなければならなくなった。orakaroさん発表の変位については、すでにその手の資料がたくさんあるので全称型ほどではない。
ともかく、他の言語と全く変わりませ〜ん(笑)ってことはないようなので安心して書いてる。がんばる。

「Swift の値型を極める powered by SWIFT QUEST」のアシスタントをしました

Open Source Swift Workshopにしようかどうか迷っているうちに申し込み自体を忘れた。

のだが、koherさんがSwift の値型を極める powered by SWIFT QUESTのアシスタントを募集していたのでしゅっと応募。
セーフ!セーフです!

いきなりのアシスタント参戦だったのでぐだぐだになってしまって申し訳なかった。

try! Swift Tokyo After talksに参加しませんでした

3月6日のGK627便で鹿児島への卒業旅行に向かったので不参加。

www3.nhk.or.jp

自宅→成田空港第2ターミナルポケモンストア→第3ターミナル搭乗ゲート前→東京駅→軽井沢北口1泊→草津1泊→自宅
をやった。ちょうど草津は雪だったので「火山灰が降ってきた!」ってはしゃいだ。悲しかった。

DroidKaigi 2018にスタッフ参加してネットワーク環境の提供をした #droidkaigi

もう3回目だよ

DroidKaigi 2016のスタッフをやったはなし - S_Shimotori’s diary
DroidKaigi直前のCONBUさんにお邪魔してきた - S_Shimotori’s diary
3週連続で西新宿に行ってきた #tryswiftconf #droidkaigi #落し物 - S_Shimotori’s diary

なぜ参加したの

  • 2016が大学を借りての開催で、会場案内くらいならできそうだったから
  • その後は惰性 スタッフを辞める理由はなかったから
  • 私以外のスタッフがAndroid開発のプロ、つよい
    • わたしはSwiftを書きたいので仕方なくiOSやってる(バイト辞めたのでそれすらわからなくなった)
  • iOSDCやtry! Swiftのコアスタッフをやろうものなら聞きたいセッションを全部聞くのは難しいだろうから、ここは専門分野を外してAndroidのスタッフをやるのがいいと思ったから
  • 大学学園祭とはまた違った環境と規模で興味深いから
  • ネットワークの勉強のため

学園祭実行委員会ではネットワーク担当という名でWeb屋(PHPer)をやっていたので名前詐欺だったが、今回は本当にネットワーク環境の用意をやったのでマジネットワーク担当。

ネットワークスポンサーはPicAppさん、
技術協力はCONBUさんとブロードバンドタワーさんとさくらインターネットさんでした!!!!!!

CONBUさんといっしょにネットワーク設営

CONBU - COnference Network BUilders :: ホーム

ネットワークチームに首を突っ込むのは、ホットステージにお邪魔したDroidKaigi 2017当日飛び入り参加したiOSDC Japan2017に続いて3回目。
今回はSWやAPやケーブルの配置を決めた!それ以上の仕事は修論が爆発してできなかったので次の機会に。

いただいた質問

ヒートマップってどうやって出してるの?

アクセスポイント→Wireless LAN Controller→Zabbix→(キャッシュ)→JavaScript描画

要するにヒートマップは
🙅 人の位置
🙆 アクセスポイントごとの端末接続数
を表したもの

下図の○がアクセスポイントの位置
WLCとZabbixはさくらのクラウド上で運用。CONBUさんが鯖(物理)を持ち込んでやっていた頃、鯖が壊れてどうしようもなくなった事件があったらしい。リバースプロキシがいるのはヒートマップ等のAPIを扱うため

f:id:S_Shimotori:20180211123952p:plain

f:id:S_Shimotori:20180211130424p:plain

やはりヒートマップを表示させておくとみなさんが興味を持ってくださるのでいいね
なんたってセッション〜休憩の移動でヒートマップのようすが刻々と変わってくからね

どんな機材使ってるの?

Ciscoググるとやり方が出てくるからよい
物理鯖ではなくクラウドなので誰でも使える親切設計
pfsenseには誰でも持ってるmacbookを使おうとしたがダメだった

アクセスポイントの置き場所はどうやって決めたの?

部屋の定員(200人とか)を50端末/台で割った数
……から1を引いた数を各部屋に散らした(機材の数が厳しかったため)

あとは会場や人の動線との相談
転ばないようにLANケーブルを這わせ、電源のあるところにPoEスイッチを置き、参加者の方やビデオ撮影に邪魔にならない位置にAPを置く

APあたりの接続数は50端末で見ておけばいいかな?という話だったのだが、上手に配置できなかったりAPの向きがイマイチ(届く範囲は正面180度とのコト)だったりして、結局1台に150端末繋がっていることもあった

ちなみに:
狭いスペースにたくさんの人と端末が集まっているということは、つよいAPに狭い範囲をカバーさせなければならないということである
場所を移動したら接続先のAPを変えて欲しいので……

  • APを置く台として譜面台を採用し、あまり遠くまで飛ばないよう高さを低くする
  • 通信速度が一定値を下回ったら接続を切る設定をしておく

1日目遅かったんだけど??

  • AP1台に最大150台繋がってて厳しかった
    • 物理的な位置の問題
    • 設定の問題??
  • pfsenseを動かしていた機材のスペックがipsecの暗号化処理には厳しかった

ので、2日目は

  • 一部のAPの物理的な位置をずらした
  • 一部のAPの高さを高くした
  • pfsenseの機材をいいやつにした

などなどで対応した

会場側pfsense〜クラウド側pfsenseの間は、厚い札束でなぐったり工事したりする領域なので、速くするにも限界はある

まとめ

まだ修行が足りぬ〜〜

CONBUさんはメンバーを募集していらっしゃるしDroidKaigi側のネットワーク人材も足りてないので誰か一緒にやろう

技術書典3でもお手伝いをした

前作: 技術書典2に初参加した - S_Shimotori’s diary

わたし「技術書典3やるんだ、また混雑するんだろうな」
わたし「🐑さん、当日の人手は十分に集められたのかなあ」
わたし「なんちゃって」

🐑「22日暇ですか」

わたし「出、出〜!」

わたし「ていうか22日雨じゃん!!!!!!!どうかしてやがるぜ!!!」

10月は雨季だからイベント降水確率は体感で50%くらい。10月に何度歴史を繰り返してもどうせ雨だから諦めろ。でもそこで台風クジをひくのはすごい。

イベント当日のスタッフの必需品

  • ショルダーバッグ OR ウェストポーチ …マニュアルやパンフレットやPCを入れるなら前者
  • モバイルバッテリー AND ケーブル …ツイッターとソシャゲをし続けるよりは消費しないので、普段より電池の持ちがいい
  • ハサミ AND カッター …必要な時に限って手元にない
  • 軍手 …すぐ怪我する
  • タオル …雨だもの
  • 予備の靴下 …濡れると不快
  • 蛍光ペン …地図入りの案内のビラに道順を書き込んで渡す
  • 飲み物 …人権
  • ウイダーinゼリーみたいなパウチ …疲労のあまり固形物が食べられない場合がある
  • 足用カイロ …会場設備によっては寒い
  • 野菜ジュース …栄養バランス補正
  • 立ち仕事に耐久性のある足 …エンジニアが失ったもの
  • 強い腰 …すでに破壊されている人は諦めるしかない
  • 強い腕 …腕が短く体格のない人間にはあっても無意味

技術書典は1日開催で会場も小さいので、蛍光ペンウイダーinゼリーと野菜ジュースはいらないし、モバイルバッテリーの出番もなかった。カイロも靴下も外のシフトがほとんどなかったから出番なし。

入場待ち問題

前回の技術書典2では雨天のため屋根のない場所にお待ちいただくことになってしまった。

blog.techbookfest.org

blog.techbookfest.org

午前中は外に出なかったのでわからないが、4Fがあったりそもそもそんなに混まなかったりで去年より快適だったと思う。特に4Fは落ち着いて立ち読みできたと思うし、人混みが苦手な人には特におすすめ。

そんなに混まなかったといっても、お昼頃は身動きできなくて大変だった。そして雨にも関わらずさっと完売をキメる人気サークルの皆様。

戦利品

今回(というかイベントのたびにだけど)疲れていたのでこれだけ。もうちょっと深呼吸していろいろ目を通せばよかった。

真面目本として技術季報と公開鍵暗号、ちょっとネタ本として肉とマリオを買った。(公開鍵暗号は売り切れてたので厳密には0円でQRコードを取得)

もちろん肉もマリオもガチでネタに走っているので、中は文字やグラフや図解でびっしり。読んでてわくわく。

Anova、ブラックフライデーとか型落ちとかで安く買える場合があるという情報を教えてもらった。

まとめ

結構大学の知り合い来ててビビる。

#iOSDC でも #orecon_ios でも #iOSDCRC でも発表してしまった感想とか

なぜiOSDCで発表したのか
???「チケットタダで欲しかったし…学生のうちにカンファレンス級で発表したかったし……」

なぜ俺コンで発表したのか
???「@tarappoさんが是非って言ってくれて嬉しかったから…」

なぜReject Conferenceでも発表したのか
???「みんなの応募の勢いが悪かったからいいかなって」

なぜそんなに発表したのか
???「勉強会駆動勉強というのがあってですね、勉強会で発表するために必死に資料を読むんですよ」

自重しろ
???「この3種の発表資料を生み出すのにまた修論進捗を犠牲にしたのでもうだめです(人生が)」

iOSDC JAPAN 2017「ARC vs. GC? ARC in GC?」

GCについて何も知らないなあと思ったので発表した。正直この3回の中では一番炎上危険度が高く、発表していて怖かった。
Rustのリファレンスを読んだところまではいいけど、Cycloneの環境構築のページを読んだところで正直やる気が削がれた。興味がある人は是非Cyclone先輩に挑戦してみてほしい。

それから、特にC/C++/Cyclone/Rustはガベージをコレクションするというよりぶら下がりポインタの対処話になってしまうので、どう頭の中で整理したものかめっちゃ混乱した。

speakerdeck.com

俺コン「今こそテストの気持ちを考える」

あまりに社会人のみなさんが懇親会で「テスト書いてません」とおっしゃるので喧嘩を売りにいった。なのでこれも発表していて怖かった。実際にこれを聞いてくださった方は、わざわざ聞きにきてくださるだけあってさすがにテストは書いているようだった。

speakerdeck.com

テスト書いてない問題はもちろん、そもそもテストとはなんなのかという疑問を出発点にテストを調べ始めた。したがってこの15分の話は調べたことのほんの一部にしか過ぎないし、もちろん調べ終わっていない。JUnit3→4移行話とかXCTest内部実装とか早急に調べたいのだがうわー修論うわーうわーうわー。

github.com

Reject Conference「郵便屋さんの演算子

Swiftのガイドの演算子の文法の箇所を見て、何書いてあんのかわからん!となったのがきっかけ。Qiitaを調べても、演算子定義の方法は書いてあっても使える文字の話の記事はなく。
マジで何が書いてあるのかわからないのでしばらく読まずに放置していたが、技術書典2でUnicodeポスターを買ったのをきっかけに気合いで読んだ。ついでにちょっとだけUnicodeに詳しくなった。ちょっとだけ。

speakerdeck.com

qiita.com

発表してみて

  • リジェクト分はOtemachi.swiftとかiOS Test NightとかSwift Tweetでやるしかないかなあと思っていたが、結局iOSDC関連でだいぶ片付いた。ありがとうございました。
  • 勉強会駆動勉強により、GCとテストとUnicodeの知識がちょっとついた。
  • 自ら発表することにより、懇親会で来てくださった方の側から話しかけてくださったのでコミュ障的には楽だった。
  • 多少顔を覚えてもらったかなあ。Swift TweetやOtemachi.swiftで発表するなどしたのもあったと思う。
  • 今の実力では、リファレンスに書いてあることや理論をお伝えするのが限界。ベストプラクティスを共有するには経験値が皆無で無理。
  • 修論つらい
    • 結局俺コンとリジェクトコン2日目をキャンセルごめんなさい

今後に向けて

  • 引き続きテストについては調べていく所存。
    • XCTestの内部実装のうち、XCTAssertシリーズは近いうちに共有したい。
    • JUnit3→4問題については、Javaアノテーションの仕様も勉強しないといけないので面倒臭いなあ頑張りまーす
  • GCについてはとりあえず一旦終わり。C/C++/Rustの勉強はまだ足りないからいずれやるかも。アルゴリズムを考える脳みそはないので専門家にお任せしたい
  • 演算子は実用的でないのでもういい。Unicodeは…何か読み物を読むくらいなら
  • ベストプラクティスというか実際の業務やOSSで役立つ手法というか、そういうのを共有できるようになりたいですね
  • しゅ〜〜〜うろ〜〜んしゅうろんしゅうろ〜〜〜ん修論〜〜〜〜〜〜〜〜
    • 就活と学位論文は人間の体に毒なので即刻やめるべき
    • 脳内に「学位論文」というラベルの貼られたタスクがある、それだけで猛毒
    • とりあえず勉強会からは冬眠

iOSDC Japan 2017で発表したり飛び入りでお手伝いしたりした #iosdc

よーしiOSDCで発表するぞー!

iosdc.jp

……。

って、

あれ?

いつのまにアットホームな職場に混じってる……?

私何しに来たんだっけ

チケットを入手する

学生なのでWantedlyさんによる学生応援プログラムの対象ではあるのだが、

www.wantedly.com

首都圏住みで交通費はほぼゼロだし、こういうのは就活を控えた後輩たちが受けるべきだろうし、

というかせっかくならスピーカー枠のほうが

  • 勉強会駆動勉強
  • 社会人になるのを待ってからスピーカーになる理由はどこにもない、それより登壇して名前を売っちゃおう
  • スピーカーに占める学生数と女性数に+1できる

とメリットがめちゃくちゃ大きいので、何かカンファレンス発表のネタになるものはないかと探す。
iOSDC Japan 2017に色々応募した - S_Shimotori’s diary

結果、1個通った!学生のうちにカンファレンス登壇経験を得られた!そしてチケットがタダ!
他のネタも発表する機会をいただいたので、これで年末までは充実した日々を送れる。

しかし手持ちのネタを全放出したのでアドベントカレンダー用のネタがなくなった……

LTの準備をする

大学で☆CHUKAN-HAPPYOU☆があった関係で、準備を始めたのは11日月曜日。手元にあるのは1年前に入手したGCの本と脳内の筋書き(=裏取ってない)だけ。LTといえどもその5分に責任を持たないといけないし、GC自体は5分どころの話ではないので必死に勉強した。

結局スライドは1日で作り終えたけどGCの勉強は難しくて苦労した。Cyclone、お前のせいだぞ。なーにが32bitでGCC3だよ。私は現代に生きてるんだが。

大学の図書館にJavaパフォーマンスの本とかがあって助かった。

www.shoeisha.co.jp
www.oreilly.co.jp

早稲田大学理工キャンパスについて

せっかく西早稲田に来たので西早稲田飯を食す。やはり学生の女子率の違いだろうか、理工キャンパスの方が我がGreat岡山キャンパスに比べ飯屋が充実しているように思う。

www.instagram.com

女子トイレにしてもちゃんと化粧台があるし簡易的とはいえ更衣スペースもある。理工キャンパスなんだし、そんなオシャレスペースなんかないに決まってんだろ、そうと言ってくれ

前夜祭

個人的な前夜祭の目玉セッションはObjective-C++を使ってMRCで快適に開発する | iOSDC Japan 2017。私もARCとGCのセッションなので、先に全て話されてしまったらどうしようと思いながら聞いていた。実際は濃密すぎるゆえに話が被らずに済んでセーフ。

あんまりたくさんの人が懐かしい懐かしいツイートしていたのでアンケート。

最初はSwiftが1割くらいだったのでびっくりしたけど、落ち着いた今の結果を見る限りでは体感通りかも?MRCが懐かしい人はいっぱいいるし、Swiftから始めたという人も最近は珍しくないし。

諸事情で興味があったので不用意にNOCのアットホームな職場に近づいたら、なんとお手伝いさせていただけることになった。今の所全然わからないので頑張っていこうと思う。どのくらいわからないかというと、新設の研究室のルーターの設定項目(DNSとかネットマスクとか)の意味がわからなくて前ラボの助教様に泣きついたくらい。

スピーカーディナー

肉がうまかった。 以上!

以前からお世話になっている方との挨拶を済ませておいた。正直私のLTはカンファレンスでやるには易しすぎる面もあるので、超有名なスピーカーの皆様を前に申し訳なさもあったけど、ゆっくりお礼を言えてよかった。

1日目

ミサトさん

今日の個人的な目玉は、Auto LayoutとObservable。Auto Layoutは論文が出てきて泣いた。

iosdc.jp

iosdc.jp

自分も発表した。

speakerdeck.com

あと、NOCの人からvlanの概念とCiscoコマンドの存在を教えてもらった

懇親会

スピーカーになって気になってる分野を投下すると、自然に参加者の方が集まってきて知見が得られる。与えて与えられる。OK?

スタッフTシャツと名札が与えられて、晴れて私もアットホームな職場の一員になった

2日目

今日の目玉は…

なんか変なセッション(iPhoneクラスタとかiOS11本の人達の溢れ出る何かとか)があって真面目に聞いてたネタが脳内からぶっ飛んだ。というのは嘘で、自分が俺コンで話したいことと関連する話がちょくちょくあったので、俺コンの時にちょっとだけ触れるつもり。

昨年聞きそびれたお肉の話が聞けてよかった。ちょうど「細かい温度管理なんて人間業じゃないから美味しいお肉なんて夢のまた夢だ!」って思ってたところで、本気でanova欲しくなって困ってる。あとカンガルー。

medium.com

それから、ハンズラボさん家では相変わらずexit(1)を企んでいるようで安心した。

iosdc.jp

あと、APとLANケーブルの撤収を手伝った。働くにあたり、LANケーブルのしまいかたを教えてもらった。上手にやるのは結構難しかったけど、これで家の10mあるやつを自力でしまえる。何も知らない新人なのに親切にしてもらって、マジでアットホームな職場です!

夜のiOSDC

iosdc.connpass.com

危ないから夜遊びしないで早く帰りなさいってママにいわれた><

通らなかったネタの発表

仮にリジェクトコンに通ったとしても1個しか発表できないよなあ、どうしたものか、と思っていたところ、iOS Test Night主宰の@tarappoさんの目にとまって場を用意していただけることになった。

connpass.com

今こそテストの気持ちを考える / S_Shimotori (@S_Shimotori_pub)

色々なカンファレンスや勉強会に参加してわかったこと: みんなテストを書かない。

fastlane Contributorだけど何か質問ある? | iOSDC Japan 2017ですらテストが完璧じゃないって話だし、じゃあテスト書いてるところはどうしているかというとBuild high performance and maintainable UI library | iOSDC Japan 2017の動作確認はUIテストじゃないみたいだし。

というわけで書かない人向け。別にこれで書けるようになるわけじゃないが。

で、

俺コンに参加することになったのでリジェクトコンは遠慮しておこうかと思ったけど、みんなの応募の勢いが悪かったから結局出しちゃった。

iosdc-reject-conference.connpass.com

5分トーク②:「郵便屋さんの演算子」@S_Shimotori_pubさん

演算子に使える文字を紹介する予定。Unicodeを素で読めるマンには確実にいらない話。

まとめ

  • やはりスピーカーとして参加すると美味。
  • Ciscoデビューした。
  • 俺コンとリジェクトコンがあるのでまだまだ私のiOSDCは続く。

これまでの勉強会も今回のiOSDCも、実務経験がなくて現場によく効く話はできなかったので、来年以降はよく経験を積んでいきたいと思う。

【宣伝】DroidKaigi 2018

droidkaigi.jp

こっちもよろしくね

genericsとassociated typeとduck typing(とSwift)

いつもこの辺の話を忘れちゃうのでメモ。

Why does Go not have generic types?

github.com

Goに総称型がないっていうネタと議論を永遠に続けるために導入してないんじゃ

理由はFrequently Asked Questions (FAQ) - The Go Programming Languageにある通りだが、厄介なのはissueで延々と議論を続けているところである。やっぱり議論がしたいだけなのでは。

もう少しまとまった説明がproposal/15292-generics.md at master · golang/proposal · GitHubにあるのでこっちを読んだ方が幸せ。そこでは

Generics affect the whole standard library. It is desirable to have the standard library make effective use of generics. Every existing package should be reconsidered to see whether it would benefit from using generics.

などいろいろなことが述べられている。

Swiftの標準ライブラリが1番associated typeの恩恵を受けている気がする。ていうかもはや奴がgeneric protocolを使う姿を想像できない。

golangGenerics と私」

mattn.kaoriya.net

まあこれ自体は置いといて、Swiftには数値関係のprotocolがたくさんある。なんなら Numeric という例で出てきたものと同じ名のprotocolまであるがどうか。

Swift標準ライブラリにはprotocolで構成される巨大な継承ツリーがある。その中から数値型を抜粋するとだいたいこうなる:

f:id:S_Shimotori:20170802214546p:plain

Swiftの数値型の元締めが問題の Numeric である*1Numeric は二項演算能力(ただし和差積のみ)を指す。名前が一致しているしこいつが全部解決しそうしない。
なぜなら NumericSelf 同士の、つまり同型同士の二項演算能力を指すからである。 Int / UInt / Float / Double のごった煮の和は管轄外。

演算子システムもしっかり型を限定してくれる Self 先生も好きです(ほんと)

Int / UInt / Float / DoubleMyNumber を実装するのがだるいなら Numeric 1人に実装すれば解決するしない。宣言済みのprotocolに後から別のprotocolを継承することはできない。mattn氏の例と同様に全ての数値型で実装する必要がある。頑張りましょう。

Java の Generics にもの思い - QiitaJavaでは <T extends Number> を利用しているが、Javaの数値参照型の元締め Number

抽象クラスNumberは、プリミティブ型byte、double、float、int、long、およびshortに変換可能な数値を表すプラットフォーム・クラスのスーパークラスです。

で我らが Numeric とは別物である。よってこのJavaの例をそのままSwift語に書き換えてもうまくいかない。

Number (Java Platform SE 8)

Swift: Why Associated Types?

www.russbishop.net

Russ Bishop氏はAppleの中の人らしい。

記事は2015年のもの。現在の Collection が持つassociatedtypeは

  • associatedtype IndexDistance = Int
  • associatedtype Iterator = IndexingIterator<Self>
  • associatedtype SubSequence
  • associatedtype Indices

である。いずれにしてもこれを総称型パラメータでやったらヤバイよねっていう話。 https://github.com/apple/swift/blob/781f6326bd9932356086874baa12c812d100565e/stdlib/public/core/Collection.swift

Scalaはtraitでもgenericsとabstract typeを両方使えるので、この記事はOdersky大先生のScalaインタビューを引用している。こちらでもパラメータ数の爆発の可能性が欠点として挙げられている。

The Purpose of Scala's Type System

You could parameterize class Animal with the kind of food it eats. But in practice, when you do that with many different things, it leads to an explosion of parameters, and usually, what’s more, in bounds of parameters.

Introducing Abstract Base Classes

www.python.org

29.7. abc — 抽象基底クラス — Python 3.6.1 ドキュメント

Pythonは基本的にはduck typingなのだがAbstract Base Classesなるものが存在している。記事の最後ではABCとduck typing、generic function、interfaceとの比較がされている。

Python 3.4.0 の新機能 (3) - Single-dispatch generic functions - Qiita

JavaScalaC#ジェネリクス機能比較表

kmizu.hatenablog.com

よっしゃ!Swiftも参戦だ!

ジェネリックなクラス
class MyList<T> {}
ジェネリックなメソッド
func id<T>(arg: T) -> T { return arg }
型パラメータの上限
func max<T: Comparable>(a: T, b: T) -> T {
    return a < b ? b : a
}
型パラメータの下限

なくない?

型パラメータの推論
id(arg: "foo")  // "foo"
全ての型のサブタイプ(ScalaにおけるNothing)

こいつもなくない?

scala.Nothingは何のためにあるのか - kmizuの日記

definition-site variance

記憶にない

use-site variance

記憶にございません

実行時における型パラメータの扱い

(実行時のことは知らん)

型パラメータをnewする

え、無理でしょ( error: non-nominal type 'T' does not support explicit initialization )

Nominal and Structural Type Systems - soutaroブログ
Swiftに息づくstructural types(構造的型) - Qiita

同じジェネリッククラスを複数同時に継承する

多重継承はダメだし総称型protocolなんて概念はこの世には存在しない

同じ名前で型パラメータの個数が異なるジェネリッククラスを複数作成する

同じ型と認識されるので無理( error: invalid redeclaration of 'Tuple' )

高階のジェネリクス(Type Constructor Polymorphism)

何これ。

「filterを実装しておけばrejectが勝手に出来上がってる」みたいなやり方はよくあるが。

ジェネリックな型エイリアス
typealias StringDictionary<T> = Dictionary<String, T>

let d: StringDictionary<Int> = ["x": 50, "y": 100]

まとめ

みんな違ってみんないい

*1:Strideableも全員に該当する性質だが、こいつはUnsafePointer軍団も監督しているので数値限定ではない。NSNumberもFoundationの子なので違う。