未来永劫

メリーバッドエンドが好きです.

【TechDesignCAMPエンタメ編】サイバーエージェントのインターンに参加してきた.【2015】

表題の通りです.
機密(ソースコードなど)に触れない程度のお話はしても良いそうなので,ありのままの気持ちを話したいと思います.

参加したきっかけ

そもそも私がこのインターンを知ったのはサイバーエージェントさんのエンジニアブログを読んでからでした.
元々サイバーエージェント秋葉原ラボの記事を読んでいたりしたので,会社自体にも興味があっての参加でした.
また,エンタメ編(ゲーム作る系とエンタメ事業系があった)を選んだ理由ですが,これは3つあって,
1つ目は他のゲーム系には興味が無かったこと.
2つ目は他社のインターンにも興味があったので長期は選択肢になかったこと.
最後はエンタメ事業で使われている,サービスの中身のデータマイニングや関連アルゴリズムに興味があったことです.
なので「開発バリバリです!」みたいな人ではないので,参加者の中では珍しいタイプだったと思います.

エントリーシートからインターン決定まで

某逆求人でサイバーエージェントさんが参加していることは知っていたのですが,サイバーさんが参加していたイベントに参加をしていた訳ではないので選考スキップ等は無く,1から選考に参加しました.
エントリーシートを一人でガリガリ書いて,無事に面接までたどり着き…という感じでした.
面接は,私の場合は1次と2次の2回で,1度目は技術部門の担当の人事の方,2度目は技術系やデザイナーさんなどの採用責任者さんでした.(怖い)
話した内容は色々ありますが,私は自分が興味のある事や作った事のあるもの,研究していた事などアレコレ話しました.
一般的なフロントエンドやサーバサイドとも言えないニッチな分野だったにも関わらず,理解を示してもらえるのが楽しくて話していたという感じでした.
会社の雰囲気や内容なども伺う事ができて,とても楽しかったのを覚えています.

インターンの内容

このインターンは,エンタメ事業部の既存の「AWA」と「宅スタ」をより良くするアプリケーションを作るという内容のものでした.
また,メンバーはエンジニア2人,デザイナー1人の3人チームでした.
どのような技術選定で,どのようなものを実際に行うのかは知らされておらず,インターン開始の数週間前になって「(iOS,Androidの)ネイティブアプリで作る」という事を知りました.
私はネイティブアプリを生まれて一度も書いた事が無かったので,参加が決まった事を凄く後悔してました.(メンバーに迷惑をかけると思って)
期間に関しては6日間(土日も合わせると8日間)で,1日単位では10時から19時の間で行ってました.
実際は私の場合は8日間フルで10時-22時(業務終了後に自主的に残って)とか平気でやってました.

これだけ聞くと悪い印象があるかもしれないですが,実際は全然そんな事もなく,全期間で内定者メンターさんが一緒に協力して下さったり,中のエンジニアさん,デザイナさんが10人以上(もっといたかも)一緒に協力をしてくれる物凄いサポート体制でした.
特に内定者メンターさんには本当に付きっきりでペアプロして頂きました.一緒に理論からロジック,実装まで考えて頂き,この期間で0だったAndroid力が圧倒的成長したのは言うまでもないです.
また,環境も良く,筑波からの交通費に加えて宿泊先を期間中に加えて前泊後泊まで用意して頂きました.本当に感謝してもしきれません.(しかも日給1万円!!)
環境も良ければインターンに関わる方々もいい人ばかりでした.メンバーをはじめ,一緒に参加していた他グループのメンバー,人事の方々,エンジニア,デザイナの方々,色々な人たちが全力で協力してくれました.
お陰で期間中は全然辛くなく,楽しくて楽しくて延々と夜まで開発している感じでした.

余談あれこれ

「楽しくて楽しくて延々と開発していた.」と書きましたが,冗談抜きで楽しかった!
その証拠としていくつかツイートを載せておきます.


例えばお昼ご飯支給してくれたりとかサイバーエージェントの水飲み放題だったりとか.


例えばStatic🍣の差し入れがあったりとか.


