若くない何かの悩み

何かをdisっているときは、たいていツンデレですので大目に見てやってください。

「GitHub トレーニングチームから学ぶ Git の内部構造」に行ってきました #githubjp

GitHub トレーニングチームから学ぶ Git の内部構造」に行ってきました!Gitの中・上級者向けの素晴らしい勉強会でした。おもしろかった!

Octocat!

今回の勉強会で一番面白かったのは、「とりあえずコミットをしろ。そうすりゃあとでなんとでもなる」です。git reset --hard によって消えたはずのコミットが git reflog から復元できるなんて目から鱗でした。現在の変更を破棄したい場合でもとりあえずコミットしておけ、という教訓の意味がやっと分かりました。

末尾に勉強会のノートを添えておきます。 このイベントは、その場で図を書くような説明などアドリブが多く、とてもわかりやすかったのですが、まとまった資料を貼るのが難しそうな発表でした。したがって、資料は公開されないかもしれません。とすると、このノートはいまのところ唯一の資料です!

ちなみに、会場の様子はこんな感じでした。勉強会の後の DrinkUp も最高でした!ベルギービールHoegaardenや、アイルランドビールのKilkennyうまー!!


勉強会のノート

続きを読む

ミクシィ内定者代表者挨拶で披露した「piine!」の技術的こだわり

さて、前の記事からずいぶん時間が経ってしまいましたが「piine!」の技術的こだわりに触れておこうと思います。

こだわりポイント

  • 力学モデル
  • 操作方法はタップだけ
  • 非ネイティブアプリ
  • Webフォント

技術的こだわりポイント

  • Closure Library + Socket.IO
  • Github pages + AmazonEC2

それぞれを順に見ていきましょう。

続きを読む

ミクシィ内定式代表挨拶の舞台裏

f:id:devorgachem:20131001112102j:plain

昨日、株式会社ミクシィの内定式でエンジニア代表として挨拶をしてきました。挨拶の場で披露したリアルタイムフィードバックアプリpiine!開発の舞台裏を紹介します。

開発の舞台裏

代表挨拶の打診

内定式の2週間ほど前に代表挨拶の打診があり、私はチキンなのでかなりビビりました。しかし、最終的には引き受けることに決めました。決心の理由は2つあります:

  • 挨拶が成功したときのリターンが大きい
  • 挨拶が失敗するリスクをかなり軽減できそうだった

特に後者が重要で、リスクコントロールができそうになかったら引き受けていませんでした。 そして、リスクコントロールのための小道具のひとつが「piine!」です。

リスクコントロール

リスクコントロールには2つの戦略があります。ダメージの発生確率を抑えること、ダメージを軽減することです。この2つの戦略をどのように取り入れたかを見ていきます。

まず、自分にありえそうな失敗をリストアップします。今回は2つ考えられました。

  • 噛み噛みでなに言ってるかわからない
  • 内容がぶっ飛びすぎていて、聞いている人がポカーンってなる(ゼミだといつもこんな感じ!)

前者は練習でなんとかします。ダメージの発生確率を抑える戦略です。 後者は挨拶の原稿をよく練ることでダメージの発生確率を抑えることもよいですが、会場の雰囲気など制御しづらい因子が作用することを忘れてはいけません。最高に考え尽くされた原稿が、会場の空気からなんとなくずれてしまうことはありがちです。そこで、ここから先はダメージを軽減する戦略を採用します。

戦略: ハードルを下げておく

自信満々な態度で挑んで玉砕するのは最悪のパターンです。なので正直にビビってることを白状します。この方がハードルが下がり、受けるダメージが少なくなります。ということで、内定式の日よりも前に、挨拶を聞く立場の人達にビビってることを白状しておきました。

戦略: 抱き合わせ商法

挨拶は喋ることしかできないかというと、実はそうではありません。挨拶以外にも、いろいろと小道具を用意することができるはずです。それなりに手間をかけたことが見て取れる小道具であれば、挨拶が滑ったしても悪くは思われないものです。

そして、今回の小道具こそ「piine!」でした。

piine!ってなに

f:id:devorgachem:20131002093612j:plain

