Hatena::ブログ(Diary)

UT Startup Gym

2013-01-21

韓国のスタートアップ界隈がアツかった

こんにちは、川上です。
今回、ソウルで行われた Global Career Vision に日本の学生起業団体の代表として招待され、韓国に行きました。

会場では "Global Startup" をテーマに多くの起業、団体がブースを出し、情報交換/ネットワーキングが行われ、UT Startup Gym も活動の報告を行いました。

"起業といえばシリコンバレー"というのが現状ですが、起業環境の充実という意味では韓国も負けてはいません。
政府大企業起業家たちが一体となって、シリコンバレーの次を狙っています。
たった2日間の滞在でしたが、イベントで感じた韓国の勢いを忘れないうちにレポートしておきます。

f:id:utgym:20130111095123j:image
会場の風景

f:id:utgym:20130111144737j:image
UT Startup Gym プレゼンの様子

すごいことその1 国を挙げたビジネス支援

シリコンバレーが発展した背景にはスタンフォード大学と卒業生の寄付金がある」
というのは良く聞く話ですが、韓国の場合は政府が後ろ盾になってくるように思います。
韓国での出来事、韓国で知ったことを少し振り返って、どのようにビジネスと政府が結びついているのか報告します。

大統領の登場と国を挙げた官民協力体制の構築

今回のイベントで、韓国の次期大統領パク・クネさんに会うことが出来ました。
まさか日本の総理大臣より先に韓国大統領に会うことになるとは思わなかったので、とても驚きました。

f:id:utgym:20130121001635j:image
( 写真撮影禁止だったので、下記の記事から引用 )

大統領がどのようなことを言っていたか、このイベントを取材したKBSドイツ版の記事をご紹介します。

Die neue Regierung wolle aktiv Gelegenheiten für junge Menschen schaffen, indem sie die Beschäftigung und  Firmengründung im Ausland erweitern und gute Arbeitsplätze entstehen lasse. Sie werde junge Menschen unterstützen, damit sie in der Welt ihre Talente entfalten könnten.
韓国新政府は海外での雇用や会社事業の拡大、それから良質な職を提供することによって若者のチャンスを積極的に創出しようとしており、若者たちが世界で才能を発揮することができるようにサポートします。

Hierfür wolle sie einen Kooperationsmechanismus zwischen dem privaten und öffentlichen Sektor schaffen. In enger Kooperation mit der Koreanischen Gesellschaft für Handelsförderung (KOTRA) und der Koreanischen Organisation für internationale Zusammenarbeit (KOICA) werde eine Datenbank für Arbeitsangebote in Übersee erstellt und eine neue Struktur zur Unterstützung der Jobsuche und Firmengründung im Ausland geschaffen. Sie wolle zudem jungen Wagnisunternehmern helfen, Überseemärkte zu erschließen, hieß es weiter.
そのために、官民の協力体制を構築しようと考えています。大韓貿易公社(KOTRA)と韓国国際協力団(KOICA)と密に協力して、海外雇用データベース、それから海外での仕事獲得や会社設立をサポートする新しい構造を構築していきます。そして、海外市場開拓のために若い起業家たちのベンチャーを支援して行きたいと考えています。
(記事/写真の出典 )

このように、大統領は、官民の協力関係の構築と、若者支援の推進を重視しており、
ジョブデータベースの構築や起業支援などの具体的な施策も着々と進んでいます。
大統領を筆頭にビジネス環境を変えて行こう、という力強さを感じました。

*記事は韓国メディアKBSドイツ語で書いたものです。

学生団体への政府の支援がスゴい

大統領の演説にもあった若者の起業支援ですが、具体的にどのような支援が行われているのでしょうか。
今回一緒に行動していた韓国の学生起業団体 (Student Startup Network) は政府と強い関係にあるようで、
イベントの開催、参加、海外の関係者とのネットワーキングのための予算を政府から直接受けているそうです。
学生団体の規模が韓国全土に学生 2000 人と非常に大きいため、それくらいの支援を得るに値するのですが、イベントの開催支援や政府が主催するイベントへの招待、シリコンバレーなどへの海外研修など、手厚い支援があるようで、うらやましく思いました。

