Shogo's Blog

Jan 22, 2013 - 2 minute read - Comments -

じょりぼっとが起動して一年がたちました

じょりぼっとが初めてつぶやいてから 今日でちょうど一年となりました. 突然の凍結,74回にも及ぶバルスなどなどを乗り越え, 今日まで生き延びられたことを嬉しく思います. ちなみに一番最初のツイートはこんなのでした. 自分の教科にしましたというわけで終わりー。どっちも一部の断面図 — 狼とボット (@JO_RI_bot) 2012年1月22日 学食メニュー じょりぼっとが一周年を迎えるということは, 起動当初から続けてきた学食メニュー表示機能も一周年ということです. 一年分のメニューはこちらにストックしてあります. どんなメニューが出されることが多いのか,簡単な統計を取って見ました. 1食昼食A定 回鍋肉 13 鶏肉と味噌漬け焼き 9 チキン唐揚げ 8 豚肉キムチ炒め 7 ちきんカツ 7 チキン唐揚げ<スパイシーカレー> 7 豚肉朝鮮焼き 7 焼肉とピーマン肉詰めフライ 7 チキンソテーさわやかソース 7 チキンマスタード焼き 7 鶏肉キムチ焼き 7 チキンピザソース焼 7 1食夕食A定 チキンピザソース焼 13 酢豚 11 豚カツ 9 チキンソテーさわやかソース 9 グリルドチキンイタリア風 9 鶏肉と味噌漬け焼き 8 エッグ焼肉 8 Bigメンチ 8 焼肉と春巻き 8 チキンステーキタルタルソース 8 1食昼食B定 筑前煮 16 いりどり 13 八宝菜 12 白身魚フライの卵とじ 11 白身魚のピリピリ漬け 10 鯖の生姜焼き 9 白身魚フライチーズ焼き 9 うずら卵と野菜の五目煮 8 鶏肉の酢豚風 8 シューマイの中華風旨煮 8 チキンブラウンソース煮 8 サーモンシチュー 8 アジフライとツナサラダ 8 白身魚の磯辺揚げ 8 1食夕食B定 すき焼き風旨煮 19 うずら卵と野菜の五目煮 13 スペイン風オムレツとコロッケ 13 ピザ卵とコロッケ 12 鶏肉と野菜の七味炒め 12 鮭の野菜あんかけ 11 鶏肉とヤングコーンの豆板醤炒め 10 アジフライとツナサラダ 9 チキンブラウンソース煮 9 白身魚のピリピリ漬け 9 1食昼食セット オムライス 16 五目あんかけ焼きそば 13 鮭チャーハン 12 ねぎトロ丼 12 鶏肉ときのこのチャーハン 11 トルコライス 11 三色丼 9 鶏の照り焼き丼 9 ビビンバ丼 9 親子丼 9 麻婆丼 9 1食夕食セット キーマカレー 13 ビビンバ丼 10 肉たれうどんとぶっ玉丼 10 海の幸うどん 9 すき焼き丼 8 肉うどんとカレーライス 8 ねぎトロ丼 8 イタリア風チキンカツ丼 8 鶏の照り焼き丼 6 とろろそばとミニカツ丼 6 鮭茶漬け 6 1食昼食単品 鶏肉とブロッコリー炒め 16 さつま汁 15 揚ギョーザ 13 のっぺ 13 イカ野菜カツ 13 揚げ豆腐の旨煮 13 かぼちゃのそぼろあんかけ 12 ハムチーズサンドフライ 12 エビ風味グラタンコロッケ 12 鶏肉とタケノコの旨煮 12 ブロッコリーとカリフラワーの炒め 12 茄子の中華風旨煮 12 豚肉と野菜の煮込み 12 卵と玉ねぎのソテー 12 1食夕食単品 鶏肉とチーズ焼き 17 レバニラ炒め 15 豆腐きのこあんかけ 13 ゆで卵 13 ちくわの二色揚げ 12 鶏肉と里芋の煮物 11 蒸シューマイ 11 けんちん汁 11 五目金平 11 五目肉じゃが 10 シューマイのカレー揚げ 10 ブロッコリーとカリフラワーの炒め 10 2食お昼ごはん定食 ピーマン肉詰めフライ 13 ちきんチーズ焼き 13 ハッシュドビーフ 12 鶏肉のピリカラ味噌焼き 10 カレーコロッケ 8 春巻き 7 野菜コロッケ 7 鰹の刺し丼 7 ちきんカツ 7 豚玉丼 7 レッドホットチキン 7 きじ焼き丼 7 ちきん南蛮漬け 7 ハンバーグ 7 海老グラタンコロッケ 7 2食晩御飯定食 545円定食 34 545円丼 16 フライアンドフライ 13 ちきん南蛮 11 新潟タレカツどん 11 中華角煮丼 10 ねぎトロ丼 9 スパイシードライカレー 9 レッドほっとマヨ 9 545丼 8 2食に関しては,集計か3月からなのでまだ一年たっていません. それにしても圧倒的な545円定食の出現頻度. 結局何が食べられるのか全くわからないのですが・・・.

