未来永劫

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

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

セキュリティ・キャンプ全国大会2015に合格しました.

受かりました.

応募用紙のテキストファイル名を
seccurityって間違えて提出しそうになった人です.
それくらいセキュリティ知識がガバガバの初心者です.(ウケる)
ツイッターです.Folow me!
しょぺたん (@ss_shopetan) | Twitter
(ツイートしてから1日足らずで50人フォロワーが増えました.ウケる)

About me

高専生です.やってたことは自然言語処理機械学習データマイニングなど.
(セキュリティの知識は本当に)無いです.

なんで参加しようとしたの

データマイニングをする上で,当然色々なデータを扱う事が多いのですが,
各種データのプライバシー保護とかってどうなってるのかなと思ったことがきっかけであり全てです.

マイニングする上で大事なことは,専門理論ではなく,品質の良いデータを収集する事であると考えているので,自主的にデータを収集出来るようなアプリケーションを作ったりしています.
でも,そうやって取得したデータのプライバシー保護が出来てなかったり,
アプリケーション自体がセキュリティ的な面でガバガバだったら「俺,何も出来ないじゃん」って思ったので参加しようと思いました.
セキュリティと機械学習とかデータマイニングって,本当はとても深い繋がりがあるんじゃないの? と思っているので,セキュリティと仲良くなれたら真理に近づけそう.
そんな事を考えて応募用紙を書きました.

応募用紙をザックリ晒す

以下長いので読む必要は皆無です.
当然答えがあるものではないので間違いも含まれます.ご注意を!

共通問題1

■ 共通問題1
セキュリティ・キャンプに応募した自分なりの理由とセキュリティ・キャンプで学んだことを何に役立てたいかを教えてください。

参加理由が全てです.正しい知識を身につけて自分の専門に活かしたいと書きました.

共通問題2

■ 共通問題2
セキュリティに関することで、過去に自分が経験したことや、ニュースなどで知ったことの中から、最も印象に残っていることを教えてください。また、その印象に残った理由も教えてください。

2chの「fusianasan」の機能について書きました.
リモートホストを表示して,本人を証明するための機能ですが,幼少期のぼくは可愛かったのでこれを素直に入力しちゃったんですね.
案の定なんかIP抜かれるとかすごい事()書かれてて,怖かったんです.
結局何が安全で何が危険なのか正しい理解が無いとダメだし,物作るときもおんなじだよねって事をつらつらと書きました.

共通問題3

■ 共通問題3
その他に自己アピールしたいことがあれば自由に書いてください。(たとえば、あなたが希望する講座を受講する上で、どのような技術力を持っているか、部活動、技術ブログ、GitHub、ソフトウェア開発、プログラミングコンテスト、勉強会での発表・運営などの実績や熱意があれば、あるだけ書いてください。)

やってた研究の話とか,出来る事とかをアレコレ沢山書きました.
書かないと何も伝わらないので,とにかく書きました.

選択問題5

■ 選択問題5 (左側の□について、回答した問題は■にしてください)
以下のようなC言語の関数functionがあるとします。

void function(int *array, int n) {
int i;
for(i = 0; i < n; i++) {
array[i] = i * n;
}
}

上記プログラムをコンパイルした結果の一例 (i386)は以下となりました。
00000000 :
0: 56 push %esi
1: 53 push %ebx
2: 8b 5c 24 0c mov 0xc(%esp),%ebx
6: 8b 4c 24 10 mov 0x10(%esp),%ecx
a: 85 c9 test %ecx,%ecx
c: 7e 18 jle 26
e: 89 ce mov %ecx,%esi
10: ba 00 00 00 00 mov $0x0,%edx
15: b8 00 00 00 00 mov $0x0,%eax
1a: 89 14 83 mov %edx,(%ebx,%eax,4)
1d: 83 c0 01 add $0x1,%eax
20: 01 f2 add %esi,%edx
22: 39 c8 cmp %ecx,%eax
24: 75 f4 jne 1a
26: 5b pop %ebx
27: 5e pop %esi
28: c3 ret