例えばおやつにエナジー注入が出来たりとか.


例えばオフィスの自販機がこんなことになってたりとか.


例えばゴリゴリ開発してた結果,こんなことになったりとか.
(これは冗談抜きでメンバーに恵まれて優勝できました.足引っ張ってばかりでしたがメンバーの2人,本当にありがとう!メッチャ楽しかった!)


例えば夜景の綺麗な都内某所が打ち上げの会場だったりとか.

まとめ

約1週間の開発でしたが,丁度良かったです.(多分これ以上短いと制作物の質も悪くなっていただろうし,これ以上長くても疲れてしまってたと思うので.)
とても濃密で価値のある時間になりました.
とにかく技術力があり,魅力的な方々の多い会社だと改めて感じ,自分の目指す場所を考えるいい機会を与えてもらったと思ってます.
技術面でもサーバサイド寄りからネイティブやフロントエンドも触るきっかけにもなって,フルスタックエンジニア感増しました.強くなった感半端ないです.
関係者各位ありがとうございました.また是非お伺いします!

【Security Camp 2015】セキュリティ・キャンプ全国大会2015に参加してきました.【#seccamp 】

5日間に渡るキャンプの参加記事になります.

About me

HN: しょぺたん
年齢:0x14
Like:機械学習, 自然言語処理, データマイニング
日常的にやってる事:Web Developer, Researcher
Securityに関する知識:(ほぼ無かった)

来年以降,参加したいと思っている方へ

記事が長くなると伝えたい言葉がボヤけるので先に結論からお話します.

冗談抜きで5日間が宝物になりました.

情報系に身をおいてから,このキャンプ以上に密度の濃い時間を過ごした事が無いです.
今年は,参加者50名に対して講師・チュータを始めとした方々が45名以上と恵まれたキャンプとなりました.

参加しようとしている方,惜しくも今年参加出来なかった方もいらっしゃると思いますが,来年度以降もチャンスがある方は
まずは絶対に応募用紙提出しような.
セキュリティに興味が無い方もいらっしゃると思いますが,興味ない人こそむしろ参加した方が良いかもしれません.

セキュリティ・キャンプに参加すると,

こんな事になったり,

こんな事になったりします.しかも,全額無料で.


今年は「未解決問題に対してどのようなアプローチを仕掛けるか」というテーマのグループワークがあり,
最終日に講師・チュータさんをはじめ,協賛の企業さんや関係者の方々,に向けて成果発表をするセッションがありました.

セキュリティを知らなかった人間でも沢山の方々に評価を受け,グランプリをいただくことが出来ました.いえーい

今までセキュリティに興味が無かった人ほど吸収できることは多いと思います.


Q.「全然分からなくて申し込むのすら億劫」
A.申し込まないと永遠に分からないままかもしれないです.
逆に気持ちさえあれば,何倍も知識の吸収ができます.マジで.
また,分からなくても事前学習があるのである程度のところまで引き上げられます.
授業についていけないと思う人もいると思いますが,講師やチュータの皆様のお陰で 分からなかった私でも最後まで完走できました.


Q.「大体知ってるし行かなくてもいいわ」
A.知ってる人こそ参加すべき.
これだけすごい人が集まってるのってなかなか無いですよ.
出来る人に合わせた授業も多く,基本的に知ってる人はどこまででも成長できる機会なのではと思いました.
また,嫌でもすごい人たちに囲まれます.参加者も大抵何かの分野で強い人達です.
こうしたコミュニティって中々形成されないと思うので,人脈を広げるという観点でも非常に価値があると思います.


また,参加してみて面白かったのは,


本当にこれ.

参加したきっかけは?

後述する応募に関する資料でも確認出来ますが,自分の興味関心分野に役立てたいという思いがありました.
セキュリティのスペシャリストを目指していた訳ではなく,普段の自分の活動に活かしたいという気持ちが強いです.

加えて,開発者サイドとセキュリティサイドがあるとすると,ぼくは完全に開発者サイドの人間でした.
(開発者サイドと言うと語弊があります 本当は研究者サイドの興味関心が強いです.)

参加まで