Dec 28, 2012 - 1 minute read - Comments - UDP SSH

UDPのパケットをSSHを通してトンネルする

SSHには標準でTCPのトンネリング機能は付いているのですが, UDPはトンネリングしてくれません. なんとかできないものかと試行錯誤してみました. TCP をトンネル TCPのトンネリングの復習から. 以下のコマンドでクライアントの8080番ポートを,リモートの80番ポートに転送することができます. ssh -L 8080:localhost:80 remote SOCKS proxyとして動作させることも出来ます. ブラウザのプロキシとして設定すれば,リモートのサーバがすべての通信を中継してくれます. ssh -D 8080 remote UDP をトンネル NetCatを使うと TCP/UDP の通信内容と標準入出力をつなげることが出来るらしいです. これを使って,クライアント側で UDP サーバを立て,その通信内容をSSH経由でリモートの UDP クライアントに送ってあげます. 最後にリモートからクライアント側へのパケットを名前付きパイプで転送してあげればトンネル完成です. mkfifo tunnel nc -ul 8080 < tunnel | ssh remote nc -u localhost 8080 > tunnel Mosh をトンネル なんでこんなことをしようと思ったかというと,Moshをファイヤーウォール越しに使いたかったから. MoshはUDPで通信しているので,SSHしか通らない環境では使えません. そこでUDPをSSHでトンネリングしてできないかとやって見ました. セッションの確立にSSHも使っているので,以下のようにして Mosh用のUDPトンネルと SSH用のTCPトンネルを作ります. mkfifo tunnel nc -ul 60000 < tunnel | ssh -L 10000:localhost:22 remote nc -u localhost 60000 > tunnel & mosh -p 60000 --ssh="ssh -p 10000" localhost 外部からのSSH通信が遅かったので,Moshのローカルエコーでなんとかならないかと挑戦してみました. 実際の効果は未確認.またあとで試してみます.

Dec 24, 2012 - 1 minute read - Comments - JavaScript WebAudio

JavaScript版WaveZutaZuta作ってみた

「WaveZutaZutaというおもちゃを書いている話」 という記事を見ていたら,誰かがツイッターで 「いっちーがJavaScriptに移植してくれる」と発言. あ,はい.やってみましょう. どんな感じのものなの? 音声ファイルをテキトーに切り貼りできるライブラリです. WaveZutaZutaJSにブラウザで実行出来るサンプルを置いたので 実際試してみるのが一番わかりやすいと思います. 適当な音声ファイルをドラッグ&ドロップして,playボタンを押すと音が流れるので,いろいろ遊んでみてください. テキストボックスには楽譜が書かれています. 楽譜の書き方は「WaveZutaZutaというおもちゃを書いている話」 と同じです. ちなみに、楽譜ファイルの読み方、書き方ですが、aからzまでの文字それぞれにずたずたにされたwaveファイルの"破片"がアサインされていて、-は音をのばす(タイ)を意味し、0は休符を意味します。*を指定すると、a-zのうちどれかをランダムで鳴らします。1文字が64分音符ひとつ分の長さです。空白文字は無視されます。 使い方 リポジトリの WaveZutaZutaJS.js がライブラリの本体です. 次のように使います. var data = new ArrayBuffer(); // ずたずたにしたい音声データを入れておく var context = new AudioContext(); var zuta = new WaveZutaZuta(context); zuta.onSuccess = function(self, source) { // 元の音声の先頭5秒から3秒間流す zuta.setNote('a', 5); var node = zuta.getAudioNode([{sound: 'a': length: 3}]); node.connect(context.destination); }; zuta.loadAudio(data); data には入力音声のバイナリデータを入れておきます. 形式はブラウザが対応していれば何でもOKです. Chromeなら wav, mp3, mp4 など,メジャーな形式はたいてい読めると思います. getAudioNodeで返ってくるのは AudioNode なので,WaveZutzZutaJS の出力にさらにエフェクトをかけることができます. 例えば,次のコードで周波数フィルタを通すことができます.