このとき以下の(1)~(5)の設問について、回答と好きなだけ深い考察を記述してください。知らない点は、調査したり自分で想像して書いてもらっても結構です。どうしてもわからない部分は、具体的にここがわかりませんと記述しても良いです。(1)~(2)の回答は必ず答えてください。(3)~(5)の回答は任意です。わかることを書いてください。CPU やコンパイラは特定の実装を例に説明しても良いですし、理想を自由に考えても良いです。

(1)【必須】上記の C 言語のプログラムはどのような動作をしますか。また、この関数を呼び出して利用する main 関数の例を作成してください。

【動作】
配列の各要素に,要素のi番目 * 配列の要素の最大値を掛け合わせるプログラム.

【main関数】

int main(int argc,char *argv[])
{
    int *array;
    int num;
    int i;

    if(argc != 2) {
        printf("pls input number \n");
        printf("$ %s [arraySize] \n",argv[0]);
        exit(EXIT_FAILURE);
    }

    num = atoi(argv[1]);
    array = (int *)malloc(num);
    function(array,num);

    /*debug array*/
    for(i = 0;i < num; i++) {
        printf("array[%d] = %d\n",i,array[i]);
    }

    return 0;
}

(2)【必須】上記のアセンブリコードを、いくつかのブロックに分割して、おおまかに何をしている部分かを説明してください。もし、上記のアセンブリが気に入らないのであれば、好きなアーキテクチャコンパイラアセンブル結果を載せて説明しても良いです。

クリティカルな回答があり,恥ずかしいので載せない.*1

(3)【任意】 コンパイラソースコードの関数を解釈して、ターゲットのアーキテクチャのバイナリを生成するまで、どのように内部で処理を行っていると思いますか。(キーワード: 構文解析、変数、引数、呼出規約、レジスタ、スタック、アセンブラ、命令セット)

はじめに字句解析を行う.これはソースプログラムから1文字ずつ読み出して,プログラムとして意味のある最小単位である字句を認識し,字句列に変換する.
次に構文解析を行い,字句列を受け取ることで文法的な規則を見つけ出す.
発見した文法規則から構文解析木として集約できる.
次のステップで中間コードを生成する.ここでよく用いられるのが3番地コードであり,これはメモリに置いたデータを基にして演算子,結果を再びメモリに戻すことを基本としている.
(中間コードを生成した段階で,中間コードの最適化を図ることがある.)
次の段階では,オブジェクトコードの生成を行う.これは端的に言い表すと,中間コードを機械語またはアセンブリ言語でかかれたプログラムに変換するものである.

これらのプロセスによって生成した機械語は命令セットアーキテクチャとも呼ばれ,バイナリデータ形式でコンピュータ上で動く.

(これ今見るとコンパイラの話ばっかり書いてるね)

(4)【任意】CPU の内部では、プログラムのバイナリはどのように解釈され実行されていると思いますか。(キーワード: フェッチ、デコード、オペコード、オペランド、命令パイプライン、回路)

命令が処理する対象となるデータはオペランドと呼ばれ,主記憶やCPU内部のレジスタに格納されている.
命令はオペコード部とオペランド部に分かれている.
このような命令は,命令パイプラインとして設計することで命令レベルの並列性を高める事ができる.
加算器などの組み合わせ論理回路においては,回路規模が大きくなるほど高速化が図れるが,パイプラインを用いる事で回路規模が小さいまま高速化できる.
RISCマシンでは,IF(命令フェッチ),ID(命令デコード),EX(実行),MEM(メモリアクセス),WB(レジスタライトバック)の5段階に分けている.
しかし,このような命令パイプラインも,各工程で処理に時間がかかる部分があると,後続の命令の実行にも影響を及ぼすため,並列化の良さは活かされない.
従って,適宜最適化をする必要がある.

(高専の頃にザックリ勉強した事をザックリ書いてるだけや…)

