シリコンバレーのstart up pitch festに参加してきた

留学2週目のまったり更新

今週はSVE East Bay Pitch Fest - Patents and Reportersに参加してきましたので、その感想をまとめていきます。www.meetup.com

そもそもPitchって?

近年、日本でもちょこちょこ目にするようになったPitchコンテストですが
投資家の目の前で2分前後(今回は2分でした)で自分たちが投資して欲しい事業についてプレゼンを行うという資金調達のための出会いの場見たいなものです。
ここで投資家の目に止まれば後日話しがあったり、その場でお金が動いたりするわけです。
今回のイベントではこんな感じ
f:id:pokotyamu:20150812190759j:plain

何を話しているのか?

私が見ている限り、全てのプレゼンが以下の4点について話されていました。

  1. 自分たちの事業でしか解決できないとする問題
  2. 自分達の事業についての紹介
  3. 市場価値、ビジネスモデル
  4. チーム構成

1.自分たちの事業でしか解決できないとする問題

現状の問題点と現在のシステムや環境では、いかに問題があるかを述べて自身の事業の売り込みを行う。
これは、どこの国でも一緒ですね。
ただ、絶対に自分たちの事業でしか解決できないというのを数値的に強調しているのが印象的でした。
比較対象は、類似アプリ(ex:SNS系ならFBやinstagram)や社会情勢(ex:アフリカの経済事情)など、様々な角度から比較していました。
いかに今までの日常にはない当たり前を作るか?という点がキーワードのような気がします。

2.自分達の事業についての紹介

2分という限られた時間の中でいかに簡潔に1の問題を解決できるか?
どのような手法で解決していくのか?
という点に注力して、まとめられており、どのプレゼンも熱量がすごかった!
デモがある人は、口頭だけで行っていたり
プレゼンテーションのやり方も人それぞれでしたが、皆さん堂々と話していました。

堂々と話すという点について少し補足すると

  • 使っている英語が私のリスニング力でも理解できるほどのシンプルさでまとめられている
  • 接続詞や話題の変わり目(However,But,So,Because)を強調して、言葉に力を入れる

この2つが要素のような気がします。
個人的に強調については、ステージパフォーマンスのMCに通づるものを感じました。

3.市場価値、ビジネスモデル

予測される利用するユーザー数、単価、市場としてどのくらいの価値があるのか?
現状の価値と3年、5年、10年のスパンでどのようにスケールしていくのか?
という点について、こちらも数値で提示していました。
あと、ビジネスモデルについても必ず述べていたのですが、私自身が勉強不足で単語の意味が理解できませんでいた。
「ビジネスモデルは○○です」ぐらいの形で話されていました。

日本で見た時と違うと感じた部分は、

  • 市場規模が、国レベルで考えられている
  • 既にアクティブユーザーがある程度付いている

という点です。
ローカルにとどまらず、いかに広い市場で動いていけるか?が大事だと考えられます。
実際、この2つを満たしている人がコンテスト上位に挙がっていました。

日本でも同じことが言えると思いますが、現実味の違いなのか?自分が見た時がたまたまだったのか?
同じような熱量や魅力を感じることは出来ませんでした。
これについては、サンプル数が少ないので、深くは追求しないことにします。

4.チーム構成

スタートアップは事業以上にチームが大切という話はよく聞きますが
必ず自分のチームメンバーについても触れています。
時間は短いですが、こんなにFunkyなやつなんだぜ〜とか色々w
バックグラウンドもですが人柄について話している方が多かった印象。
その場でエンジニアやデザイナーを募集する方もいました。

生で見ての感想

せっかくなので隣の方と色々話してみたんですがPitchで成功するためには、
市場価値をいかに具体的に投資家に示せるか?
ということがポイントのようです。
また
Pitchじゃなくて自分で資金を作ってやった方がいい事業もある
ということも教えてもらいました(日本から来た学生と言ったら優し目に教えてくれたので助かった)。
Pitchはガソリンのように加速させることはできるけど、投資家のおもちゃにされる諸刃の剣のような部分もあるってことなのかな?
就活の時に受けていた社長さんとの面接やお話させていただいた時にも似ている話を聞いたのを思い出しました。

また、同世代や恐らく年下の人もプレゼンしていて、そこからの刺激が一番大きかったです。Draper Universityの学生も発表していました。
今自分のやっている事業を成功させるために振りきって日々を過ごしている。
自分に足りない部分はここというのをすごく感じました。
あとは勉強できるだけの英語力ですね...精進します!