すごいとこその2:ネットワークを大切にする

日本では大企業ベンチャー起業が同じイベントに参加し、人脈を広げて行くような機会はなかなかないですし、ましてやベンチャー起業政府機関とネットワークを持つ機会というのはほとんどないかもしれません。
一方、韓国では官民一体となったビジネスネットワークが完成されようとしています。
今回のイベントでも商社のような大企業に大手ITベンチャースタートアップ関係者があつまり、お互いの経験をシェアしていました。
分野をまたいで互いの経験が瞬く間に共有される環境が整備されていて充実しているなぁ。と感じました。
f:id:utgym:20130111195206j:image
韓国, イスラエル, 日本の学生代表

まとめ

韓国だけではなく他の参加国でも、シリコンバレーの次、新たな起業天国を狙った動きが出ているようでした。
どこが成功するかは分かりませんが、いずれも虎視眈々とチャンスを狙っています。

気づいたら日本が負けていた、ということがないよう、他国のマクロな動きに目を光らせることも大切かもしれません。
UT Startup Gym も日本のスタートアップを促進できるよう、より発展させていきたいものです。

以上、UT Startup Gym 韓国レポートでした。

2012-12-12

たった10行のコードでひたすらアイドル水着画像をあつめる

こんにちは、飯塚です。
ウェブ上にはたくさんのデータがあふれています。その中から「自分の欲しいデータだけ」を「自動」でかき集めることができたら素敵じゃないですか? そこで今回は UT Startup Gym「ウェブから情報をあつめる」で取り上げた内容をもとに、たった10行(正確には 9 行)のコードでひたすら「アイドル水着画像」を集める方法を紹介します。言語は PHP です!

まずは結果から

f:id:utgym:20121211220000p:image:w640
はい、これが今日の目標です。

さっそくコード書く

mac ユーザはさっそくプリインストールされているターミナル.app を起動して、

$ emacs crawler.php

と入力して Enter(もちろん他のエディタでも OK)。頑張って下のコード(青色のコメント部分は写さなくていいです)を写経してください。

<?php
$url = "http://matome.naver.jp/odai/2135350364969742801"; // 画像を収集したい NAVER まとめページの URL
$res = file_get_contents($url); // URL からソースコード(文字列)を取得する
$dom = @DOMDocument::loadHTML($res); // 文字列から HTML を生成
$xml = simplexml_import_dom($dom); // さらにそこから SimpleXMLNode オブジェクトを取得
$imgs = $xml->xpath("//img[@class='MTMItemThumb']"); // XPath を用いて class="MTMItemThumb" の img 要素のみ取得
foreach ($imgs as $img) { // すべての画像について ...
    echo "<img src='".$img["src"]."'>\n"; // URL から img タグを出力
}

Windows ユーザは、各自 PHP を実行できる環境を整えてください。以前のエントリを参考に Ubuntu 入れちゃうのもアリです。
写経できたら、Ctrl+X を押して、Ctrl+S を押す(保存)。Ctrl+X を押して、Ctrl+C を押す(終了)。

画像の一覧を取得する

emacs が終了してシェル画面に戻ってきますので、次のコマンドを入力します。

$ php crawler.php

すると、画像の URL っぽいもの(正確に言うと img タグ)がたくさん表示されます!
f:id:utgym:20121211232927p:image:w640
これが実は、
http://matome.naver.jp/odai/2135350364969742801
に収められている画像の一覧なのです。

ブラウザに表示する

それでは、この画像群をブラウザで表示させます。もう一度ターミナルで、次のコマンドを入力します。

$ php crawler.php > photos.html
$ open photos.html

すると、既定設定のブラウザが起動して、画像の一覧が表示されます。
f:id:utgym:20121211232808p:image:w640
おおおおー!

もちろん、URL を変えればこんなかわいい猫画像も!
f:id:utgym:20121211215947p:image:w640