Dec 16, 2012 - 1 minute read - Comments - NLP LaTeX

TinySegmenterをLaTeXに移植してみた

この記事はTeX & LaTeX Advent Calendarの傘下記事です. 15日はk16.shikanoさんの「TeX がむかついたので実装したけど挫折してる話」, 17日は@egtraさんの「LCDF TypetoolsでOpenTypeフォントを使う(DVIPDFMXで)」です. neruko3114が参加しているのを見てなんだか楽しそうだったで参加してみました. とはいってもネタも思いつかなったので,過去に作ったものをTeXに移植してみました. ターゲットはTinySegmenter. 以前作ったTinySegmenterMakerでLaTeXを出力できるようになったよ! 使ってみる TinySegmenterMakerのレポジトリをダウンロードするなりgit cloneするなりして 落としてきます. レポジトリに入っているのはモデルファイルとスクリプトだけです. これらを使ってTeXのスタイルファイルを作ります. $ cd /path/to/TinySegmenterMaker/ $ ./maker tex < RWCP.model カレントディレクトリにtinysegmenter.styができます. TeX から見えるところにおいておきましょう. これを使うソースコードは次のようになります. \documentclass{jarticle} \usepackage{tinysegmenter} \begin{document} \TinySegmenter{-}{私の名前は中野です} \end{document} platexで処理するとこんな感じに表示されるはず. 私-の-名前-は-中野-です 仕組み TinySegmeneterは元の文章の一部を切り取ってハッシュに入れる動作をしている. でも,LaTeXにはハッシュみたいなデータ構造がないのでコントロールシーケンスで代用. \@ifundefinedで有無を確認し,\csname\endcsnameで置き換え. コントロールシーケンスの一部に日本語を使わないといけないので,日本語LaTeX環境でしか動かない. ただ,一部句点などの扱いが違う?よくわからない. あとは,文字種の取得が必要なんだけど,ここでも同じことをしてます. すべてのアルファベット・ひらがな・カタカナ・数字について,その文字種をベタ書き. それ以外は全部漢字扱い. そのため,それ以外の文字を使うとオリジナルとは違う結果になるかも. 最後は足し算.これはカウンタを使えば簡単ですね. 応用編 TinySegmenterMakerでは自由にモデルを差し替えることができます. 以前JavaScript版のTinySegmenterを使って, 聞こえますか…自動生成…してみた…よ… ということをしてみました. LaTeXだってできるはず. 聞こえますか… に心に呼びかけるためのモデルファイルが含まれています. これをダウンロードして読み込ませます. $ ./maker tex < model これを自分のドキュメントに読み込ませてみます. \documentclass{jarticle} \usepackage{tinysegmenter} \begin{document} (…\TinySegmenter{…}{聞こえますか聞こえますかあなたの心に直接語りかけています}…) \end{document} 私の声が聞こえましたか・・・?

Dec 15, 2012 - 1 minute read - Comments - NLP MeCab Python

MeCabをPythonから使う注意点とか

日本語の文章をコンピュータで色々いじるときに, 必ずと言っていいほどよく使うのが形態素解析器. スペースなどの明示的な区切りの無い日本語を単語に分割してくれるツールです. 中でもMeCabが非常に有名で,さまざまなところで使われています. MeCabはいろいろな言語から呼び出すことができます. 自然言語処理の分野ではPythonが人気のようですね.僕も使っています. しかし,MeCabをPythonから使う場合,注意する点がいくつかあります. そこにハマっている後輩を見かけたので,文章として残しておくことにします. Python2系が対象です(3系はよくわからない). 注意するのは以下の二点です. MeCabに渡す文字列はencode,戻ってきた文字列はdecodeする MeCabに渡した文字列は必ず変数に入れておく EncodeとDecode Python2系の文字列には,バイト列として扱われる文字列(str)と,Unicodeで表現された文字列(unicode)があります. 日本語を扱う場合,strだといろいろ問題があるので,特に理由がなければunicodeを使うべきです. しかし,MeCabはstrしか受け付けません. そこでMeCabに渡す直前・直後でencode・decodeするようにします. import MeCab tagger = MeCab.tagger('-Owakati') text = u'MeCabで遊んでみよう!' result = tagger.parse(text) # エラー! encoded_text = text.encode('utf-8') # encodeが必要 encoded_result = tagger.parse(text) result = result.decode('utf-8') # 必ずdecode 'utf-8'の部分は辞書の文字コードに合わせて適宜書き換えてください. デフォルトはeuc-jpですが,utf-8の方が幸せになれると思います. 必ず変数に入れる 次にMeCabの作ったノードに直接アクセスして,品詞情報などを取ってくることを考えます. 適当に書いてみるとこんな感じでしょうか. import MeCab tagger = MeCab.tagger('') text = u'MeCabで遊んでみよう!' node = tagger.parseToNode(text.encode('utf-8')) while node: #printはstrを渡す必要があるのでdecodeは不要 print node.surface + '\t' + node.feature node = node.