プレゼンでは教授と学生の研究のマッチングを行うsignup.mykubby.com
が自分が学生ということもあり、聞いてて面白かったです
ただ、市場価値的な問題で、ウケてはいなかったかなぁ。

最後に優勝した方の事業

Cloud Based Two Factor Authentication | SAASPASS
自分のiPhoneApple Watchが近くにあるときに、アプリからMacのロックや様々なパスコードが外れるという内容です。
確かに自分がPC使うときには携帯近くにあるしなーとは思いつつ。
電話番号が必要らしく、こっちで試すことが出来ないので、試した方いらっしゃれば、感想教えてください笑
f:id:pokotyamu:20150816143944p:plain
具体的なアドバンテージの示し方の一例を出したところで、今回は終わりにしたいと思います。

外国リーグで活躍する日本人のお陰で友達が出来た話

サンフランシスコ留学1週間終わりました。
pokotyamuです。
1週間経ってみて色々な体験談をまとめていきます。

まずは、サンフランシスコの気候から
こっちの気候はほぼ毎日晴天で、日中も25〜6度
日本の10月ぐらいの天気が続いています。*1
なので、基本的に長袖か、ジャケットを着て生活しています。
思った以上に寒いです笑
f:id:pokotyamu:20150803084148j:plain


そんな私も語学学校で1週間経って、少なからず外国の友達も出来ました。
台湾や韓国などのアジア系も多いですが、ヨーロッパやスペインの方もいました。
無論、英語で会話することになるのですが、初対面の場合
"What's your name ?"
"Where are you from ?"
"How long do you stay here ?"

この3つから始まって、次に
"How old are you?"までがテンプレな印象ですね。

この後の会話をどうつなげるか?
というのが重要な気がしているのですが

トルコ人のイケメンさんと友達になった時に
"Do you like soccer ?"と聞かれ
"Yes, Do you know Keisuke Honda, Shinzi Kagawa ? "
といった形で海外リーグで活躍する日本人をあげると打ち解けやすかったです。
彼いわく、
"Keisuke Honda is the best Japanese player"だそうです笑

幸いにも、サンフランシスコ・ジャイアンツ青木宣親が大活躍中なので
こっちの人とのコミュニケーションの中では彼の名前をよく出してます。

日本にいる時は、単に外国人選手の活躍をスポーツニュースで見るだけですが、
コミュニケーションの1つのきっかけとして使わせてもらったので、
彼らの活躍のお陰で友達が出来たと言っても過言ではないかなぁと思っています。


まだまだスムーズに会話するまでには至っていませんが*2
どうにかこうにか頑張って生きています笑
このブログに勇気づけられつつ来週も頑張ります!maeharakazuhiro.com

*1:夏場は1ヶ月に1~2日しか雨が降らないそうです

*2:ホストマザーに正確な英語を使いなさいと矯正中

コンパイラつく〜ろ〜♪ 4番JavaCCの記述

しばらくぶりですが、やっと知識的に整理ができたので
更新したいと思います。

前回記事pokotyamu.hatenablog.com

2番目の記事で導入までは終わらせているので、
今回は実際に使っていく時の書き方に対してまとめていきます。pokotyamu.hatenablog.com

1.JavaCCとは?

Java用のパーサジェネレーター兼スキャナジェネレーターです。
「.jj」の拡張子ファイルに文法規則を記述することで
入力に対して、文法の解析を行い、それぞれに適した処理を与えることが出来ます。

記述ファイルの内容としては、

option{
     //JavaCCのオプション
}
PARSER_BEGIN(パーサクラス名)
package パッケージ名;
import ライブラリ名;
public class パーサクラス名{
  //任意のJavaコード
}
PARSER_END(パーサクラス名)
//スキャナの記述
//パーサの記述

となっています。
この時optionsのみ省略することが可能です。

2.記述例

まずは、optionsから。

options{
 STATIC = false;//全部のメソッドをstaticでない状態で生成する
    JDK_VERSION = “JDK1.7"
}

生成されるコードに対して、様々な条件を記述することが出来ます。

PARSER_BEGINからPARSER_ENDまでは、
普通のJavaコードのように書くことできるので今回は省略します。

次にスキャナ
JavaCCの<>で囲まれている部分は非終端記号で、次のように記述をしていきます。

SKIP :{
          " "
        | "\r"
        | "\t"
        | "\f"
        | "\n"
}
TOKEN :{
          <STRING: "String">
        |  <IDENTIFIERS: ["a"-"z","A"-"Z","_"](["a"-"z","A"-"Z","_","0"-"9"])*>
        }