「presentation iine!」の略で、ピーネと呼びます。挨拶を聞いてる人がスマフォのpiine!アプリを通してリアルタイムに「共感」の気持ちを伝えられるようにするために開発しました。 操作は一つしかありません。piine!アプリ開いて画面をタップするだけです。強い共感の場合は連打で表現できます。すると、プロジェクターの画面にあなたの共感がリアルタイムに投影されます。

f:id:devorgachem:20131002093633j:plain

技術的なこだわりについては、また次の記事で。

終わってみて

さて、挨拶が終わってみて、これらの戦略がどのような結果をもたらしたかをまとめてみました。

  • ダメージの発生確率を抑制

    • よく練習 → 成功

      喋る内容の順序は変わってしまったものの、大筋は外れませんでした。 繰り返し想起する練習を続けていた成果です。

    • 原稿を練る → 成功

      無難な内容でまとめていったため、期待通り難はありませんでした。

  • ダメージを軽減

    • ハードルを下げる → 不発

      ビビっている事実を白状する投稿にリーチした人の数が多くなかったせいか、あまり効果を感じませんでした。

    • 抱き合わせ商法 → 成功

      エンジニアから見てもそれなりに手のかかっている代物に見えたようで、評判は良かったです。

まとめてみると、ダメージの発生確率を下げる戦略の方がよく成功したようです。 練習は無駄にならないということかもしれませんね!

謝辞

代表者挨拶にあたっては様々な方が協力してくださいました。

  • サーバー提供

    • emon
  • piine!のストレステスト協力

    • cocopon
    • emon
  • 代表者挨拶の準備・手続き

    • 大月さん
    • 人事部の皆様
  • 代表者挨拶の打ち合わせ

    • 山本くん
    • 板倉さん
  • 最悪の失態を未然に防止

  • 写真のご提供

    • 広報部の皆様
    • 大月さん

この方々の協力なくして、今回の成功はありませんでした。 協力してくれた皆さん、本当にありがとうございました!

追記(2013.10.08)

写真を掲載しました。 写真を提供してくださった広報部の皆様、大月さん、ありがとうございました!

パスワード管理ソフト「1Password」運用の勘所 #1password

f:id:devorgachem:20130921201659p:plain

パスワード管理ソフト「1Password」のiOS版(¥1,600)とMac版(¥4,300)を購入しました。今までは人力でパスワードを管理していたんですが、もはや 限界を感じていた のです。今回の記事は1Password運用の勘所と限界を書きます。

パスワード管理ソフトの運用の勘所

パスワード管理ソフトは上手に使わないと、むしろ不安全になります。運用の勘所を書いておきます。

  • マスターパスワードは入力しやすくて強力なものにする
  • ブラウザのパスワード保存はオフにする
  • パスワードを保存するときは 強さを示すゲージが大きいもの個別生成 する
  • 再発行されるパスワードを受信するメールアカウントの認証は 特に厳重 にする(いろいろなサービスで二要素認証を使うなど)
  • 保存されたパスワードを同期するとき(1Password+Dropboxなど)の認証も厳重にする(Dropboxで二要素認証を使うなど)

マスターパスワードは入力しやすく強力なものにする

