サンフランシスコ・シリコンバレーで初めてAirbnbを使った感想

3週間サンフランシスコ、1週間シリコンバレーに観光・勉強目的で来ています。
その中で共有した方が良さそうなことをブログに書いていこうかと思います。よろしくお願いします。

経緯

まず滞在先を決める必要があると思って調べていくと、1泊1万円以下となるとドミトリーという選択肢が出て来ました。
1ヶ月いてずっと個室がないのは辛いと感じて、個室のあるホテルを探すと、
モーテル or 1泊3万円のホテル
しか出てこない。そんなにお金持ちでもないので1ヶ月1泊3万円は破産する。

こういった経緯から選択肢にAirbnbが浮かびました。

滞在先について

1軒目(サンフランシスコ)

サービス料や税金を含めて1泊7000円くらいと許容できる金額でした。色々とお店が揃っているダウンタウンからドアツードアで30分くらいの場所。
結構しっかりハウスルールがあって(ドアのロック、トイレの使い方、シャワーは1日5分まで、ゴミの分別などなど)きっちりしているホストの方でした。初めは不安でしたが、慣れると住みやすい場所でした。6, 7畳くらいの広さの個室で快適でしたし。
あと、ホストの方や留学生など同居人も何人かいたので、結構コミュニケーションを取っていました。
語学留学をした時にホームステイをしていたのですが、そんなアットホームな雰囲気を感じました。
ちなみに盗難などなんのトラブルもなかったです。

