MultipeerConnectivityで"[ViceroyTrace] [ICE][ERROR] Send BINDING_REQUEST failed"などとエラーが出て接続できない場合の対処

MultipeerConnectivityのエラーにずっと悩まされ続けていたのをとりあえず解決にこぎつけたのでメモ.

概要

猛烈にエラーを吐いて働かないのを,暗号化周りのコードを加えればとにかく動くようになった. 元々不具合が多いフレームワークらしく,普通に使っているだけでもエラーを吐く. どうしてエラーが出るのか,根本の原因までは特定していない. 原因知っている人いたら教えて欲しい.

動作環境

実際に解決に至った動作環境は下の通りであるが,前バーションを利用した環境でも同様のエラーが出ることを確認している.

症状

  • とにかく端末同士が接続できない
  • 端末を発見してからsession(_ session: MCSession, peer peerID: MCPeerID, didChange state: MCSessionState)が呼ばれてconnectingになるが,接続に失敗してnot connectedになる
  • 実際に吐いているエラーの文面
[ViceroyTrace] [ICE][ERROR] Send BINDING_REQUEST failed"
Failed to send a DTLS packet with 107 bytes
[GCKSession] Not in connected state, so giving up for participant [0033CD39] on channel [0].
[ERROR] ICEStopConnectivityCheck:2688 ICEStopConnectivityCheck() found no ICE check with call id (3394873)

ただ,解決後も消えなかったものがある.

解決策

  1. MCSessionの初期化時にencryptionPreference.optionalにする
let session = MCSession(peer: self.ownID, securityIdentity: nil, encryptionPreference: .optional)

2.MCSessionDelegateにdidReceiveCertificateを実装する

func session(_ session: MCSession, didReceiveCertificate certificate: [Any]?, fromPeer peerID: MCPeerID, certificateHandler: @escaping (Bool) -> Void) {
     certificateHandler(true)
}

以上2点の変更を施すとconnectedが出て,接続できるようになった.

おまけ

Edit Scheme -> Arguments -> Enviroment Variables でOS_ACTIVITY_MODEをdisableにすると邪魔なエラー類が出力されないようになるので便利.

感想

動いてくれないとかなりまずかったので助かった. 先にも書いたが,MultipeerConnectivity自体がかなり怪しいらしく,調べていると至る所で同じような症状に引っかかっている人を見つけることができた. 今後は,なるべく使わないようにしていきたい.

参考

stackoverflow.com

forums.developer.apple.com

学会発表・山形かみのやま温泉にて

学会発表で山形県かみのやま温泉へ行った.

f:id:teakun:20171118142454j:plain
会場の温泉宿から見えた紅葉の様子.これぐらいしか見るものはなかった.
北陸の方へ行くのは初めてでそれなりの寒さを予想していたが,雪がちらつく様子が見られるなど予想以上の寒さであった. 滋賀から山形までは新幹線で5時間くらい. 新幹線に乗る度に,金さえ積めばいくらでも日本中どこでも素早く移動できることが分かる. 開催地の温泉宿は駅からは歩いて15分弱とアクセスも良く快適だった. 僕が参加する研究会では毎年この時期のイベントが,首都圏から近く交通の便の良い温泉地を開催地とし,半ば旅行のような形で開催されることになっている. 重鎮の先生達の希望で,毎年これまでに開催されたことのない地域を選んでいるという話を他の参加者から聞いた. 確かに過去十数年の開催地の一覧をみると日本各地を転々としており,担当者の苦労が伺える. 2日間の学会中,若手研究者がコンビニへの買い出しや各種準備など,パシられている様子が多く見られた. アカデミックの世界,引いては社会の厳しさのようなものを感じる.

久々の学会参加で集中していたこともあって,他の大学の方の発表はかなり楽しく聞いていた. ネタとしてわかりやすい分野を扱っている研究会なので,とっつきやすい発表ばかりである. その中でも,誰も扱っていない分野をとりあえずアイデア勝負で切り開くような印象の発表が多く,そういった発表の方が質疑が盛り上がっていた.