マスターパスワードはなるべく強いものを選びます。覚える必要があるパスワードは1つだけなのですから、難しくはないはずです。ただ、単に強くすればいいと良いわけではなくて、入力のしやすさも考慮してあげなければいけません。 マスターパスワードは頻繁に入力するものです。入力しづらいものを設定してしまうと負担になるので、パスワードをコピーしたままにするといった不安全な運用の種になるのです。 私は入力しやすくて強いパスワードをつくるために、以下の項目に気をつけています。

  • パスワードを強くする
    • 桁数を大きくする(10~16桁程度)
    • なるべく多くの文字種を含ませる(NG: 1029475、Better: 12~OMg8
    • 使用頻度の少ない記号(^|¥など)を含ませる(NG: 145kasfje、Better: ^14kasfje
    • 文字種の連続を避ける(NG: 61937Gring、Better: 61Gring937
    • 単語、名前、生年月日でありえそうな文字列を避ける(NG: MyBirthday1231、Better: 4hllo_$WO
    • わかりやすいキーボード配列順の文字列を避ける(NG: 123qwer、Better: 312werq
  • パスワードを入力しやすくする
    • キーボード上で離れた文字を連続させすぎない(NG: AospqMnw、Better: AqwMpno
    • 連続する大文字にAZSを含めない(NG: 108XAF.+k、Better: 108XKF.+k
    • 文字種を頻繁に変えすぎない(NG: 1.K@a7d.S、Better: 17.@aKdS

連続する大文字にAZSを含めないのは、iPhoneなどのタッチデバイスでShiftキーを押したままAZSを入力することが困難だからです。

ブラウザのパスワード保存はオフにする

当然の話ですが、パスワード管理ソフトの外にもパスワードが保存されているようでは意味がありません。 ログインの度に、いちいちダイアログが出てくるのもうざいので、思い切ってオフにしてしまいましょう。

また、ブラウザのパスワード保存をオフにしても、よくあるログイン画面の「保存する」チェックをオフにしてログインするようにします。この仕組みはCookieを使っているので、ブラウザのパスワード保存機能とは関係なく動作してしまうからです。

f:id:devorgachem:20130922015929p:plain

パスワードを保存するときは強さゲージが大きくなるものを個別に生成する

パスワードを新規に保存するときには、その度にパスワードを生成するようにしましょう。 これによって、パスワードの使い回しを狙った攻撃(リスト型攻撃)を防御できるようになります。

生成されたパスワードは覚える必要性が小さいので複雑で強度の高いものにします。 16桁程度で数字x3、記号x3(出現頻度の低い記号含む)ぐらいでよいと思います。

f:id:devorgachem:20130922002238p:plain

パスワード再発行先のメールアカウントのセキュリティを厳重する

再発行されるパスワードのメールアカウントの安全性についてはかなり盲点な気がします。 攻撃の手順を考えてみると、パスワード再発行はかなり危険であることがわかります。

  1. 攻撃者がメールアカウントをのっとることができたとします
  2. メールアドレスがユーザーIDになっているサービスは多いので、有名なサービスを手当たり次第にパスワード再発行します
  3. 再発行されたパスワード(またはパスワードリセットするためのURL)が続々と送られてきます
  4. パスワードが再発行されたアカウントはすべて攻撃者がのっとり可能です

大惨事になることは容易に想像がつきますね。しかも、これらの攻撃は素早く終えることができるので、被害者が対処できる時間は長くありません。いったんメールアカウントが奪取されてしまうと、ユーザーには対処する術がないのです。 しかも、パスワード管理ソフトはこの手の攻撃に対してなんら効果がありません。メールアカウントを厳重に保護するほかないのです。

再発行されるパスワードを受信するメールアカウントの認証は 特に厳重 にしましょう。

保存されたパスワードを同期するときも(1Password+Dropboxなど)認証も厳重にする

保存されたパスワードは暗号化されていますが、時間をかければ解読できるものです。 GPUによるオフライン攻撃は高速化の一途をたどっていますから、パスワードが保存されたファイルはなんとしてでも守らなければなりません。二要素認証はよい方法のひとつです(Dropboxで二要素認証を使う)。ただし、二要素認証ではストレージサービスの事業者側からのパスワードファイル流出を防げません(実例があります:Dropboxでセキュリティ障害--一時的にパスワード不要のアクセス可能に)。パスワードファイルを端末内に留めておくことが一番よいのです。同期をするのなら、それを承知の上で、ということですね。

保存されたパスワードを同期するときには、認証を厳重にするようしましょう。

パスワード管理ソフトの限界

パスワード管理ソフトにも限界があります。

  • パスワードが保存されている端末を紛失すると、パスワード再発行の手間・危険性の両面から 大ダメージ
  • 事業者からの流出は防げない(パスワード管理ソフトは流出の深刻さを軽減するだけ)
  • キーロガーには無力
  • 保存したパスワードの同期は便利だが、パスワードファイル漏洩の可能性が強まる

また、二要素認証にも限界があるので過信は禁物です(さらにDropboxの二要素認証に回避方法が報告されているようです)。また、二要素認証を使う場合には復旧できるようによく配慮しておく必要があります。Gmail+二要素認証の場合は、アカウント復旧の設定で代替の電話番号などを登録しておけばよいでしょう。

パスワード管理ソフト「1Password」を使ってみました #1password

f:id:devorgachem:20130921233551p:plain

パスワード管理ソフト「1Password」のiOS版(¥1,600)とMac版(¥4,300)を購入しました。今までは人力でパスワードを管理していたんですが、もはや 限界を感じていた のです。

なぜパスワード管理ソフトが必要なのか

パスワードの使い回し・弱いパスワードを防ぐための措置です。 また、フィッシングに対しても効果があります(ただしDNS関連への攻撃を伴う場合は防げない)。

パスワードを使い回してるひとはカモ

最近、パスワードを使い回している人達を狙った攻撃 (リスト型攻撃)が流行っています(@IT - 「パスワードの使い回しはやめて」、IPAが呼び掛け)。パスワードの使い回しが日本でも多いことはすでに分かっているので、この傾向は起こるべくして起こっています。

IDとパスワードを使い回してる人がどこかで運悪くIDとパスワードの組を入手されてしまうと、アカウントをのっとられます。こういう事件の教訓は、

  • 「パスワードを強くする」 → パスワード覚えづらくなった → もう使い回すしかない
  • 「パスワードを使い回さない」 → パスワード覚えづらくなった → 覚えやすい(=弱い)パスワードにするしかない
  • 「パスワードを定期的に変更する」 → パスワード覚えづらくなった → 覚えやすいパスワードにするしかない or ちょっとだけ変えたやつをローテーション (あんま意味ない)
  • 「ユーザーIDをちょっとずつ変える」→ ユーザーIDがメールアドレスになってるものが多いので 現実的に無理

となりがちで、どれも行き詰まる運命にあります。だいたいの教訓はユーザーにもろに負担がかかっているのですから当然ですね。安全性を高めるときには、負担も軽減しなければならないのです。

私自身は、大小英数記号からなる14桁級のパスワード5種+変化バージョン5種の計10種を使っていましたが、どのサイトでどれを使っていたのかわからなくなりました。新しくアカウントをつくるときに、アカウントとパスワードの組を覚えられていないので 避けるべき使い回しを避けられなくなっていたのです (関係のあるアカウント間でパスワードを使い回すと危ない)。

なぜ1Passwordなのか

Macで動くオフライン型のパスワード管理ソフトで、有名なものだからです。オフライン型というのは重要です。オンライン型のパスワード管理ソフト「LastPass」は情報漏洩の可能性があり、オンラインでパスワードを保存するのには一抹の不安が残ります(ただし、パスワードファイルはマスターパスワードによって暗号化されているので即座に悪用されることはありません)。ただし、Dropboxを利用した1Passwordは同じことになるので注意が必要です。

それと公式Blogを見るに、中の人たちの腕前・誠実さも信頼できそうだったというのも好印象でした。

使ってみた感想

iOS版 1Password

使い方がわかりづらいです! 初見で使い方はほとんどわかりませんでした。 詳しい操作方法の説明は、1Passwordでパスワードを管理する方法に譲るとして、感想です。

パスワードの保存

パスワードの保存は、カテゴリタブの右上の+ボタンからおこないます。

f:id:devorgachem:20130921232428p:plain

すると、カテゴリーの選択画面が出てきます。 しかし、このカテゴリーっていうのが曲者でした。どれを選択すればいいのか全くわかりません。 ちなみに、 パスワードの保存はすべて「ログイン」カテゴリー です。 カテゴリーを選択すると、「ユーザー名」「パスワード」などの設定画面に移ります。

f:id:devorgachem:20130921234023p:plain f:id:devorgachem:20130921233607j:plain

ここでパスワードなどを設定し、右上の「完了」ボタンを押せば保存は完了します。

保存したパスワードの呼び出し

iOS版の1Passwordで保存されたパスワードは、1Password内のブラウザで利用できるようになっています。

f:id:devorgachem:20130921232422p:plain f:id:devorgachem:20130921234912j:plain

つまり通常のブラウジングにはSafariを使い、ログインが必要な場合は1Password内のブラウザでログインするといった利用形態になります。ところが、このブラウザを出すためのボタンが非常にわかりづらい(下の画像の右下の地球マーク)。このボタンに気づかなければ、Safariからどうやって1Passwordにアクセスするのか右往左往しそうなものです。

f:id:devorgachem:20130921232428p:plain

Mac版 1Password

Mac版の1Passwordはもうちょっと素直に使えました。

f:id:devorgachem:20130921201659p:plain

パスワードの保存

パスワードを保存するには下にある+ボタンを押します。パスワードの保存画面はごちゃごちゃ感があり、iOS版よりも入力画面が洗練されていない印象があります。それでもパスワード強度の一覧表示は非常によろしいですね。

f:id:devorgachem:20130922000601p:plain

パスワードのゲージをMAXにするためには、桁数16で使用頻度の低い記号(~|^など)x3 + 数字x3でいけます。出現頻度の高い記号(-.,など)はあまりゲージに影響しないので、出現頻度が低いものに手動で置き換えてあげるとgoodです。

f:id:devorgachem:20130922002238p:plain

保存したパスワードの呼び出し

保存したパスワードはブラウザの拡張機能から呼び出すことができます。これは便利!

f:id:devorgachem:20130922001947p:plain

おわりに

iOS版の1Passwordの見た目はiOS6と親和性が高く、なかなかの好印象です。しかし、使い方がわかりづらいため、慣れるまでに時間がかかりそうです。 Mac版も好印象です。ごっちゃり感が和らげば文句なしです。

ClosureLibraryを超簡単に使えるgoog-starter-kitがSourceMapに対応しました #closure_library

f:id:devorgachem:20130915062025p:plain

@cocopon 氏が開発した goog-starter-kitSourceMap に対応させました。モダンな JS で WebApp 作りたいな—、という人や、ClosureLibraryを使ってるけど SourceMap うまくいかんかったなー、という人にオススメ!おわかりの方もいらっしゃると思いますが、FirefoxOS アプリを ClosureLibrary で優雅に開発するための布石なんですよ!

(画像の引用:html5rocks

goog-starter-kit とは

いまいち知名度が低いけど、すんごく使えるJS開発環境の ClosureLibrary超手軽 に利用できるようにするツールです。@cocopon 氏が開発しました。

ClosureLibraryはPureJSでありながら、型チェック・最適化・モジュール機能・高品質かつ巨大なライブラリ群などなどAltJSに負けないポテンシャルをもつJS開発環境です。なお、Googleさんがデフォで使っているだけあって、かなりの高品質な仕上がりとなっています。しかし、ClosureLibraryは「マジで環境構築がむずい・だるい」という欠点があります。goog-starter-kit を使うと、環境構築から運用までを超簡単にしてくれます。

  1. goog-starter-kitのzipを展開
  2. python tools/setup.py
  3. development/下で開発

運用するときは、下の2つのコマンドが使えます。

  • デバッグする前にpython tools/update_deps.py
  • コンパイルするときはpython tools/compile.py

超簡単です。ハッピーハッピーイエー!!!

SourceMap とは

ClosureLibrary を使うときは JavaScript 圧縮ツール ClosureCompiler を使って製品コードのリリースをするのが一般的です。ただ、ソースコードは圧縮されるときに結合&リネームされてしまうので、デバッグのときに大変になってしまいます。これで血涙を流した開発者は少なくありません。特に、高度な圧縮ADVANED_OPTIMAIZATIONなんか使った暁には元のコードがどこにあるかわかったもんじゃないです。

そこで、スクリプトの圧縮前後の対応関係を SourceMap とよばれる形式のファイルに出力することで、圧縮後のスクリプトから圧縮前のスクリプトを参照できるようにします(gfsさんのSourceMapの可視化ツールをみると、SourceMapのはたらきがよくわかります)。

そんな便利な SourceMap を goog-starter-kit に対応させました。本来 ClosureLibrary で SourceMap を扱うには、 それはそれは面倒な手続き が必要なのですが、ぜんぶ自動でやってくれるようになっています。

(~♥~)の泣き言

3つのツールにまたがっているだけあって、この機能追加は大変でした。

  1. そういえば、SourceMap がいいって聞いたことあるな—
  2. goog-starter-kit に組み込んで簡単に利用できるようにしようかなー
  3. cocopon氏にpush権をいただく
  4. とりあえず、SourceMapのお勉強
  5. goog-starter-kit は python で書かれてるので python のお勉強
  6. 愚直に実装
  7. なぜか動かない (;♥;)
  8. //@ sourceMappingURLという読み込みは古いことを知る
  9. 修正
  10. なぜか動かない (;♥;)
  11. どうやらSourceMapに書かれた圧縮前のスクリプトのパスが間違っているらしい
  12. 該当する ClosureCompiler のオプションを調べる
  13. ClosureCompiler のみではパスを修正できないことが判明 (;♥;) < Oh, F○CK
  14. goog-starter-kit 側で問題を修正
  15. 完成

おわりに

いいなー、と思ったら是非使ってみてください。気軽に使えるようにするためのgoog-starter-kitなのですから。

FirefoxOS端末「ZTE-Open」のまとめ(+予約にこぎ着けるまでの経緯)

ZTE-Open

HTML5でアプリが作れるFirefoxOSの端末「ZTE-Open」を予約した!イヤッホウ!

FirefoxOSのおさらい

Wikipediaさんによくまとめられているので引用。

Firefox OS(ファイアフォックス オーエス、プロジェクト名:Boot to Gecko、B2G)とはスマートフォンとタブレットで動作するMozillaが開発しているオープンソースオペレーティングシステムである。JavaScriptを使っている端末のハードウェアに直接統合できるHTML5アプリケーションが動作するように設計されている。(引用:Wikipedia

さて、スマートフォンのOSといえば、iOSAndroidの2強が有名で、WindowsPhoneBlackBerryOSが後に続く様相です。FirefoxOSはTizenと並んで第三極のOSとして新たに登場しました。

最大の特徴はHTML5でアプリケーションが開発できるということですね。実際に触ったわけではないのでなんともいえませんが、Web屋にとって学習コストは低く抑えられそうです(個人的にはChromeExtension並を期待しております)。KDDIがFirefoxOS端末に興味がおありのようで、日本でも普及する可能性が出てきました。

ZTE-Openとは

ZTE-Openは超廉価なFirefoxOS端末として開発されました。同じFirefoxOS端末のGeaksphone Peakと比べてもかなりの 廉価/低性能 であることがわかります。一部ではゴミだのなんだのとdisられていますが、廉価なところがZTE-Openのよいところなのですね。

仕様 ZTE-Open Peak iPhone 5
OS FirefoxOS FirefoxOS iOS
価格 約 ¥8,000$80 約 ¥26,000€194 約 ¥20,000$199
画面サイズ 3.5 inch 4.3 inch 4.0 inch
解像度 320 x 480 px 540 x 960 px 1136 x 640 px
CPU Snapdragon S1 Snapdragon S4 Apple A6
CPU 動作周波数 800 MHz 1.2 GHz 1.3 GHz
CPU コア数 1 2 2
RAM 256 MB 512 MB 1 GB
内蔵ストレージ 512 MB 4 GB 16 GB
寸法 114 x 62 x 12.5 mm 135 x 65 x 8 mm 123.8 x 58.6 x 7.6 mm
電池容量 1,200 mAh 1,800 mAh 1,440 mAh

※仕様の出典:ZTE-Open の仕様Peak の仕様iPhone 5 の仕様

しかし、US版とUK版で3Gの周波数帯が違うそう。UK版じゃないと日本の周波数帯にあわないようです。購入する人は要注意!

アプリを開発するときには、かなりの低スペック下で動作するように配慮する必要がありそうですね。 最近購入したハイパフォーマンスJavaScriptの知識が役に立ちそうです。

ハイパフォーマンスJavaScript

ハイパフォーマンスJavaScript

ZTE-Openの予約にこぎ着けるまで

予約にこぎ着けるまで紆余曲折があったのでちょこっと書いてみます。

eBay で売ってるらしい

当初に聞いていた話では「eBayで売ってるらしい」とのことだったので、eBayとeBayの代理業者(?)のセカイモンでチェック。

アレ…?なんか、出品者がいっぱいいる… しかも、出品者の皆さん方の評価が低い(高くても怪しい)!暗雲立ちこめてきました。

それでも評価が高くて信頼できそうな業者さんがいたので購入手続きを進めていると、別の問題が発覚。輸入禁止ワードに「battery」の文字が!うーむ、確かに最近に事故があったよね。

結局代理店にお願いした

結局、Jetstream SHOPにお願いしました。 お値段は一台¥16,000とのことですので、かなりお高くつきました。 現在は再販待ちとのことなので、おとなしく待っております。

eBayの怪しげな人たちはいったいなんだったのか

ちなみにeBayで発売されるというのは、ZTE公式アカウントのzte_ukが販売するということだったらしい。つまりeBayの検索で出てきた人たちは、転売業者か詐欺業者かのどちらかというわけで、途中で引き返したのは正解でした。