みんな大好きワンピースも!
f:id:utgym:20121211215939p:image:w640

こんなかんじで色々な画像が集められます。

リンクをたどって、すべてのページから画像を収集する

先ほどのコードでは、1ページ目の画像しか収集することができなかったので、今回は2ページ目以降も収集してみたいと思います。

<?php
$url = "http://matome.naver.jp/odai/2135350364969742801"; // NAVER まとめページ URL
$res = @file_get_contents($url);

while ($res) {
    $data = getData($res);
    foreach ($data["image"] as $image) {
        echo "<img src='".$image["src"]."'>\n";
    }
    if ($data["nextPage"]) { // 次のページがあるか?
        $res = @file_get_contents($url."?page=".$data["nextPage"]);  // URL の末尾に ?page= をつけると、ページを指定することができる。
        sleep(1); // サーバへの負荷を減らすため 1 秒間遅延処理
    } else {
        break; // 次のページがなければ終了
    }
}

function getData ($html) {
    $dom = @DOMDocument::loadHTML($html);
    $xml = simplexml_import_dom($dom);
    $result["image"] = $xml->xpath("//img[@class='MTMItemThumb']");
    $pager = $xml->xpath("//div[@class='MdPagination03']"); // ページ送り部分を取得
    $current_page = $pager[0]->strong; // 太字のページ番号の値
    $last_anchor = $pager[0]->a[count($pager[0]->a)-1]; // 太字でないページ番号の末尾の値
    if ($last_anchor + 1 != $current_page) { // 太字のページ番号が最後のページを指していなければ...
        $result["nextPage"] = $current_page + 1; // 次のページを設定する。
    } else {
        $result["nextPage"] = null; // 次のページは無い
    }
    return $result;
}

同じようにブラウザで表示すると・・・!
f:id:utgym:20121211232759p:image:w640
大漁!!

ポイント

  • URL の末尾に ?page= をつけると、ページを指定することができる。
  • 実在するページ数より大きい値を指定した場合でも 404 エラー (Not Found) とならず、最終ページを表示する。
  • そのため、?page= の指定を「404 エラーになるまでインクリメントする」戦略は使えない。
  • したがって、ページ送りで、太字で強調されているページ番号が、太字じゃないページ番号の末尾の次ならば、最終ページと判断する。

まとめ

というわけで、今回は NAVER まとめアイドル水着画像を題材に、データを収集する方法を紹介しました。
もちろんこの技術を応用すれば、ウェブサイトの構築や研究にも役立てることができます。もっと詳しく勉強したい人は、ぜひ XPath、クローリング、スクレイピングなどのキーワードでググってみてください。さらに詳しく知りたい人のために、講義資料はSlideShareでも公開しています。本格的にウェブサービスの構築について学びたい方は UT Startup Gym でお待ちしております。
それではまた!

ちなみに

2011-12-18

Twitter API と file_get_contents でかんたん Twitter クライアント

こんにちは、飯塚です。
今回は第2回初心者勉強会で少し取り上げた、twitter API を使った情報の取得方法について説明します。
勉強会の最後に、下記のようなコードを取り上げました。

<?php
$arr = json_decode(file_get_contents("https://api.twitter.com/1/statuses/user_timeline.json?include_rts=true&screen_name=tushuhei"));
foreach ($arr as $element) {
    var_dump($element->text);
}

このコードで、@ のつぶやき最新20件を取得して、つぶやきの内容だけを取得することができます。
取得するものを public_timeline (世界中の人の最新のつぶやき)に変えたり、
if 文を加えて特定の文字列が含まれるつぶやきだけを抜き出したり、
つぶやきだけでなくその日付や場所に注目したりするだけで、一気にバリエーションが拡がります。

Twitter API の一覧はここです。

APIURL ってどうやってみるの?

URL を以下のように分解して考えるとわかりやすいです。