shopetan.hatenablog.com
ここに事前課題に関する以前の記事があります.
参加決定後は事前課題に追われていました.
後は,積極的にCTFを始めたりですかね.

ksnctf.sweetduet.info

CTFは,ゲーム感覚で脆弱性などを発見しポイントを競うものです.
一日丸つぶれするくらい楽しいので一度触ってみる事をオススメします.
ここで頑張った知識がキャンプでも何度か役立ちました.

参加直前

とにかく名刺を沢山刷りました.100枚では足りないとのアドバイスも貰ったので200枚刷りました.
結果的に本当に100枚近く交換したので準備してよかったです…

後は,

参加3日前: Rock in Japan 2015参加(全然寝てない)
参加2日前:某社で30時間ハッカソン開始(まったく寝てない)
参加1日前:ハッカソン終了 夜中に帰宅後 即キャンプ準備(準備に追われ全然寝てない)

参加当日:グロッキーな状態で初日を迎える.

こんな事にならないためにも,是非余裕を持ったスケジュール管理をして下さい…

参加初日

かなり大勢の方々と名刺交換して頂けました.
あんまりにも人が多いと覚えてもらうのに困りそうだったので,海にでも行くような格好して行きました(結果的に色々な人に自分を認知してもらえたのでよかった)

初日は開講式,特別講義と題してプレゼンがありました.
また,初日の夜には早速専門講義が始まりました.

以降専門講義が続くわけですが,専門講義は人によって選択している講義が違います.
私は高レイヤを中心に選択していましたが,他にも低レイヤ,検知,解析と4つのトラックから選択できる形でした.
私が講義中にメモした,各講義の内容はGistでシェアしたいと思います.(必死にメモったので雑ですが,結構ボリュームあります.)


セキュキャン2015講義メモまとめ · GitHub
こちらに全メモがありますのでご自由に確認して下さい.

2,3,4日

本当に朝から晩まで講義です.
朝8時30分にスタートし,22時に終了です.
例年寝坊して遅れる人がいるようですが,今年もいましたね.
ちなみに就寝は23時でした.皆さんちゃんとに寝てました.(寝てました.)

同時にグループワークもスタートし,講義の合間を縫って講師の先生方にインタビューをしたり,ディスカッションをしたり,プレゼン書いたり…
実際,体調的にはかなりしんどいですが,皆さんちゃんとに寝てましたので元気でしたね.(元気でした.)
ご飯も3食きちんと食べられますし,食事中も色々な人とお話ができるので楽しかった!

最終日

グループワークの成果報告会がありました.
僕達のグループは近年市場の規模が懸念されるブラックマーケットに焦点を当てて問題解決に取り組みました.

www.slideshare.net
結果的に9チーム中1位のグランプリを頂けました.
(ふざけたスライドですが)よくまとまってるとのコメントも頂けたので宜しければ何かの参考にして下さい.

また,最初にtweetを埋め込んだように,協賛企業の方のグッズや,講師の先生方が書いた本など,沢山いただくことが出来ました.

まとめ

非常に有意義な5日間でした.
僕自身もかなり成長できたと思っています.そういった意味ではチャンスを活かせてよかった!

興味があるなしに関わらず,この記事で何らかの参考になれば幸いです.
時間ごとの詳細な感想も他の参加者の方がきっと書いてくださると思います.


本記事は,次回以降の参加者に参考になるように執筆しました.
何か質問や問題があれば遠慮なくお声がけ下さい.
ありがとうございました.


講義資料のまとめもあるようなので是非ご参考にして下さい.(私はメッチャ参考にしてます!)d.hatena.ne.jp

セキュリティ・キャンプで"""最高の夏"""にしような.

GitHub Shopでグッズを共同購入した.


エンジニアならGitHubを使った事がある人,使っている人は多いのでは無いでしょうか.
かく言う私も最近GitHubを活用してアレコレとコード書いたりなんなりしているので,ここのマスコット,Octocatちゃんへ愛着があります.github.com
この左下の猫ちゃんね いやタコなのかもしれないけど

買いました.