(5)【任意】現在の CPU やコンパイラの不満点があれば自由に記述してください。

【CPU】
・大規模データ処理を行う際にCPUボトルネックが起きること.(CPU自体の問題ではないが)
殆どのSQLが処理の並列化に対応していないので,自ら実装しないと手間なので不便.
逆に並列化した場合も今度はCPUの使用率を制御しないといけないので,自家用機でもより性能向上を…

・それに繋がる話として,不満とは違うが,集積回路ムーアの法則がほぼ限界な感じがあるので,
小型化して並列化してCPUの性能を向上するのは頭打ちになっている気がする.
(コア数は増えているが周波数は伸び悩んでいる…)

コンパイラ
・仕方ないことだが,コードサイズが大きくなるにつれてコンパイル時間がかかることは不満点.
ソースコードそのものをRAMディスクに置けば当然かなりの速度向上は見込めるが,リスクもあるのでオススメ出来ない.
ヘッダの依存を減らしたり,プリコンパイル済のヘッダを設定したりなど,細かい設定で速度の改善は見込めるが…
当然インタプリタ型と比較すれば,実行時間そのものの速度は早い.コンパイル中にエラーが出るので安心感はある.が,それを踏まえてもやはり遅い.
結局,原理的には,(3)で話したように,字句解析,構文解析… といったプロセスを踏まなければいけないのが問題.
DeepLearningなどは人間が行っていた特徴量抽出を自動化する事で性能の向上をしてきたので,
曖昧ではあるが,人間が考案したアルゴリズムそのものの部分を一部自動化すれば機械にとっての最適化はされるかもしれない.

コンパイルには時間がかかる,コンパイラの気持ちになったコードを書けば速度はある程度保てる,
しかしコンパイラライクなコードがヒューマンライクなコードに成り得ないという矛盾が最も不満.

選択問題8

■選択問題8 (左側の□について、回答した問題は■にしてください)
gccが持つ-fno-stack-protectorは、どのようなセキュリティ機能を無効にするオプションであるのか、またこの機能により、どういった脆弱性からソフトウェアを守れるのかをそれぞれ記述してください。

【用途】
SSP(Stack Smashing Protection)を無効にするオプション.
SSPとは,バッファオーバーフローを検出してそのような動作をしようとしたプログラムを終了させる.
従って,バッファオーバーフローを検出せずに,プログラムを続行させるものである.

【どのような脆弱性から守れるのか】
攻撃する者がスタック破壊などによってバッファオーバーフローを引き起こすことができると,
攻撃者が実行したいと考える悪意のあるコードでバッファーをオーバーランさせ,送りつけたその悪意のコードを指すように戻り値を書き換えることが可能.

つまり,バッファオーバーフローを引き金にした攻撃を防ぐのがSSPである.
プログラミング言語ではC,C++が自動でバッファオーバーフローを検出してくれないので,SSPを有効にしてコンパイルする必要がある.
(CやC++が検出しないのはメモリ確保(malloc())やポインタ操作などをプログラマ側が自由に出来る事を許しているという背景があるからでは,と考える.)

選択問題11

■選択問題11 (左側の□について、回答した問題は■にしてください)
下記バイナリを解析し、判明した情報を自由に記述してください

D4 C3 B2 A1 02 00 04 00 00 00 00 00 00 00 00 00
00 00 04 00 01 00 00 00 88 EB 40 54 A2 BE 09 00
52 00 00 00 52 00 00 00 22 22 22 22 22 22 11 11
11 11 11 11 08 00 45 00 00 44 1A BD 40 00 80 06
3A 24 C0 A8 92 01 C0 A8 92 80 10 26 01 BB 86 14
7E 80 08 B3 C8 21 50 18 00 FC 0D 0E 00 00 18 03
03 00 17 01 0E FB 06 F6 CD A3 69 DC CA 0B 99 FF
1D 26 09 E1 52 8F 71 77 45 FA