SKIPでは、マッチした文字列に対して、スルーすることが出来ます。
TOKENでは、マッチした文字列対してトークンを形成して返します。<トークン名:パターン>
という形で書かれます。
優先度は記述した順に判定されるため、
Stringという文字列を読み込ませた時
TOKENの記述が先にSTRINGでヒットするため、STRINGでマッチするかどうか?という判定を行います。
パターンについては正規表現で書くことができ、

0回以上の繰り返し
("a"-"z")*

1回以上の繰り返し
("a"-"z")+

前者もしくは後者
  ("a"-"z")
| ("A"-"Z")


最後にパーサの記述

Token processName():{
    Token t;
}{
    t = <IDENTIFIERS>{return t;}
}

これをjavaccコマンドにかけると、

final public Token processName() throws ParseException {
    Token t;
    t = jj_consume_token(IDENTIFIERS);
    {  if ("" != null) return t;}
        throw new Error("Missing return statement in function");
}

というコードを生成します。

この2つのコードを比較すると、

返り値 メソッド名():{
     変数の宣言
}{
     JavaCCのコード
     {Javaのコード}
}

このように書くことが出来ることが分かります。
JavaCCのコードにおいて<>で書かれるものについては、TOKENで記述したものが対応します。
よって、返り値として、TOKENを返すことが出来ます。

以上が、主な文法記述のまとめです。
次回は、自分が経験したエラーについてまとめていきたいと思います。

コンパイラつく〜ろ〜♪ 3番BNF記法

前回記事pokotyamu.hatenablog.com

今回は
BNF記法」についてまとめていきます。

BNF記法とは

プログラミング言語の設計を行うために文法を定義するのに使うメタ言語の代表格
正式名称は「Backus-Naur From
HTMLやXMLの構文定義や通信プロトコルの定義にも利用されているとのこと。

1.形式言語

日本語や英語など、自然に発生していって必ずしも文法に従っていない言語のことを自然言語と言います。
これに対して、プログラム言語のように、厳格な文法によって定義される言語を形式言語といいます。
なので、今回のようにBNF記法で表せるということですね。

ここで、ノーム・チョムスキーが提案した形式文法のクラスを紹介します。
これらのクラスによって、複雑さを表しており、0型から3型に向かって制限が増えていきます。
f:id:pokotyamu:20150515004606p:plain

2.文法構文

ここでは、例題として数値を定義したいと思います。

<数値> ::= <数字列> | <符号><数字列> | <数字列>.<数字列>
<数字列> ::=  <数字> | <数字列> <数字>
<数字> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 
<符号> ::= + | - | ±

<数値>や<符号>のように< >で囲まれているものは「非終端記号」
0, 1, 2, +などの< >で囲まれていないものは「終端記号」といいます。
BNFは必ず、全ての非終端記号が、終端記号になるように設計する必要があります。

ここで::=や|の意味について説明します。

<A> ::= B AはBで構成されている。
<C><D> Cの後ろにDが続く。
E | F EまたはFで構成されている。

つまり、「3.14」は上の構文で表せますが、「3,-14」などは表せないことがわかると思います。

オレオレ言語のBNF記法作成の際に
Java言語のBNF記法を参考にさせてもらったので、そちらをそちらのURLを載せておきます。
Java BNF
実際のコードを頭に置きながら、このBNF記法を読んでいくと、
かなり理解しやすいと思います!

以上で、BNF記法の定義まで終わったので、次回からはいよいよ!
オレオレ言語のBNF記法で書いたものをJavaCCで実装していきたいと思います。

コンパイラ〜つく〜ろ〜♪2番 JavaCCの導入

前回記事pokotyamu.hatenablog.com

今回は
「トークンの作成」に関する内容として
JavaCCについて、導入をしつつまとめていきます。

JavaCCとは

Javaベースのコンパイラコンパイラのこと。
コンパイラコンパイラとは、構文解析ルーチン字句解析ルーチンを作成するツールのこと。
つまり、コンパイラを作るために使うツールですね。

これらのルーチンを作成するツールとして有名なのが
yacc」や「lex」ですが、こちらを採用しなかったのは
生成するコードがJavaコードなので、C言語を混ぜずに進めるためという理由です。
拡張性とか考えたらyaccを使うほうがいいのかな?
その部分は自分の理解が足りていません。

今回から追加された、参考書籍はこちら

JavaCC―コンパイラ・コンパイラfor Java