twiPlaというサービスを活用して,一緒にグッズを買ってくれる人を募りました.twipla.jp

手順メモ

まずは注文

github.myshopify.com

こちらで適当に注文したら…

支払い方法

購入時に何で買いますかって聞かれます.
過去に購入していた人は皆Paypalを使っていたようなので,私もPaypalからの支払いをしました.
Paypalでは,住所を記入する欄があるのですが,日本語の住所だと届かない事があるようなので,海外向けに英語を書きなおしてやる必要があります.

judress.tsukuenoue.com

実はこんなサービスがあるので,オススメです.
郵便番号とかを入力したら,サクッと海外用に変換してくれる便利なものです.

支払いが完了したら

当然ですが支払い完了のメールが届きます.
支払い時は当然ドル換算ですが,この支払いのドルに加えて,配送料や関税がプラスで掛かります.
私の場合は,

Subtotal : $244.00 USD
Shipping : $76.05 USD
Total : $320.05 USD

こんなかんじで引き落としされました.
このShippingが送料ですね.今回は関税は掛かりませんでしたが,送料が非常に高かったです.
従って,購入は共同購入がオススメですね.

起きた問題

注文から配達まで,約1周間程度で到着しましたが,配達時に問題がおきました.
と言っても大きな問題でもないのですが,配達用の小包には住所しか記載されていなかったようで,不在扱いで最寄りの住所の発送所に戻されてしまいました.
GitHub側で発送された時点で「Shipping confirmation for order #*****」というメールが届くので,そのメールで郵便物の発送状況が確認出来ます.
そこに記載されてある番号を,trackings.post.japanpost.jp
こちらに記入したら現在どこに荷物があるのか確認出来ます.
ここで,最寄りに連絡をして届けてもらう形を取りました.

まとめ

簡単ですが購入した事と,起きた問題について書きました.
常時品物が入れ替わるようなので,今後もし購入する方がいらしたら便乗したいのでご一報下さい😊

【Slack+Githubによるissue駆動開発】バックエンドが一行で書けるMilkcocoaを使って落し物共有サービスを作った話

表題のとおりです. github.com
github.com
github.com

この3人を中心に落し物共有サービスを作ってました.
期間はゆるりと週末開発で1ヶ月くらいです.

作った.

LMP -落し物をシェアし合えるサービス-
正式名称は「Searching Lost Property with Milk」です,ちょっと長いですね.
(いまXSS対策してないから各位いじめないで)

なにこれ

落し物を共有し合えるサービスです.
こんな特徴を持ったサービスです.

  • 落し物を共有する.
  • 落し物情報を検索する.
  • ユーザの落し物登録に応じて階級がアップする.

(一番下はまだ未実装です.)
まだβ版なので,データのストアが出来て,ストアしたデータを閲覧出来るくらいですが.
テストデータとかも普通に残っているので,本運用する場合はデータ整理してちゃんと運用しないといけませんね.

どんな風に作ったの?

基本的にはjsゴリゴリです.
デザインはHonokaという日本語も美しく表示できるBootstrapテーマを使いました.honokak.osaka

フロントエンドは自分達でやりましたが,バックエンドはmilkcocoaというサービスを活用しました.
コンセプトは新しいサービスから新しいサービスを!
(既に競合サービスがあったのは後に知った.)

What's Milkcocoa?

簡単な話,バックエンドを1行でやってくれるサービスです.

<script src="https://cdn.mlkcca.com/v2.0.0/milkcocoa.js"></script>

こんな感じで一行書くだけで簡単に利用を始める事ができます.

mlkcca.com

こちらが公式ページです.
簡単な会員登録をしたらすぐに利用を始める事ができます.
チュートリアルに「10分で自作チャットアプリを作る」なんてものもあります.

使ってみてどうだった?

データの容量やセッション数などの制限はありますが,簡単にバックエンドを実装できるほどの強みは無いと思います.
特に,バックエンドを知らなくても殆ど自力で書く事が出来るのは強みだと思っています.
また,日本人のエンジニアの方が始めたサービスなので,ドキュメントが日本語である点や,teratail.com
このteratailと連携して開発者さんが自らmilkcocoaに関する質問の回答をしているのも利用者にとってはありがたいかもしれませんね.