Dec 5, 2012 - 1 minute read - Comments -

聞こえますか…自動生成…してみた…よ…

聞こえますか…あなたの心に直接…で始まるこのテンプレート. 誰かが「文章入力したら…を自動で入れてくれるのないかな」って呟いてたのでつくってみた. サクッと作成 TinySegmenterで単語分割, ランダムに…を単語の間に挿入して出力してみた. 聞こえますか… この程度なら数十分あれば作れますね. 挿入位置を学習してみる さて,実際やってみるとちょっと挿入位置が不自然な気がします. 世の中に出回っているツイートでは単語間ではなく文節の間に挿入しているのが多いように見えます. しかし,TinySegmenterは品詞情報をつけてはくれないので文節の判定は少し面倒ですね. ・・・待てよ・・・このテンプレートを使ったツイートなんて大量に手に入る・・・これから学習すればいいんじゃね? はい,やってみましょう. ツイートを集める Twitter APIを使ってテンプレートを使っているようなツイートを拾ってきます. ** 「聞こえますか OR きこえますか -RT」** で検索してみました. 普段Twitter APIを叩くときはTweepyを使っているのですが,これで検索するとあまり古いツイートは取れません. API 1.1 を使うと古いツイートも取ってこれるらしいので,強引にTweepyを書き換えて1.1対応. ** 72,529ツイートの取得に成功しました. ** プログラムについてはTweepyの書き換えでゴチャゴチャしているのでまた今度. TinySegmenterMakerに放り込む カッコで囲まれている部分を抽出,点々を空白に置換,パクリツイッタラー消去などの処理をした後, TinySegmentermakerに放り込みます. 実際に学習に使ったツイートは49,573ツイートです. 10000回の繰り返しで,学習結果は以下のようになりました. Result: Accuracy: 94.794% (3466578/3656961) Precision: 90.9504% (526277/578642) Recall: 79.2234% (526277/664295) System/Answer p/p p/n n/p n/n: 526277 52365 138018 2940301 約95%の精度という非常に高い性能を示してくれましたが, 区切るところ(p)よりも区切らないところ(n)のほうが多いためですね. Recallが8割しかありませんが,人によるばらつきが大きそうなので,まあこんなもんでしょう. 学習が終わったら最後にオリジナルのTinySegmenterを学習後のもので置き換えるだけ. チェックボックスで単語分割とツイートの学習結果,どちらを使うか選択できます. なんだかそれっぽくなりましたかね・・・? 元ネタについて ところでこのテンプレートの元ネタについて調査している方がいらっしゃるようです. 「聞こえますか…心に直接…」のオリジナル検証 ゲームが元ネタだ,っていう人を時々見かけたけど, 検証してみると微妙に内容が違うらしい. もちろん影響は受けているんだろうけどね. マンガとかゲームで始めて心に直接語りかけたのって何なんだろう?

Nov 24, 2012 - 4 minute read - Comments - Android Twitter

OAuthの認証にWebViewを使うのはやめよう