肝心の自分の発表は,いまいちウケが悪くがっかりであった. 研究分野が違っていたのか,発表の内容が悪かったのか.テーマ設定が悪かったのか.多分全部だろう. M2の11月ながら対外発表として出すのは初めてのネタでそれなりにウケてもいいかなと期待していたのだが,そうはうまくいかないものである. 発表中,先生たちに興味を持ってもらえている様子はなかった. 研究は技術的な正しさよりも,テーマ設定の正しさが正義だと思わされる. 作業できる期間としては実質残り2ヶ月ほどしかなく,もう研究は収束に向かうしかない. 現状の厳しさを乗り越えつつ,ごまかしつつ,なるべくいい形で終われるように持っていきたい.

奨学金

院生になってから借りていた奨学金の返済手続きのガイダンスがあった. こういったガイダンスがあると,着々と学生の終わりが近づいているのだなと感じる. 学費を全て奨学金で賄っていたという事情もあり,たった2年とは言えどそこそこの金額を借りていた. 就職してからの月毎の返済額を計算すると気が重い.

引き落としの口座は,奨学金の返済は後輩へのリレーであるという意味を込めて"リレー口座"と呼ぶ. 奨学金を返すことを,次の学生へ還していくという意味を込めて"返還"と呼ぶ. といったような説明が書類にあり,奨学金にまとわりつく汚いイメージを,ネーミングで誤魔化そうとする意図が見て取れた. 普通に引き落とし口座とか返済とか呼んでくれる方が,まだ清々しい気持ちになれると思う.

2017/10

ここ数ヶ月アップデートのために審査へ出し続けていたアプリが,この10月,ついに10度目のリジェクトを受けた. 普通のリジェクトならまだしも,今回は"The next submission of this app may require a longer review time"というメッセージが審査結果に含まれていた. これはインターネットの情報によると,要するに「もうこのアプリの審査はしてあげないよ」ということらしい.実質,再起不能である.*1 それに加え審査結果にはライセンスの停止をチラつかせるような文章もあった. ここまで何度も機能の追加と提出を繰り返し,リジェクトの度に抗議文を送り続けてきた.しかし,末端開発者としては他のアプリまで止められるわけにはいかず,ここで一旦屈することを決めた. 確かに,他人の褌で相撲を取るようなアプリであることは重々承知していたのであるが,それでも必死で作ったもので,DL数も思い入れもあったので非常に厳しい. 10度に渡るリジェクトから得られた知見は,またどこかで披露したい.

10月に起きたあれこれ

ジープ水没

珍しく父親とアウトドアに出かけたところ,父の愛車のジープが川にスタックした.なんとか引き上げられて修理工場まで運ばれていったものの,未だに修理できるのかは不明.

内定式

無事に内定式を迎えた.内定をもらってから10ヶ月ほど経っているのでやっとこさである.内定者課題は無しと聞いていたが,式中で課題のお知らせがあった.内心焦っている.

来月もぼちぼちやっていきましょう.

*1:後から調べていると,このメッセージを受け取った時点でほぼアカウント停止状態との記述を見つけた.他のアプリのアップデートをまだしていないのでこの先どうなるのかはもう分からない…

おじさんの筋トレ理論メモ

最近、家の近くにできた格安のジムに契約して通い始めている。 格安なのが魅力であるが、その代わりに器具の使い方やメニューを指導してくれるスタッフがいないので、すべて自分で考えてジムを使っていかないといけない。 そういう仕組みもあって、あきらかなジム初心者、筋トレビギナーが器具の使い方も分からずにとりあえず重りを上げている、みたいな様子をよく見かける。 かくいう自分もその1人で、とりあえず重たいものを持ち上げれば良いんだろ、という気持ちでここ2週間ほど運動していた。

昨日、いつも通りに重りを上げていたら、雑に重りをあげている様子を見かねた筋トレプロのおじさんに突然声をかけられてアドバイスを頂いた。 そのアドバイスが理論的かつパッションに満ちていて思わず心に響いてしまったので、覚えているうちに書き残しておく。