もっとMilkcocoa

Milkcocoaがどれだけ凄いかはこちらでわかります.qiita.com
ちなみにこちらではMilkcocoaを活用した事例がGitHubで公開されています.github.com
Advent Calendarはこちらqiita.com

どうやって開発したの

Slack + GItHubによるissue駆動開発をしました.
分かりやすいのは以下の記事ですね.qiita.com

私達は週に1,2回会って話せる程度なので,基本的には各自個別の作業が中心です.
チャットをSlackで,開発はGitHubでForkしてPR&Merge形式で機能追加を行っていきました.

Slackの良い所は3つあります.

  • チームで共通のルーム名とpassで部屋が作れるところ
  • 真面目な話はここ,雑談はここ といった感じで話の内容ごとにチャンネルを複数自由に作れるところ
  • GitHubと連携が出来るので,誰かがcommitをすればすぐに反映されるので各自の開発状況が分かりやすいところ

大きく分けてこんなかんじです.
私達の場合はGithub通知用のチャンネルを作って,そちらに逐一自動でcommitやPR情報が表示出来るようにしてました.
ページはこちらを参考にしました,qiita.com

また,各自個別で作業をするわけですが,その中で「あれが実現できない」「何故かバグった」などなど,色々な問題が発生しますよね.
そういった時に,GitHubのissueを活用することによって問題を自分の中に留めずに共有するということを意識しました.
例えばこんな感じですね.
milkccaにデータを送る際に正しくデータをストア出来ない件 · Issue #20 · shopetan/LPM · GitHub

進捗状況や,問題発生などを積極的に公開していくことで,自分一人で悩まずに効率的に開発が進められました.
自分は助けを求められるし,他の開発者は問題共有やコードレビューを自然に行えるのでオススメだと思います.

まとめ

LMP -落し物をシェアし合えるサービス-
を作った!

Milkcocoaつよい!

Slack+Githubによるissue駆動開発最高!

OSSとしてコードを公開しているので,協力してくれる方がいたら是非一緒にLPMを作りましょう!
github.com

IoT縛りの勉強会に参加してきた!

TECH LAB PAAK さんの会場で行われた,
IoT縛りの勉強会! IoTLT vol.5に参加してきました.

iotlt.connpass.com

twitterでmilkcocoaのKawanoさん(Yohei Kawano (@bakuonboogie) | Twitter)からお誘いを受けて急遽参加できました!mlkcca.connpass.com
以前開催していたこちらのイベントで,IoTに触れたのが始まりで,抵抗なく勉強会に臨めました.

会場は?

TECH LAB PAAKさんは渋谷のapple storeと同じビルにあります.
f:id:shopetan:20150715155022p:plain
メッチャ広いしメッチャ綺麗!!

f:id:shopetan:20150715154859p:plain
壁にはなぜかGo言語くんがwwww

どんなイベントなの

文字通りIoTオンリーのイベントです!
IoTのイベントではあるのですが,フロントエンドエンジニアの方が大多数を占めており,IoTが如何に注目されてるかがわかりますね.
夏以降,Edisonを使った制作を行うので私としても良い機会でした.

やったこと無いけど大丈夫なの

大丈夫だと思います.敷居は低いです.
初心者向けを対象としたイベントではないですが,初心者向けのLTもあり,私みたいなクソザコでも楽しく聞けました.
登壇者の方もフロントエンドエンジニアが多く,実際に分からなかった目線からお話があったりもしました.

感じたこと

登壇者さんが何人かお話していたのですが,
「IoTはモノを介して様々なサービスを提供する手段」という言葉が響きました.
自分は学生ですが,ユーザがいて,マーケティングを考えてとか,もう少しビジネスよりの考え方が重要かなぁとしみじみ.
マイコンはフロントエンド スマホがセンサという考え方がしっくりきました.

総じて