AndroidからTwitterへアクセスするためのライブラリとして,Twitter4Jが有名です. これを使ってみようと,「Android Twitter4J」と検索すると 認証にWebViewを使った例がたくさん出てきます. ・・・いや,ちょっとまて. それはちょっとまずいだろう. そういうわけでもうちょっと賢い方法を探してみました. 何がまずいのさ 「Android Twitter4J」と検索すると,上位にこんなページが出てきます. Twitter4jを使ってOAuth認証をアプリ内で行う方法 Twitter4j-2.2.xを使ったOAuth認証のコーディング例 twitter4jでツイートする Android+Twitter4JでOAuthするためのソースコード 上のサイトでは次の様は方法をとっています. アプリ内にWebViewを貼り付け WebViewでTwitterの認証画面を表示 onPageStarted や onPageFinished をオーバーライドして callback URL へのアクセスを検出 URL に入っている認証コードで認証 アプリ内でWebViewを使うとURLが表示されません. つまり ** 本当にツイッターにアクセスしているかわからない ** のです. もし,表示されるのが偽の認証画面だったら,アプリから簡単にパスワードがわかってしまいます. じゃあ,URL を表示させればいいかというとそういうわけでもありません. 画面上のURL表示なんて簡単に偽装できてしまいます. どんな工夫をしても ** アプリがパスワードの要求をしていることには変わりありません ** . アプリはパスワードを簡単に取得できます. アプリのユーザはTwitterに限らずSNSへのログイン時にブラウザを開かないアプリは信用しないようにしましょう. どこかでパスワードの抜かれている可能性があります. (ただし,公式アプリは除く.公式アプリが信用できないならそもそもサービスを利用できないもんね.) じゃあどうするのさ じゃあ,開発者はどうするのかって話ですが,もう少し詳しく検索してみましょう. 他の方法を使っているページもでてきます. PINコードを利用 TwitterでPIN番号認証を行う Intent Fileterを利用しコールバック twitter4jを使用したAndroid Twitterアプリケーション作成 Twitter4Jを使ってAndroidアプリでStreamingAPIのUserTimelineを取得する TwitterでOAuth認証を行う Twitterへのアプリケーション登録 Twitterの認証ページをブラウザで開く Access Tokenを取得する PIN コードを利用 一つ目の方法はPC版クライアントでよく使われる方法. 認証後にPINコードと呼ばれる数字が表示されるので,それをアプリに入力します. twiccaなんかでも使われてますね. Twitter へのアプリケーション登録のときにコールバックURLを入力しないとこの認証方式になります.

Nov 23, 2012 - 2 minute read - Comments - NLP

TinySegmenterの学習ツールを作ってみた

TinySegmenterは工藤さん作のJavaScriptだけで書かれたコンパクトな分かち書きソフトウェアです. わずか20kバイト程度のサイズしかなく,お手軽に使える分かち書きソフトウェアですが, 当たり前のことながら学習データに使った新聞記事以外の文章の精度はイマイチ. 改善しようにも学習用のプログラムが公開されていないのでモデルの修正が大変です. ないなら作ってしまいましょう! ダウンロード ソースはgithubで公開しています.cloneするなりzipファイルを落としてくるなりしてください. TinySegmenterMaker 学習方法 スペースで分かち書きしたコーパスをあらかじめ準備しておきます. コーパスから分かち書きの情報と素性を取り出します. $ ./extract < corpus.txt > features.txt AdaBoostを用いて学習します. 新しい弱分類器の分類精度が0.001以下,繰り返し回数が10000回以上となったら学習を終了します. $ g++ -O3 -o train train.cpp # コンパイル $ ./train -t 0.001 -n 10000 features.txt model # 学習 きちんと分割できるが実際に試してみます. $ ./segment model 私の名前は中野です 私 の 名前 は 中野 です ライブラリの作成 TinySegmenterは実装が簡単なためいろいろな言語へ移植されています. モデルの更新のたびにそれらへの言語の移植バージョンを作るのは大変です. というわけで,makerコマンドで各種言語用のライブラリを作れます. 学習結果のモデルはライブラリのなかに組み込まれ,ファイル単体で簡単に使用することができます. allを指定することで,対応しているすべての言語向けのライブラリを出力します. $ ./maker javascript < model $ ./maker perl < model $ ./maker ruby < medel $ .

Nov 9, 2012 - 1 minute read - Comments - 6さいカンファレンス

6さいカンファレンス 第9回「マスタリングの技法 ~音圧を上げよう~」まとめ