2軒目(シリコンバレー、正確にはサンタクララ

こちらもサービス料や税金を含めて1泊7000円くらい。
1軒目とは対照的にハウスルールがほぼないです。
me "Do you have any house rules?"
host "Uh, no."
me "No!?"
なんてやり取りをしたくらいです。そのあと喫煙・飲酒はやめてね、夜9時以降は大きな音を立てないでねとかくらいはありましたが他はなかったです。ゴミの分別もいらないって言われた時には驚きました。
あとこっちから質問しない限り特にコミュニケーションはなかったです。質問するとすぐに優しく答えてくれるので良いホストではありましたが、1軒目のホームステイ感とは異なりました。
良い悪いとかではなく、家によって全然違うものだなあと思いました。
ちなみにこちらでも、現在滞在中ですが盗難などなんのトラブルもないです。

共通して思ったこと

当たり前かもしれませんが、困った時にはコミュニケーションを取ることが大事だと思います。
「読書灯が壊れている」
「新しいタオルが欲しい」
「トイレ詰まったんだけど」
「冷蔵庫と電子レンジ使っても良い?」
などなど。
もじもじしてても察してくれるなんてことは絶対にないので、びびらずコミュニケーションをとるとすんなり問題も解決できることが多かったです。

余談

こちらの方ではAirbnbがなくてはならないサービスで、そういう「ないと困る」というのは流行って当然だよなあと感じました。そういうサービスが作れるようになりたいものです。

あとAirbnbの招待コード:www.airbnb.jp/c/tomoyai46

名作カードゲーム「ドミニオン」の初心者のための攻略法

この記事はドミニオンというカードゲームのルールを覚えて、そこそこ遊んだことのある初心者の方を対象としています。

強くなりたいけれどどうしたら良いかよくわからない、という人の役に立てば良いと思って書きました。
意見が偏っているのは重々承知していますが、その分覚えることをシンプルにしたつもりです。

なお、筆者は2016年の日本選手権の本戦に出場した中級者ですので、ある程度は参考になると思います。
それでは攻略法について紹介していきます。

アクションカードはどんなに多くても3枚までしか買ってはいけない

このゲームでの主役といえばアクションカードでしょう。アクションカードを買って使うことはとても楽しいです。

それゆえに初心者の頃は手札から3金出たら「村」を買い、4金なら「鍛冶屋」を買って……というふうにアクションカードをいっぱい買いがちです。

お買い物ゲームとして楽しみたいなら止めませんが、このゲームで勝ちたいならばまずアクションカードばかりを買う癖をやめなければ強くなれません。

もちろん、アクションカードを重ねていくコンボプレイが上級者になるには必要になっていくのですが、最初のうちは必要のない考え方です。
多くの人は手札にアクションカードばかりになって使い切れなかったり、いっぱい使ってカードを引いたもののお金が全然出てない、というのがありがちです。

なので、自分がルール説明を行った後に初心者の方に必ず「アクションカードはどんなに多くても3枚までしか買ってはいけない」と言っています。
それ以上多く買っても手札で重なって使い切れなかったりお金が出ないからです。

プレイヤーが毎ターン使えるアクションカードはアクション数を増やすアクションカードでないなら1枚です。
最初のデッキは10枚のカードがあり、それに3枚のアクションカードと財宝カードを2枚追加して15枚になったとしましょう。
手札が5枚なのでその中に1枚だけアクションカードが入っているのが3ターン続けば良いですが高確率で重なるでしょう。

確率の計算に自信がなくて申し訳ないのですが、3ターンで1回もアクションカードが重ならない確率は1 / 3だと思います。
そんなに低い確率ならば、そのアクションカードより「銀貨」を買っていたほうがそのターンに出せるお金は高かったことでしょう。

3枚でも多いくらいですが、最初のうちはアクションカードを買って使う楽しさから逃れられない人が多いので多めに3枚と言っています。
手札で4金や5金が出た時にそのコストのアクションカードよりも銀貨を買うべきだと判断できた時、あなたのレベルは1つ上がっていることでしょう。

属州の前にまず金貨

f:id:gawawa124:20160929213617j:plain

属州を買うためにはどうやって8金を出すのかという意識が必要です。
最初のデッキではどんなに頑張ってカードを引いても7金しか出ません。

まずは「民兵」などのお金を出すアクションカードか「銀貨」が必要になります。
ただ手札を増やすアクションがない場合、手札5枚から8金を出すには銀貨が3枚、銅貨が2枚必要です。これはなかなか厳しいでしょう。

ではどうするべきかというと「金貨」を買いましょう。金貨があることで属州がぐっと買いやすくなります。
金貨が1枚あればあとは銀貨が2枚と銅貨が1枚あれば十分です。「金貨、銀貨、民兵、銅貨、屋敷」のような手札は実現しやすいことでしょう。

なので、最初のうちは金貨を買うことを目標に、金貨が買えれば属州を買うことに意識を向けて良いでしょう。

公領、属州を買うタイミングと金貨の枚数

金貨が大事なことはわかりました。ただ何枚必要なのか、属州や公領の方を買うべきか、などについてまとめると次のようになります。

  1. まずは金貨1, 2枚
  2. 属州を1, 2枚、買えない時は金貨を足す
  3. 金貨が3, 4枚もあるなら属州か公領を買う

悩むのは8金が出たけど金貨をまだ買っていない時だと思います。
個人的にはそのタイミングなら金貨で良いと思っています。

というのも先程言ったように金貨がないと属州を買うのが厳しいです。
たまたま運が良く8金出ても属州を買うことでデッキが弱くなり次の属州を買うまで時間がかかってしまいます。
それならば金貨を買って力を溜めた方が良いのではないか、ということです。

金貨が1枚入れば属州を買い始めて良いでしょう。6, 7金なら金貨を買い足しましょう。
ただし金貨が3, 4枚にもなればデッキは十分な力がたまっています。
その際には6, 7金は公領を買った方が良いでしょう。
このゲームは勝利点の多さで決まるので公領1枚が勝敗を決めることは十分にあります。

あと金貨の枚数の意識も大事ですが属州を1, 2枚買った頃くらいから「デッキのシャッフル」についても意識できるとなお良いでしょう。
これは金貨を買ったは良いもののデッキのシャッフルが3~4ターン後だとして、買った金貨が使えるまでずいぶん遠そうだと感じるなら公領を買った方が良いということです。

最初のうちはこんなに考えられないと思うので「金貨を1, 2枚買って属州を買い、金貨をいっぱい買ったと思ったら公領を買う」ということだけ覚えておけば良いでしょう。

初めて買うのにおすすめのカード

3枚まではアクションカードを買っても良いと言いました。
そんな3枚のうちにおすすめのアクションカードを紹介していきます。

民兵

f:id:gawawa124:20160929214220j:plain
2金出しながら相手の手札を3枚までに減らす強いカードです。だいたいどんな時でも買って大丈夫です。

ただし「書庫」とは相性が悪いので書庫がサプライにある場合は買うのを控えてください。

なぜなら民兵を使ったとして、受けたプレイヤーはいらないカードを捨てて3枚になった後、書庫を使うとその相手は5枚もカードを引けて強い手札になってしまうからです。

鍛冶屋

3枚カードを引くというシンプルで強いカードです。
手札が7枚になれば銅貨だらけだとしても銀貨が1, 2枚あれば属州が買えます。

またコンボを組む際にも強いお供となります。覚えておくと良いでしょう。

書庫

手札が7枚になるまでカードが引ける強いカードです。民兵に対して相性が良いです。
またアクションカードを引いたとしても脇に置けるというところが良いです。
「地下貯蔵庫」でいらないカードを捨てて手札を減らしたあとに書庫で7枚までに引くコンボも良いですね。

議事堂

相手に1枚カードを引かせてしまうデメリットはあるものの4枚カードを引けて購入も1増える優秀なカードです。
鍛冶屋でいっぱい引いたけど11金もいらないという時があったりしますが、議事堂では購入が1増えてるので余ったお金も活用しやすいところが良いです。

魔女

「呪い」を配りながら2枚カードを引く強いカードです。
このゲームにおいて勝利点ですらデッキを弱めてしまうのに呪いは邪魔かつマイナス点です。
廃棄する手段がない場合呪いを一方的に配られてしまえば勝ち目はないでしょう。呪いだらけのデッキでゲームを続けるのは苦痛以外の何物でもありません。

なので魔女がサプライにある場合は優先して買って良いでしょう。やられる前にやる、ということです。

初めて買うのにおすすめしないカード

先ほどとは逆で初心者の頃にはおすすめしないアクションカードを紹介していきます。
誤解して欲しくないのですが、これから紹介するカードほ自分もよく使うし好きなカードばかりです。
ただ初心者向きではないように感じているだけです。

f:id:gawawa124:20160929214651j:plain
コンボを組むために必要不可欠なカードではありますが、ここまでコンボよりもお金を優先しましょうと言ってきました。
なので村を買うのは初めのうちはおすすめしません。
アクションが余るだけで銀貨より弱いことが多いからです。

村によって増えたアクションを活かすということは手札に村とアクションカードが2枚なければいけません。
3枚もアクションカードがかぶる確率は低そうですし、正直村以外の2枚がかぶった時に悲しい思いをすることでしょう。

玉座の間

これもコンボを組む際に大活躍するカードですが、玉座の間とかぶって欲しくてアクションカードをいっぱい買った結果使い切れない事故が発生する、という未来が見えています。
強い人が使うと本当に強いカードです。ただし上級者向きだと思うのです。

庭園

面白いカードで自分は好きです。このカードがサプライにあるだけでゲームの雰囲気ががらりと変わる良いカードです。

とはいえ庭園を初心者が買うのはおすすめしません。
庭園を買ったはいいものの、その庭園は何点になるのか予測が最初はつかないからです。

デッキが40枚未満でゲームが終わる場合その庭園は3点です。1コスト安い公領です。公領だと考えると序盤から買うカードではないことがわかるでしょう。

では40枚以上にするために庭園をどのように獲得していくか、デッキの枚数を増やす手段、ゲームをどのように終わらせるか、など考えることが多い上級者向きのカードと言えるでしょう。

ただ「工房」や「木こり」など獲得や購入のしやすいカードがある場合買ってみても良いでしょう。
庭園で勝つと気持ちが良いです。

市場

デッキに何枚あっても邪魔にならない使いやすいカードです。
ただし5コストです。結構高いです。

それなら銀貨を買ったほうが安定してお金を出せるでしょうし、「議事堂」や「書庫」の方が強さを実感しやすいことでしょう。

礼拝堂強い!

基本セットの中でひときわ異彩を放っているアクションカードがあります。それは「礼拝堂」です。

このカードは手札から4枚までのカードを「廃棄」することができます。
今まで廃棄について説明してこなかったのですが、重要な概念です。
廃棄とはゲームからカードを除外することです。デッキに戻ってくる捨て札とは違います。

「呪い」は分かりやすく廃棄したい対象でしょう。そして、「銅貨」や「屋敷」も廃棄したい対象となります。
なんとなくもったいない気分になるかもしれませんが、弱い銅貨や屋敷をゲームから除外してしまえば買った銀貨や金貨やアクションカードをより多く使うことができます。
デッキの枚数が少なければ少ないほど同じカードを何回も使えるわけです。

そんなデッキを作り上げるのに役立つのが「礼拝堂」です。
銅貨や屋敷をガンガン廃棄していき、理想は礼拝堂以外は金貨2枚、銀貨1枚のデッキ、現実的には金貨1枚、銀貨3枚のデッキを作り上げて属州を買います。

属州を買いにいくスピードの速さに驚くことでしょう。ただし勝利点がデッキを圧迫するので息切れするのも速いことがわかってくるようになるとあなたのレベルはまた1つ上がっています。

それでもコンボを組みたいあなたへ

ここまでアクションカードは3枚までにしてお金を買うことを中心にプレイするよう説明してきました。
忠実に守ったあなたはそこそこ勝てるようになっているでしょう。

ただしどこか物足りない感覚にも陥っているのではないでしょうか。
機械的にお金ばっかり買っていつも同じゲームをしているようですし、コンボを上手に組まれて負ける悔しさを味わっているかもしれません。

なので、それでもコンボが組みたいあなたへ、コンボが組めるサプライかの見極め方だけ伝えましょう。

アクションを増やせるか

「村」や「祝祭」のようにアクション数を増やせるカードが必要です。これがないとアクション数の増えないカードは重ねられず困ってしまいます。

カードを引くアクションカードがあるか

「鍛冶屋」や「議事堂」のようなカードがないとコンボを続けることは難しいです。

廃棄またはデッキの回転率を上げることが可能か

「礼拝堂」や「地下貯蔵庫」などです。これがないと村と鍛冶屋を重ねてもデッキを引き切るのが難しいことが多いです。

購入を増やせるか

頑張って引き切ったはいいもののお金がありあまっているという状況はもったいないです。
16金2購入という状態になっているのが望ましいです。

あとはお金がちゃんとデッキにたまっているかという意識を持っていればコンボを組む際に事故が起きることが少ないでしょう。

(おまけ)慣れてきたら拡張にも手を出してみよう

中級者となった今でも、基本セットを遊ぶたびに新たな発見があって面白いです。
それだけドミニオンが素晴らしいゲームなのでしょう。

ただ、繰り返し遊べば少し物足りなくなってきます。
なので、そんな風に感じたら何か拡張セットを1つ買ってみると良いでしょう。

「陰謀」や「海辺」には使いやすいカードが多くて自分は好きです。
ただし「拷問人」や「幽霊船」など強力すぎるアタックカードがあるため、友達をなくさないようある程度相手を選ぶ必要があります。

「異郷」はカードの効果がわかりやすく比較的アタックカードも優しく、おすすめの拡張です。
「よろずや」の万能感や「厩舎」のデッキ回転の速さ、「値切り屋」のお買い物が楽しい感覚が味わえるなど、買って損しない拡張でしょう。

まとめ

最後にまとめます。

  • アクションカードはどんなに多くても3枚までしか買ってはいけません。それ以上多く買っても手札で重なって使い切れなかったりお金が出ないからです。
  • 属州の前にまず金貨を買いましょう。金貨を1, 2枚買って属州を買い、金貨をいっぱい買ったと思ったら公領を買うのがおすすめです。
  • 初めて買うのにおすすめのカード:「民兵」「鍛冶屋」「書庫」「議事堂」「魔女」
  • 初めて買うのにおすすめしないカード:「村」「玉座の間」「庭園」「市場」
  • 礼拝堂でガンガン銅貨と屋敷を廃棄すると強いです。ただし、勝利点がデッキを圧迫して弱くなるのも早いことにも注意しましょう。
  • それでもコンボを組みたいあなたへ:以下をサプライから見極めてコンボを組めるか判断しましょう。お金がデッキに溜まっているかも忘れずに。
    • アクションを増やせるか
    • カードを引くアクションカードがあるか
    • 廃棄またはデッキの回転率を上げることが可能か
    • 購入を増やせるか


目指せ、中級者!

名作ボードゲーム「カタン」で中級者になるための4つの意識

こんにちは、がわわです。
最近ドミニオンブロックス、そしてカタンをやっていて熱が高まり思わず記事を書きたくなって今に至ります。技術ブログなのに……。
この記事はルールを覚えてそこそこ遊んだ初級者を対象としています。
中級者になりたいけれど、いまいちわからない、という方に役立てば良いと思っています。
僕は自称中級者で、この記事は経験から語っているので根拠があるものではありません。悪しからず。

さて、自称中級者として、中級者になるために必要なことは以下の4つの意識なのではないかと思っています。

  1. 「10点」への意識
  2. 「交渉」への意識
  3. 「港」への意識
  4. 「カード」への意識

意識を難易度順に並べたつもりです。順番に見ていきましょう。

1.「10点」への意識

ルールも覚えて、「なるほどやっぱり麦がないと勝てないな〜」くらいに思い始めた初級者。
5~7点くらいは取れるんだけどうまい人には勝てない。
なんだよ運ゲーかよカタンってぼやいている。

足りないものは「10点」への意識なのではないかと思っています。
拡張版とかでないと基本的にカタン
10点を取らないと勝てないゲームです。

漫然と道を伸ばして開拓地ばかり建てて「都市にならない……」とか言ってたらダメです。
10点になるには

  1. 都市 * 3 + 騎士王 + 勝利点や開拓地で2点
  2. 都市 * 2 + 開拓地 * 4 + 道王
  3. 都市 * 4 + 開拓地 * 2

あたりがあり得る戦略なのではないしょうか。
もちろん、全部を網羅してないですし、カードや開拓地、都市の数にはぶれがあります。
要は「騎士王」「道王」「どっちもなくて頑張る」ということです。

1はとてもわかりやすいです。
基本的に麦鉄羊を持っていればカードを引いて騎士王を目指して相手を妨害し、
港を得たタイミングで都市化、という単純かつ強い戦略だと思います。

2は木土で道を伸ばして開拓地を建てていく、地味ですがこれもわかりやすい戦略です。
後半に鉄が必要なので、木港や土港は押さえておきたいですね。

3は序中盤で騎士王狙い、道王狙いの人たちに差をつけられている時に仕方なく取らなければならない戦略です。
あまり勝率は良くなさそうですが、騎士王・道王が取れないからと言って腐らないことが大事だと思います。
交渉したり港を押さえたりで目立たずじわじわ逆転を目指しましょう。

2.「交渉」への意識

初級者の頃は4:1貿易を考えてしまいがちです。
ですが、4:1貿易は効率が悪いです。
なので、がんがん交渉してみましょう。
全体的に場を見て、どの資源が薄くて、プレイヤーによって必要そうな資源は何か、
そこらへんを考えて「お互いに得をする」交渉を心がけましょう。

ただし、交渉は相手ありきのものです。
それだけに依存しては予想外に出遅れたりするし、
中盤では港を押さえているプレイヤーはもう交渉してくれなかったりもするので注意しましょう。

3.「港」への意識

あった方が良いものです。港がないということはダイスの目か交渉か4:1貿易でしか欲しい資源は得られません。
満遍なく資源を取れる配置になっていたら良いと思うかもしれませんが、そんなにゲームはうまく進みません。
なかなか鉄がでてこない……とかはよくあることでしょう。
そして4:1貿易を期待しすぎると手札が増えてバーストの危険性も高まります。

おすすめは2:1港でしょう。
なので、初期配置の時点で自分が得られそうな資源とそれに関する港の位置は押さえておきましょう。
そして、初期配置の道は港の方向に伸ばしておいて、3軒目の開拓地は港に建てるのがわかりやすいのではないでしょうか。

ただし、港を持っているプレイヤーは速いので警戒されがちです。注意しましょう。

4.「カード」への意識

初級者の頃はカードはなんとなく資源が余っているから引くもの、という風に思いがちです。
しかし、カードは強いです。絶対に覚えるべきです。
以下は発展カード25枚の内訳です。

  1. 騎士 * 14
  2. 勝利点 * 5
  3. 街道建設 * 2
  4. 収穫 * 2
  5. 独占 * 2

順に見ていきましょう。

1.騎士

これは14 / 25の確率で引けます。強い理由として盗賊を好きなタイミングで動かせることです。
自分の資源の上に盗賊が乗っていてもそれをはねのけて相手を封殺できる。
それがたったの麦鉄羊が1つずつで良い。相手から1資源奪えるから実質2資源でいい。

さらに、3枚集めれば騎士王で2点です。実質2 / 3点です。

最後に、道王と違って騎士王は奪い返されづらい。
なぜなら、追いかけてきたプレイヤーに盗賊を置いてやれば良いからです。

2.勝利点

勝利点を引くと「なんだ、勝利点か」ってなっている人も多そうですが、たったの麦鉄羊が1つずつで1点が得られます。
開拓地だって4資源なので、勝利点は3資源で良いので効率が良いといえます。

3.街道建設

カード戦術だとあまり要らないカードですが、開拓地を作るための特急券くらいに思うと良いのではないでしょうか。

4.収穫

カードでは一番弱そう。でも好きな資源を2つなので、中盤に困った時の使い勝手の良いカードだと思いましょう。

5.独占

友達をなくすカード。終盤で逆転の秘策になりうる強いカード。
終盤になると都市を建てているプレイヤーも多いので、場全体で手札の枚数も増えているため独占で得られる資源の数は5~10くらいだと考えているとその強さがわかるでしょう。
序盤では4:1貿易を考えてこつこつ集めているプレイヤーからむしり取って封殺し、速攻で逃げ切るというのもあるのかもしれません。見たことはないですが。

ちなみに交渉からの独占は友達をなくすので注意しましょう。
どういうことかというと

A「俺の麦2とお前の鉄2を交換しようぜ」
B(よし、これで俺も都市が建てられるぞ……)
(交換後)
A「麦を独占する」
B(こいつ、俺の鉄2をむしり取ったあげく場全体から麦を回収するだと……)

ってことです。
ルール上問題ありません。http://www.catan.jp/faq-page/monopole/
が、世界選手権(http://www.gp-inc.jp/catan/catan2012j/world.html)でも最悪の空気になったそうですし、
よっぽど勝ちにこだわらなければならない場以外ではやめたほうが良いです。

まとめ

中級者になるために必要な4つの意識

  1. 「10点」への意識
  2. 「交渉」への意識
  3. 「港」への意識
  4. 「カード」への意識

10点を意識しつつ港をどのタイミングでどこに建てるか、
そしてカード戦術をとるのか道王を目指すのか、
そんな風にいろいろと考えて、時には臨機応変にゲーム途中で戦略を変えられると中級者といっても良いと思っています。

目指せ、中級者!

AutoLayoutとかそれにまつわるライフサイクルでの気づき

【AutoLayout】

  • 自分の端末のサイズを手っ取り早く確認したかったらViewControllerの右から3番目のタブからSimulated Metricsを選択して、自分の端末のサイズを選択
  • SubViewをViewに合わせて調整したいとき:
    • SubViewを選択し、Controlを押しながらViewへドラッグ
    • 例えば中央揃えならCenter Holizontally In Containerを選ぶ
  • 上下左右のConstraintを設定するにはPinから
    • Leading Space = 左
    • Trailling Space = 右
    • Bottom Space = 下
    • Top Space = 上
  • 画面サイズによらない幅や高さもPinからWidth, Heightを選択して固定できる

【ViewControllerのライフサイクル】

  • ViewWillAppear → ViewWillLayoutSubViews → ViewDidLayoutSubViews → ViewDidAppear
  • レイアウト絡みがLayoutSubViews
  • ConstraintはupdateConstraintsが呼ばれたタイミングで更新される
  • つまり、updateConstraints→layoutSubviews
  • よって、viewのframeなどをつかった処理を加えたいときはviewDidLayoutSubviewsで行うのが確実かもしれない

ERROR ITMS-90035とかdsym_upload.shとかInvalid Signatureとかがらみのエラーが出たときの対処法

こんにちは。がわわです。

f:id:gawawa124:20150521105658p:plain

タイトルのようなエラーが出たときのスクショです。
このときに僕がやったのは

Crittercismを抜きました。

ただ、それだけ。
これでSubmit to App Storeできました。

ただ、5.2.0にアップデートすると直る、と聞いたのでアップデートもしてみました。
dsym_upload.shファイルがなくなっていたので、多分Submit to App Storeできるんじゃないですかね。
まだ、試してないですけど。

注意点としては、
Run Scriptのところにdsym_upload.shの参照を外す
ところです。

これをやっていなくてずっとShell script invocation errorが出て困っていたので。
すっぱりRunScriptから削除しちゃいましょう。

以上です。

MultipeerConnectivityの復習

こんにちは、がわわです。
ブログを書くのをだいぶサボってました。Golangでうまくいかずやる気を失っていました。

今日はSwiftの話です。

MultipeerConnectivityとは:
WifiBluetoothで端末間通信を行いやすくするフレームワーク


ざっくり手順:

  • MultipeerConnectivityに必要なオブジェクトたちを用意する
    • MCPeerID:識別子
    • MCSession:セッション
    • MCAdvertiserAssistant:ピアを他のピアから見つけてもらうようにするヘルパークラス
    • MCBrowserViewController:ピアの検索・接続・要求ができる
  • MCSessionのインスタンスがsendDataメソッドを呼び出して送信する
  • 受け取る時はMCSessionのデリゲートメソッドのdidReceiveDataメソッドが呼ばれる

スライスから削除する(deleteみたいな関数はない)

deleteみたいな関数はないようなので自分で書きましょう。

ダメな例

func delete(s []int, i int) []int {
    s = append(s[:i], s[i+1:]...)
    return s
}

func main() {
    s := []int{1, 2, 3, 4, 5}
    s = delete(s, 2)
    //slice:[1 2 4 5], len:4, cap:5
    fmt.Printf("slice:%d, len:%d, cap:%d\n", s, len(s), cap(s))
    //s == [1 2 4 5 5]
    fmt.Println(s[:cap(s)])
}

このままだと見た目は削除できているように見えるんですけど、容量が削除されていないため不要な値が残っているようです。
なので、容量まで削除しましょう。

良い例

func delete(s []int, i int) []int {
    s = append(s[:i], s[i+1:]...)
    //新しいスライスを用意することがポイント
    n := make([]int, len(s))
    copy(n, s)
    return n
}

func main() {
    s := []int{1, 2, 3, 4, 5}
    s = delete(s, 2)
    //slice:[1 2 4 5], len:4, cap:4
    fmt.Printf("slice:%d, len:%d, cap:%d\n", s, len(s), cap(s))
    //s == [1 2 4 5]
    fmt.Println(s[:cap(s)])
}


参考サイト:
Go言語のスライスを理解しよう
Go のスライスの内部実装 - Block Rockin’ Codes