クリエイティブな方々ばかりで刺激的なイベントでした.
身近な疑問や困っている事を,モノの媒介を通してサービスとして提供するのを意識いて自分自身もアレコレ制作に携われたらなぁと思います.
モノのサービス・モノのデザインですかね,今後大事なことは.

しょぺたんメモ

  • fritzingという回路図作成ソフトが直感的にやれそうで敷居が低くなるかも?
  • IoT × クラウドファンディングも熱いらしい Kickstarterは,コメントが多いほど炎上してるとかなんとか
  • 高級はんだこて(2万超)は溶けがメッチャいいらしいw
  • IoTで牛の歩数管理+適切なタイミングで種付け! 熱い
  • 研究室にFelica認証を導入して,入室回数を競うLAB畜バトルをしたい
  • 実用化を考えていくとスペック問題に陥りがち
  • センサを常備性あるデザインにするとユーザ層が広がる
  • 表現力に富むインターフェースにすると利用シーンが広がる

教師なし学習による異常値検知(1): マハラノビス距離

今回は,マハラノビス距離に基づく異常値検知について説明をします.

これは,教師なし学習により,データのパタンを学習し,このデータから著しく外れたデータを異常値として検出する方法です.
マハラノビス距離とは,統計学で用いられる距離を表す手法の1つです.
似た距離の表す手法としてユークリッド距離がありますね.

おさらい

まずはじめにユークリッド距離の説明をしておさらいをしたいと思います.
ユークリッド距離とは,いわゆる「一般的」な距離を表す手法です.
ピタゴラスの定理で求められることはご存知だと思います.
簡単に2次元平面で考えると,
{ \displaystyle
p = (p_1,p_2)
}および,{ \displaystyle
q = (q_1,q_2)
}のとき,それらの距離は

{ \displaystyle
d(p,q) = \sqrt{(p_1 - q_1)^2 + (p_2 - q_2)^2}
}

で求められますね.
これが一般的な距離計算の手法です.

マハラノビス距離

マハラノビス距離は,先程も説明したように,統計学で用いられる距離を表す手法の1つです.
どういうタイミングで用いられるかというと,多次元のデータが相関を持つ場合に使用される機会が多いです.

仮に,データが n次元の連続ベクトルであるとして,得られたデータ列を,
 x^m = x_1,x_2,…x_m(これらは全てベクトルの集合と考えて下さい)として,

 i番目のデータは,
{ 
  x_i = \left(
    \begin{array}{c}
      x_i,_1 \\
      x_i,_2 \\
      \vdots \\
      x_i,_n
    \end{array}
  \right)
}

と記すとき,その平均値ベクトルμ,分散共分散行列\sum_{}は以下のように求められます.

平均値ベクトル
{ 
  μ = \frac{1}{m} \sum_{i=1}^m x_i
}

分散共分散行列
\sum_{} = \frac{1}{m}\sum_{i=1}^m (x_i - μ)(x_i - μ)^{\mathrm{T}}


そこで,θしきい値パラメータとして,新しいデータxに対して,

  θ < \sqrt{(x_i - μ) ^{\mathrm{T}}\sum{}^{-1} (x_i - μ) }

を満たすならば,xは異常値であると判定します.
この式の右辺がマハラノビス距離と呼ばれるものです.

もっとマハラノビス距離

ここで,\sum_{}単位行列であるときは,ユークリッド距離の2乗が求まります.
\sum_{}が対角行列であるときには,次元ごとのスケールが異なります.
\sum_{}が非対角行列であるときは,これにさらに回転が加わることになります.

下記に示すのは,2次元ベクトル上でのマハラノビス距離に基づく外れ値検出のイメージ図です.
f:id:shopetan:20150704155700p:plain

これは,プロットされた点が,データ点であり,そのデータ点を覆うように楕円が表示されています.

この楕円の中に含まれていない点が外れ値になります.
したがって,閾値θは,この楕円の大きさを示すものであり,どの程度許すかによって外れ値の割合が変化してきます.

ユークリッド距離とマハラノビス距離の違い