JavaCC―コンパイラ・コンパイラfor Java

1.Macへの導入手順

導入に際して、こちらを参考にさせていただきました。qiita.com

JavaCCを管理しているサイトから直接ダウンロード可能です。
JavaCC Home

ダウンロード・展開が終了したら、以下コマンドを実行していきます。

$ cd Downloads/javacc-6.0
$ cp bin/lib/javacc.jar /usr/local/javacc/lib
$ sudo mkdir /usr/local/javacc/bin
$ sudo touch /usr/local/javacc/bin/javacc
$ sudo chmod u+x /usr/local/javacc/bin/javacc
$ ln -s /usr/local/javacc/bin/javacc /usr/local/bin/javacc

シェルにパスを追加
.zshrc

export PATH="/usr/local/javacc/bin/javacc” #追加

最後にスクリプトファイルの中身を追加して終了です。
/usr/local/bin/javacc

cmd_path="$(readlink -n $0)"
javacc_root="$(dirname "$(dirname "$cmd_path")")"

CLASSPATH="$javacc_root/lib/javacc.jar"
export CLASSPATH

java javacc "$@"

2.開発環境の構築のために

私のJava関係の開発環境は、主にNetbeansもしくは、Emacsを使っているので
それぞれの開発環境を整えていきます。
まずは、NetBeansJavaCCプラグインplugins.netbeans.org

そして、Emacsjavacc-modeを入れたGitHubのコミットを載せておきます。github.com

以上で、JavaCCの開発環境が整いましたが、
次回はJavaCCでコードを書かずに、
今回読み込ませるコードをBNF記法で定義していく作業を行っていきたいと思います。

コンパイラ〜つく〜ろ〜♪1番全体の構成

オレオレ言語のコンパイラ作ることになったので、
せっかくなら勉強しながら学んでいくスタイル

これをKindleで買って、読み進めながらやっていきます。

今日のテーマはコンパイラの全体構成の話。
これから勉強を進めていく毎に、これらの詳細化が出来ればと思っています。

コンパイラの構成

コンパイラの全体構成図は次のようになっています。
f:id:pokotyamu:20150512003546p:plain:w300
それぞれについて少しだけ説明すると、

1.字句解析

ソースコードを最小の構成単位(トークン)に分割する。
字句の例としては
 キーワード:int for while
 識別子:変数名、関数名
 定数:100等
 文字列リテラル:”abcd"
 演算子:+ - / < =
 区切り子:[ ] { } ( )

2.構文解析

トークンの順序の正しさを判定するため構文木を作成する。

i = a + b * c;

というコードに対して構文木を書くと以下のようになる
f:id:pokotyamu:20150512003216p:plain:w300
これによって、ある程度の型のチェックすることで最適化を行う。

3.中間コード

構文木をソースプログラムの中間言語表現に変換する。
代表的な変換としては
上の式を

 T1 = b * c;
 i = a + T1;

とすることで、2項演算子のみにする等がある。
これについては理解が追いついていないので後日。

4.最適化

実行速度の面から改善するために、無駄な要素を見つけ出し、対処する。
・同じ変数値を何度も読み込んでいる
 →レジスタに1回読み込んで維持しておく
・ループ内で結果が一定である式が存在する
 →ループ外に出す処理をする
ここについても、もう少し進めていって勉強。

5.コード生成

中間コードは内部表現なので、中間コードが終わりではなく、
そこから目的のプログラムコードを作成する。
コードの生成結果は通常ファイルである。
目的のプログラムがアセンブラ言語ファイルである場合は、
それをさらに機械語に変換することで実行可能ファイルが生成される。

次回は、実際にトークンの作成のコードを作ってみようと思います。

就活終わった私の逆求人という就活スタイル

関東での就職決まりました!!

というわけで、今回は、
就活に使ったイベント逆求人について紹介していこうかと!
今後使う人、使おうか迷っている人、存在知らなかった人の役に立てば幸いです(o_ _)o

サポーターズなどなど色々あるそうですが
私は、GSTYLUSの逆求人フェスティバルのみに参加しました(累計3回)www.studenthunting.com