https://api.twitter.com/1/ <- 何のAPI?
statuses/user_timeline       <- Twitter API の statuses/user_timeline を使う
json                                    <- json 形式で取得
?                                         <- ここからパラメータを追記します
include_rts=true                 <- RT を含む
&                                        <- さらにパラメータを記す
screen_name=tushuhei       <- @tushuhei のタイムライン

と考えるわけです。
この URL で取得した json 形式のデータを json_decode で PHP で扱える形に直して扱います。

パラメータの詳細はその API の仕様ページに書いてあります。
f:id:utgym:20111218213825p:image:w640

これをブラウザに出力するには

とっても簡単で、このファイルを DocumentRoot に置けば、ブラウザから見ることができます。
f:id:utgym:20111218214112p:image:w640

※ DocumentRoot がどこか分からない![mac 向け]
そのときは、Apache の設定ファイルを見ます。

sudo vim /etc/apache2/httpd.conf 

とした後、DocumentRoot で検索をかけて、どこに DocumentRoot が設定されているか確認しましょう。
設定を変更したら、必ず

sudo apachectl configtest

で Syntax OK (文法チェックOK)を確認した後、

sudo apachectl restart

apache再起動して変更を反映させましょう。
(「システム環境設定」から「Web共有」を一度オフにして再度オンにすることでも同様の操作ができます。)

年末年始にちょっとしたアプリを作ってみては如何でしょうか?
よいお年を!(^_^)/

追記(2012年1月11日)

ただ var_dump で出力するだけじゃ汚くてやだ!という方のために。
このように書けば、HTML で出力結果を自在に表現できます。
あとは style 属性や CSS を駆使してデザインを仕上げましょう!


<?php
$arr = json_decode(file_get_contents("https://api.twitter.com/1/statuses/user_timeline.json?include_rts=true&screen_name=tushuhei"));
?>
<html>
    <head>
        <title>かんたん Twitter</title>
        <meta charset="utf-8">
    </head>
    <body>
        <? foreach ($arr as $element){ ?>
        <? echo $element->text ?>
        <br>
        <? } ?>
    </body>
</html>

2011-12-03

UT Startup Gym 発サービス、お花サプライズ!ついにリリース。

いよいよ,UT StartUp Gymから生まれたサービス「お花サプライズ」がリリースです!f:id:utgym:20111201113220p:image:w640

「お花サプライズ」って?

facebook 上の友だち同士で花束をつくり、誕生日を迎える友だちに贈り届けるソーシャルギフトサービスです。
どなたでも,facebookアカウントさえあればご利用可能なので,まずはこちらからどうぞ!

f:id:utgym:20111201113219p:image

お花サプライズ!の開発&アドバイザーで、UT Startup Gym でも毎回講師をしていただいている amachang さんにも熱く語ってもらいました。
ソーシャルギフトサービス「お花サプライズ!」をリリースしました! -IT戦記
この中にもあるように、簡単なものでもいいから動くものを作ったことが、花屋さんや決済代行会社との交渉の上で大きかったです。
Google の徳生健太郎氏も仰っていますが、まさに「百聞は一デモに如かず」です!

勉強会発のサービス

お花サプライズ!はUT Startup Gym 第1期生によって作られたサービスです。
開発メンバーのほとんどは、勉強会が始まった 4 月の時点ではウェブサービスはおろかプログラミング自体が素人同然でした。
この勉強会で少しずつではありますが,着実にスキルアップを重ね、ようやくリリースにこぎつけることが出来ました。
f:id:utgym:20111202222725j:image:w640

UT Startup Gym で得るものはウェブサービスを開発するプログラミング能力だけでがありません。
実際にビジネスとして成り立つものにするために、パートナーと交渉する行動力や、人にサービスのことを伝えるプレゼンテーション能力などもプロジェクトを通して育んできました。
開発だけはなく、企画からプレゼンまで一貫してできる人材になる。そうして自分でビジネスのサイクルを回すことができる人になる。これが UT Startup Gym が目指すところです。
f:id:utgym:20111203012826p:image:w640

第二期へ向けて