f:id:shopetan:20150704160419p:plain
この図を見てもらうのが分かりやすいです.
ユークリッド距離とマハラノビス距離の違いは,距離を定義する際に,多次元のデータの相関を考慮しているかいないかという点にあります.
マハラノビス距離において,相関が強い距離の方向とは,実際の距離よりも相対的に短くなるという考え方です.
ユークリッド距離の場合,距離はx軸,y軸ともに等しい距離になります.
しかしマハラノビス距離は,x軸,y軸ともに分散で形が定まっています.
つまり,分散が大きいと,原点からの距離はあまり離れていないと解釈することができますし,
分散が小さいと,原点からの距離は大きく離れているということになります.

もう少し詳しくマハラノビス距離

f:id:shopetan:20150704160726p:plain
この図は,原点から楕円が複数にわたって描かれています.
この楕円の大きさが,異常値の閾値の大きさを示しています.
閾値が大きいと楕円が大きく,異常値の割合は少なくなります.

楕円の形は分散によって決まるという話をしましたが,この図を山の等高線のようなイメージで解釈してもらっても結構です.
等高線は,同じ高さにある山の部分をくくっています.
マハラノビス距離も同じです.
軸という概念を考えずに,同じ楕円で囲まれた範囲のものが閾値の値になっているという解釈をすれば,円の歪み方にも納得がいくのではないかと思います.

マハラノビス距離の問題点

マハラノビス距離による異常値検出の手法では,平均値ベクトルと分数といった基本概念を通じて異常値の概念を定式化しています.
しかし,平均値自身は,異常値の影響を大きくウケるため,中央値の考え方を利用して異常値検出を行う方法も提案されていたりします.(ここでは割愛)

また,個人的に重要なのは,このマハラノビス距離を用いた距離計算手法では,boolean値のみのデータは使えません.
(1 or 0 の平均値から,1 or 0の論理値を引いて… という手法になるので,何が起きるかは考えてみてください…)

まとめ

  1. マハラノビス距離は,距離を一般化したものである.
  2. マハラノビス距離は,各次元における相関を考慮した距離である.

Bootstrap3(Honoka) + Google Map APIでMapが正常に表示されない問題について

今巷で話題のBootstrap(Honoka)を使ってGoogle Map APIのMapを生成しようとしたらMapが表示されない問題にブチ当たった.

環境

Bootstrap3(Honoka)
Google maps javascript API v3

起こったこと

以下のファイルで実験

たとえば,Google Map APIをBootstrap上で呼び出すために以下のHTMLのファイルとJavascriptを用意する.
HTMLファイルは,純粋にBootstrapとfontawesome,jQueryを呼び出す.
加えて,GoogleMapAPIを使用するためのjavascriptも内に呼び出し,宣言している.
gist.github.com


jQuery(javascript)もGistに公開.
gist.github.com

ゴリゴリ書いたので汚いので簡単に説明すると,Geolocation APIを用いて,現在位置を取得し,現在位置を基にMapを生成するプログラムです.
initializeGoogleMapAPI()内で実際にMapを生成しています.
生成位置は,htmlファイル内の

内で生成しています.

実験結果

Mapが生成されない!
正確には,Mapを生成する関数に正常に入っている事が確認できたので,入っているにも関わらず画面内に正しく表示されていないということがわかりました.
Bootstrapを適用しない場合はこんな感じ.
f:id:shopetan:20150703234458p:plain

ここで,Bootstrapを適用すると…
f:id:shopetan:20150703235001p:plain

正しく表示されません.

解決方法

map_canvasの表示ピクセル数が,横697px x 縦0px になっていますね.
Honoka(に限らず,おそらくBootstrapのテーマ)では親要素にheightの大きさに関する記述が明示されていないのが問題なのだと思います.
従って,htmlファイル内のstyleを

<div id="map_canvas" style="width:50%; height:500px">

のようにして,実際にピクセル数を指定すると,正常に出力がされました.

もしくは,htmlタグ,bodyタグに,直接

html,body {
height: 100%;
}

などして指定すると上手くいくと思います.
bootstrapではデフォルトで縦の長さに関するcssがあたってないため,n%のような可変表示を行おうとすると0pxになってしまうようです.

参考

stackoverflow.com