以下は全てIT逆求人に限った話です。他の総合職等は知らない(´ω`)

自分が参加した逆求人

2014年05月:インターンシップ
2014年10月:内定向け
2015年01月:内定向け(プレミア)
全て東京開催(今年は関西開催もあるらしい)

1.逆求人とは?

普通の企業セミナーの企業が持っているブースを
学生が持って、30分間で企業側と1対1で話す就活イベント
企業によって時間配分は違うが主な流れとしては

  1. 自分の自己紹介(プレゼン)
  2. 自己紹介に対するフィードバック←ここ重要
  3. 企業の紹介

これを朝から晩まで8ターム繰り返す形でした。*1*2
内定直結という形ではなく、
人事面接パスであったり、ESが免除になったりします。
面接の時に使われるのも履歴書じゃなくて
逆求人の時に書いたプロフィールが使ってたり(´ω`)
コネクションを作るというのが目的な感じですね。

2.逆求人のメリット

B2B,B2Cどちらの企業も参加している

業界は絞ってるけど、色々見たい人にはおすすめ
B2Bならこんなことしたい
・B2Cならこんなことしたい
ということをまとめているとよい。

自分のポートフォリオを評価してもらえる

履歴書や人事面接以上に話すことができるので
自分の人物像を知ってもらいやすい
私もホークスの話題で盛り上がる時があった。

特に決まった志望動機を持たなくていい

普通の面接では、志望動機を聞かれることがあるが
逆になぜ自分に興味を持ってくれたのか?等を聞くことが出来る。
それによって、今後の就活に役立てることも聞けたりする。

マッチしない企業のフィードバックが聞ける

通称お祈りメールでは、なんで落とされたかが分からない等の問題はありますが
このイベントでは、「もっとこうすると良い」や「ここはもっと固めよう」等の
アドバイスを直接貰うことが出来るため次に繋げやすい。
また、イベント終了後に通知表のようなものも送られるので、客観評価も出来る。

メンターの手厚いサポート

就活生につき1人のメンターが付くので
基本的にそこに相談しとけば放置されることはない。
なお、逆求人の相談だけでなく、面接の相談や内定承諾の相談も出来る
面談はSkypeオッケー(雑談オッケー)

リクルートスーツ着なくていい

自分らしい格好で行ける
スーツでもいいけど、企業側も着てない人が多い印象
わざわざこのためにスーツを用意する!的な感じはしなくていい。

交通費出る(遠方のみ一部支給)

値段は言えないけど、お金もらいながら就活出来るのはありがたい。
ただし、全額支給ではないので、あまり当てにし過ぎると高くつく。

3.逆求人のデメリット(向いてない人)

ポートフォリオがないと話すことがない

ギークな人、面白い研究をしてる人のブースと
それらを上手く伝えきれていない人のブースはやっぱ埋まり方が違うと感じた。

自分の就活の軸が決まってないといろんな企業がいるのでブレる

そらそうよね。
企業が色々入る分、自分の軸が無いと目移りしてしまう可能性が大いにある。
私自身、これがブレていた時はあまり良い結果が出なかった。

複数回出ると、来る企業の中で何回か見たことがあるとこもある

その時に話せる人が人事だったり、エンジニアだったりするので
企業の幅が広がらないという意味でデメリットかどうかは本人次第。

大手しか考えていない人

自分が行った時はベンチャーが多かったので
絶対大手!という人には向かないのかなと思う。
けど、決めるにしても一回見ておくという経験も悪くはないかと。
何社かは大きなところも来ていたし、プレミアの時はそれ以上に来ていた
印象もあるので、一回メンターさんと相談してみるてもいいと思う。

4.これから逆求人をやる人向け

良くも悪くも30分しか話せない

後日に企業訪問のアポまで取れる方がいい(特に地方学生
私は、1週間程度泊まって、会社訪問してました。
就活にはお金がかかるもの。しかし、会社訪問や面接を前々から組んでいれば
交通費が出る企業もあるので、そこは交渉しだいな気もする。

プレゼン資料はしっかりと作りこむ

プレゼンとそこからの話の持って行き方で80%ぐらいの印象は決まるので
どんな戦略で自分をアピールするかを考えるといい。

成果物のデモ

実際に動いているものでやると説明力が増すので、話しやすいと思う。
逆求人に向けてアプリを作るというのもあってもいいかと。

5.終わりに

私自身、面接に進む企業や就職先を決めるときに
「誰と働いてみたいか?」ということを意識しました。
就職すればそこには人が絡んでくるわけで、どうせ働くなら楽しく働きたいですよね。
17卒のインターン用の逆求人が5月に関西、関東どちらも開催予定なので
人と話しながら企業のことを知れるこのイベントに少しでも興味が出たならエントリーしてみるのもいいかと思います。

〜以上〜

*1:エクストラある人もいた

*2:自分の時には8タームだったけど、他の時には違う可能性もある?詳しくはメンターへ