筋トレの方法について

  • 正しいフォームでやる
    • 間違ったフォームは鍛えたい筋肉に負荷がかからないので、効率が悪いし最悪意味がない
    • フリーウェイトはフォームがブレやすいのでまずは簡単な器具からやるとよい
  • どこを鍛えたいかを明確にする
    • 適当にいろんな器具を使いまわすだけでは意味がない
    • 体の鍛えたい場所ごとにトレーニングと休憩のサイクルを作ると良い
    • 同じ場所に負荷をかけ続けるのは良くないので、曜日ごとに部位を決めるなどが有効
  • 重りを戻す時に抵抗することを意識する
    • 重りを上げるときについ力を入れがちだが、戻すときに力を入れるのが大事
    • 意識次第で筋トレの効果はまるで変わるので、闇雲に持ち上げるなどはしない

食事

  • プロテインなどのタンパク質を筋トレ後に取る
  • 運動中にはBCAA?なども有効
  • おじさんは一日の食事を6回に分けて常に胃が動いている状態を作っている(らしい

おじさんの考える筋トレの効用

  • 若さを保てる
    • 筋肉があると疲れにくいので、仕事の運動量なんて大したことない
    • 若者とシンプルにパワーで張り合っていけるという自信
  • 精神的に強くなる
    • 筋トレとは日々限界を超えていく経験を積むことであり、その経験を積んだ者は筋トレだけでなくあらゆる場面において限界を超える力が出せるようになる

その他

  • 筋トレは破壊と再生の繰り返し、その繰り返しを制するものが筋トレを制す
  • 若いうちは2ヶ月もしっかり筋トレすれば劇的に変わる(おじさんは55歳)

これが全て本当かは分からないし実践できるとも限らないが、今のところはおじさんを信用していて、出来るところから改善しようと思っている。 とにかく、おじさんの隆々とした筋肉には、その理論を信じさせる説得力があった。

就活

就活についての記事を書いたまま下書きになっていたので、多少書き直してこっそり公開することにしました。 前々からちゃんとブログをやりたいと思っていたので,この記事を一発目にしてぼちぼちやっていきます。

(以下本文)

無事に就職活動が終わりましたので報告します。

幸運にもめちゃくちゃ行きたいと思っていた企業から内定を頂きまして、来年の4月から某web企業のエンジニアとして働く予定です。 面接では、iOS開発がやりたいiOSエンジニアとして俺を使ってくれ、と言った記憶しかないのですが、実際にどんなことをするかはまだ何も決まっていません。

就職活動は逆求人行ったり会社見学したりインターン行ったりして、割と面白い経験だったなあと思っているので今回はそういう話を書き残しておきます。 スーツ着て説明会に出てES書いて…みたいなことをしないザ・web系就活って感じで、今から書くことは一般的な話とは違うけれど、同じ業界を志す人にはなにかしら面白いところがあるかもしれない。

逆求人イベント出た

これがもう全ての始まり。 まずは手始めにインターンいくか、みたいな気持ちになっていたのでweb業界では割と有名と思われる逆求人に出た。 参加したのはインターン期の6月に2回、10月に1回。 一回のイベントでは8ターン*30分で人事の人と代わる代わる話していって、話が合えばインターンの選考だったり会社見学だったり次のステップに進む。 イベントは面接ラッシュみたいに進んでいって喉がつらいが、確実にトーク力は上がった。 面談した会社からは自分の印象などをフィードバックしてもらえるのでそれもありがたい。 ジースタイラスのイベントでは参加者に順位がついたり、ある会社から1番と評価してもらえると、あなたはこの会社からNo1に指名されました!って教えてくれるので嬉しくなる。

自分はスキルセットがiOSにめちゃくちゃ偏っている自覚があり,あんまりウケが良くないんじゃないかと思っていたけれどそうでもなく,iOSエンジニアも割と必要とされているように感じる。 自分の場合は技術面を褒められたというよりも、実際に作ったものを公開してるという部分を評価してもらえた(と思っている)。 ただ、スキルが偏っていたせいで,iOSを必要としていない会社からは全く見向きもされなかった。 まぁ当たり前っちゃ当たり前だけど、ゲーム作ってきましたって人がゲームに強い会社から興味持ってもらえるのと同じ。 web制作とかサーバサイド、インフラとかのスキル持っている人はどこでも必要だし多分どこからもウケるんじゃないだろか。しらんけど。 とりあえず、別に就活を意識していたわけではないけれど、世の中に自分が作ったものを出しておくことの大切さを感じた。

結果的に逆求人で出会った会社から3つの会社のインターンに参加させてもらった。 イベントに出させてもらったのはジースタイラスとサポーターズで、自分の中ではここの2つが二強みたいなイメージがある。 2度イベントに出ただけでかなりの企業と話すことができたのでお得感がすごい。 特にジースタイラスにはめちゃくちゃお世話になったと思っています。 就活の話から全然関係ない話まで聞いてもらったりとても助けてもらいました。感謝しております。 逆求人はweb系を志す人にとってはとても良い仕組みで、就活の手始めに最適だった。 人と話しまくるの大変だけどとても楽しかったので、就職したら今度は企業側で出させてもらえるようになりたい。

逆求人よ、今度会う時は客だ!

インターン行った

逆求人で知り合った3社に加えて自分で応募した1社、合計4社のインターンに行った。 時期は基本的に夏休みで、この時期にインターンを開催しているのはどこの会社も同じ。 1泊2日のハッカソン、一週間の実務風、1ヶ月半の長期実戦投入、などなど期間と形式はそれぞれいろいろあるし、会社の色も違って面白い。 会社の雰囲気を見る、という点からすると一週間以上のインターンがおすすめです。 いざ就職してしまうとなかなか他の会社にここまで入れる機会はないだろうし、エンジニア志望の学生というだけでいろんな所でめちゃくちゃにもてなしてもらえるので、身分をフル活用して楽しんでしまった。 誰かがこんなにもてなしてもらえるのは今のうちだけ、と言っていたので身分があるうちに全力で楽しめばいいと思う。

具体的に中身がどうだったとかいう細かい話はどこまで書いて良いのかわからないので割愛。 でも、どのインターンも面白くてスキルアップにもなるし給料も出て最高、という感想に変わりない。

選考受けた

インターンに行ったところ、それ以外にもいろいろなところから選考を受けませんか、というお話が飛んできたけれど迷いながらも最終的には3社ほどに絞って選考に進むことにした。 iOSをやりたい&やってきたという点を評価してもらえて、なおかつ面白そうという基準で見た結果こうなった。 ちなみに、全部落ちた時はなりふり構わず受けるつもりでした。 業界の流れとして選考の時期が経団連のルールなんてお構いなし、といった様子なので、この業界を志す人はサッサと腹をくくって選考に突入するのが良いと思う。

内定もらった

で、絞った3つの中の一つに内定を頂いて就職活動終了。

最近は内定者懇親会とかにちょこちょこ呼ばれたりしている。文系の話術に長けた人たちとうまくやっていけるのか心配です。みんな仲良くしてください。

不満だったこと

(ここにはガチな不満が書いてあって、そのまま公開しようか迷ったけど読み返してなんとか踏みとどまった。直接聞いてくれれば全部話すのでこっそり聞いてください。)

振り返ってみて

基本的には自分の思い通りのベストな形で就職活動を進めることができたという実感がある。 以下、いくつか反省を列挙。

  • 人間は1つ内定が出てしまうと心が甘えてしまうので、できるだけ同時に複数の会社を並行して進めるべき
  • インターンで前泊が必要な場合はしっかりと先方に確認をとる

まとめ

いろいろと書いたが、結局どこの会社に行っても、選んで良かったと思えるかは自分がその環境でどこまで頑張れるかにかかっているので、頑張っていくしかない。