2012/11/8にくいなちゃんさん主催で開催された6さいカンファレンスのまとめ。 第9回は「マスタリングの技法 ~音圧を上げよう~」です。 勝手にまとめてしまったので、何か問題があれば@shogo82148まで。 よるほー くいなちゃん: みなさん、自分が作った曲が、市販のCDの曲にくらべ、 音量が小さい (最大まで波形を上げたにも関わらず)と悩んだことはありませんか? くいなちゃん: しかし、心配はいりません。 今回のことを実践していただくと、 みなさんの曲も、市販の楽曲並みに、音圧をあげることができるですん! では次の波形をご覧ください。 くいなちゃん: http://kuina.tes.so/6saiconf_9/img0.png はい、さっき作った曲です。 いい曲ですね! しかし、なんだか音量が小さいですね… それでは、波形に注目してください。 この図では、波形が-1.0~1.0 の範囲で 示されていますが、この範囲に比べ、明らかに波形が小さいです。 余白が空きすぎです! くいなちゃん: え、mp3ファイルがどこにあるかって? キニシナイ! では、とりあえず、この波形を -1.0~1.0 まで拡大してみましょう。 http://kuina.tes.so/6saiconf_9/img1.png はい、赤い矢印で示されたところが、確かに-1.0~1.0 の範囲に到達していますね。 素人さんは、この状態で完成、と思うでしょう。 しかし、それではダメダメですん☆ くいなちゃん: なぜなら、緑の2本線で示された範囲がメインの波形であって、 そこから飛び出た いわゆる魚の骨は、音量を上げる邪魔をするものだからです。 この魚の骨さえなければ、もっと音量が上がるのに…そう考えてください。 くいなちゃん: 市販のCD の音楽なんかは、こんな波形をしています。 http://kuina.tes.so/6saiconf_9/img2.png これは、全体が波形で埋まった、いわゆる海苔みたいなことになっているので、 業界でもしばしば 海苔 と言われます。 ここまで来ると、相当 音量が大きく聞こえます。 波形のピークは、魚の骨と同じなんですけどね。 くいなちゃん: で、素人さんは、この状態にしようと、魚の骨を無視して、 波形のレベルを上げるわけです。 しかし、これには問題があるのです。 くいなちゃん: http://kuina.tes.so/6saiconf_9/img3.png この図を見ればわかるのですが、青のラインが -1.0 ~ 1.0 の範囲をしめしています。 で、無理やり波形を拡大すると、青のラインを超えた部分が潰されて、 右の波形のようなことになってしまいます。これは、元の波形から変わっているので、 当然音も変わります。大抵、ノイズが入った汚い音になってしまいますですー くいなちゃん: じゃあ、どうするのか。 それは、波形を潰すことなく、波形のピークを下げて -1.0 ~ 1.

Nov 6, 2012 - 2 minute read - Comments - Hadoop VirtualBox

VirtualBoxでHadoop環境を作ってみる

隣の人がHadoopいじって遊んでたので,自分もちょっとやっておこうかなと思い少し触ってみました. 実際にマシンを借りて大規模な計算をするのは大変なので, 仮想マシンを作って遊んでみました. 仮想Hadoop環境の構築 巷ではVMWareが人気だったりしますが,今回はVirtualBoxを使ってみたいと思います. なぜかというとVirtualBoxをコンソールから扱えるVagrantで遊んでいたので, ちょうどパソコンにインストールされていたから. 以下,VirtualBoxは既にインストールされているものとして話を進めます. Cloudera’s Hadoop Demo VM for CDH4に VMWare, KVM, VirtualBox用の各種イメージが置いてあるので, VirtualBox用のものをダウンロードしてきます. tar.gzで圧縮されているので解凍しましょう. 中にcloudera-demo-vm.vmdkというファイルが入ってます. VirtualBoxを起動してHadoop用のマシンを新規作成します. 設定は以下のとおりに デモイメージはCentOSベースらしいのでOSタイプとして RedHat**(64bit版)** を選択 メモリは3Gバイト以上 ハードディスクは後で設定するので,「起動ディスク」のチェックを外し割り当てしない 新規作成したら設定を少しいじります. IO APICが有効化されていることを確認 ストレージにcloudera-demo-vm.vmdkを追加.この時 IDEコントローラ の下にいれること. ネットワークアダプタをホストオンリーアダプタに設定 これで実行できるようになります. 遊んでみる せっかくなので少し遊んでみる事にします. イメージの置いてあったページにあるHadoop Tutorialをやってみましょう. Hadoopの例として必ず最初に出てくるであろう,Word Countです. まずソースコードを入力します. package org.myorg; import java.io.IOException; import java.util.*; import org.apache.hadoop.fs.Path; import org.apache.hadoop.conf.*; import org.apache.hadoop.io.*; import org.apache.hadoop.mapred.*; import org.apache.hadoop.util.*; public class WordCount { public static class Map extends MapReduceBase implements Mapper<LongWritable, Text, Text, IntWritable> { private final static IntWritable one = new IntWritable(1); private Text word = new Text(); public void map(LongWritable key, Text value, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException { String line = value.