ようやく第一期のプロジェクトは一応すべてリリースが完了しました。

国会.in http://kokkai.in
お花サプライズ!https://hanasup.jp

次は第二期のみなさんの番です!
第二期は、規模を大きく拡大したこのUT StartUp Gymの今後を占う非常に大事なタームです。
是非成功させましょう!

2011-11-16

macでubuntu環境をつくる


この章では、mac ユーザのみなさんに向けて、ウェブサービス開発の環境を整える第1歩を説明します。

OS ってなに?

macwindows などはみなさん聞いたことがあると思いますが、それが OS と呼ばれるものです。
パソコンとみなさんの間を取り持っていものだと考えてい良いでしょう。
そして、この UT Startup Gym では、Linux という OS を用いてウェブサービス開発を行っていきます。

「なぜいつも使ってる mac を使えないの?」
「なんでわざわざ新しい OS を使うの?」

など様々な疑問が起こると思いますが、ウェブサービスにおいて Linux は非常に一般的に使われている OS なのです。

macLinux を入れる??


「ということは、新しい Linux が入ったパソコンを買う必要があるの?」

と思われるかもしれませんが、その必要はありません。VirtualBox というソフトを使えば、mac の上で Linux を立ちあげ、ウェブサービス開発に取り組むことができるのです!

環境設定をはじめよう

VirtualBoxインストールする。

https://www.virtualbox.org/wiki/Downloads
にアクセスし、VirtualBox for OS X hosts をクリック、ダウンロードします。
f:id:utgym:20111110024426p:image:w640
ダウンロードされた .dmg ファイルをダブルクリックし、
インストーラダブルクリックしてインストールします。
f:id:utgym:20111110024427p:image:w640
インストーラが終了すれば、インストールは完了です。

Linux Ubuntuインストールしよう。

mac 上で別の OS を動かす準備が整ったので、次はその OS 自身、Linux仮想マシンインストールします。
mac にも OSX というバージョンがあるように、Linux にも様々なディストリビューションというものがあります。
今回は Ubuntuウブンツウブントゥ)というディストリビューションを用います。

Ubuntuダウンロード

まず、Ubuntu の CD イメージをダウンロードします。
Ubuntu Desktop 日本語 Remix CDのダウンロード
の(CDイメージ)と書かれたファイルをダウンロードしてください。(複数ありますが、どれでも大丈夫です。)

仮想マシンを作成

次にインストールした VirtualBox を起動し、新規仮想マシンを作成します。
f:id:utgym:20111116213812p:image:w640

その後、仮想マシンに適当な名前(「Ubuntu1」など)を設定し、オペレーティングシステムLinux、バージョン:Ubuntu と設定します。
f:id:utgym:20111116213813p:image:w640

メインメモリの大きさを指定します。1024 MB ぐらいが適当です。
f:id:utgym:20111116214628p:image:w640

以下スクリーンショットのように進めます。
f:id:utgym:20111116214852p:image:w640
f:id:utgym:20111116215341p:image:w640
f:id:utgym:20111116215343p:image:w640
f:id:utgym:20111123113940p:image:w640
f:id:utgym:20111123114017p:image:w640
仮想マシンを起動すると、初回起動ウィザードが立ちあがります。
f:id:utgym:20111116215344p:image:w640
以上で仮想マシンの作成は完了です。

参考

http://inforati.jp/apple/mac-tips-techniques/windows-hints/how-to-install-linux-ubuntu-to-mac-virtualbox.html
こちらに詳しいインストール方法が載っているので、こちらも参考にしてください。

Ubuntuインストールできたら

f:id:utgym:20111119092327p:image:w640
アプリケーション→アクセサリ→端末
と開いて、
http://d.hatena.ne.jp/utgym/20111112/1321110738
に移りましょう。はじめは「黒い画面こわい」となるかもしれませんが、あともう少しです!頑張ってください!

もし分からないところがあれば

facebook UT Startup Gym の ウォールで随時質問を受け付けています!そちらに遠慮無くコメントを残してください。
(飯塚)