Wiresharkにぶっ込んだ.

【基本情報】
Source:192.168.146.1
Destination:192.168.146.128
Protocol:TLS v1.2
Length:82
Info:Heartbeat Request

【エラー箇所を抜粋】
payload length(invalid,using 4 to decode payload)
Expert info (Error/malformed) : invalid payload heartbeat length(3835)
severity level :error

【考察】
Heartbleedバグに関連する内容?
攻撃者が意図的に長いペイロード長を指定することで,メモリの内容を不正に覗き見することが可能.
rfc6520を参照すると,ペイロード長が長すぎる場合は破棄するように修正されているとのことで,
この場合は明らかにペイロード長が長く,適切なエラーが出ていると考えられる.

選択問題13

■選択問題13 (左側の□について、回答した問題は■にしてください)
これまでに起こったこと(データ)から、これまでにまだ起こっていないことを事前に予想する場合、どのような点に注意し、どのようなことを考慮すべきか熱烈にアピールしてください。

【事前に予測するために…】
最も重要と考えるのは,現在のデータの特性を読み取り,
機械にデータの中から問題を解くための規則性を見つけさせる.
これを目指すことで,ある程度次のデータがどのように遷移するのか予測することができる.
そのために…
・まずは十分な量のデータを集めることが望ましい.(機械学習でいうところの教師あり学習に似ている)
・TargetをFeatureの関数で書き表すことを目標にする.

【注意すること】
1.異常値検知は絶対にしなければならない.
例えば有名な手法にマハラノビス距離を用いたデータ同士の距離感から異常値を求めるものがある.
これはデータ間の距離がある閾値を超えたものを異常値として認識し,排他していく手法である.
実データから未来を予測するためには,どういった特性があり,その中でどういったものが異常値であるのか認識する必要がある.
閾値によって,異常値が多い傾向にあるとデータを解釈出来た場合は,未来のデータもどの程度が異常値になるのか推測ができる.
2.推定には様々な手法があるが,使うアルゴリズムではなく,使うデータが重要である.
アルゴリズムは様々存在しているが,もっとも重要なのは扱うデータの質である.
どれだけ優秀なアルゴリズムであってもデータ量が足りなかったり,使うデータがバラバラであっては意味が無い.

【考慮すべきこと】
1.異常値のないデータは存在しないというスタンスでいること.
2.どのようなデータであっても完璧なデータは存在しないし,完璧なアルゴリズムも同様に存在しない.
3.推定した結果が必ず正しいと思わない.

他の合格者さんのBlog記事

pazzle1230.hatenablog.com
olambdasawa.hatenablog.com
nanuyokakinu.hatenablog.jp
katc.hateblo.jp
clariroid.hatenablog.com
[技術|SEC] セキュリティ・キャンプ 2015 全国大会 個人的なWriteupのようなもの | 話譚でいいと思うよ

*1:すでに出題者の方が掲載してくださっています. /var/log/hktechno: セキュリティ・キャンプ 2015 応募用紙 選択問題5 のまとめ

Mac OSX Mavericks + SublimeText2でSASSをビルドする際に躓いたこと

中々ビルドが通らずにエラー頻発していたのでメモ

環境

Mac OSX Mavericks
ruby 2.1
Homebrew & rbenvインストール済
SublimeText2 sass buildインストール済

エラー内容

sublimetext内で,sassのビルドをすると,

[error] No such file or directory

と叩かれる. なんでやSublime

Mac で SublimeTextのsassをbuildする手順

手順1

$rvm use system

で最初にrvmを設定する.(不要かもしれません)

次に,

$gem install sass

でsassをインストール

手順2

$ which sass

でインストールしたsassの場所を確認

自分の場合pathはこんなかんじ
/Users/[user_name]/.rbenv/shims/sass

手順3

$ ln -s /Users/[user_name]/.rbenv/shims/sass /usr/local/bin/sass

でsassのリンクを貼ってあげるとうまくいきました.

参考

stackoverflow.com