JAWS DAWYS 2013に参加してきました
こんにちは。マイニングブラウニーの松森です。
2013年3月16日(土) 開催のJAWS DAYS 2013に行ってきました。
弊社代表の得上が半年間講師をつとめたバンタンライブアカデミーの学生さん達が行った
「ごきげんよう - クラウドエンジニアの種を捲く -」というトラックの発表をレポートしたいと思います。
まずは得上の前座で開始。
好きなポン酢のお話から始まり、学生さんが今日の発表をするまでの経緯のお話までをされていました。
学生さん達は今までほぼ、システム開発素人。初めて触ったサーバがAmazonLinux。
従量課金やサーバがスケールするのが当たり前なクラウドネイティブな人達。
オンプレミスのサーバの値段も知らず、
得上)「Dellのサーバいくらか知ってる?」
学生)「分からないです(即答)」
なんてやり取りもありました。
半年間でEC2、S3からVPCやBeansTalkまでひと通りのサービスを学んだそうです。
授業の一貫で目黒のAmazonオフィスを見学に行ったりということもあったそうで
実にうらやましい。
そして、学んだことの統括として最後の授業2週間かけてサービスを開発してみたそうです。
それが本日のメインの発表内容。
このプロジェクトに携わったバンタンドットライブアカデミーの学生さん達は以下の4人。
すきなうどん屋は六本木つるとんたんの大國谷さん。
推しメンは壇◯な大谷さん。好きなAWSはS3。◯蜜さんの懐の大きさに似ているとのこと。
いちごオレが好きな新井さん。
大分出身で電車を乗り間違えて遅刻した清水さん。
「好きな会社はマイニングブラウニーです!」ですって。(*´ω`*)
そして、サービスの紹介へ。
作成したサービスはチャットサービス「ClouVo」
現在、世の中を賑わしているチャットサービスのLINEやSkypeなどはスタンプなどは主に視覚に訴えるものですね。
五感をもっと使ったチャットがあったらいいんじゃない?
触覚、味覚、嗅覚は無理だけど、、、、
聴覚
ならいけるんじゃね?(・∀・)
ということで
さっそく、Clouvoのデモ開始。
現在はfacebookアカウントでのログイン方式で
チャットルームを追加してfacebookの友達を招待してしたりできるようです。
チャットで文字を入力して投稿すると、その内容の音声がPCから出る仕組み。
音声の発音については、聞いた感じ、片言な外人さんがしゃべっているようでしたが
これからどんどん改良していくそうです。
今後に期待ですね。
音声は自分たちで作成していて、現在は女性、男性の声があるそう。
今後は様々な声を用意していって、ゆくゆくは有名人の声を真似たものや
フレーズスタンプを作って行きたいそうです。
ちなみに、このサービスのインスピレーションをうけたのがMax OS Xのsayコマンド。
授業の一貫で、教えてもらってハマリ、楽しすぎてみんなで20分くらい遊んでいたそうです。
アーキテクチャのお話もありました。
音声データはSimpleDBに、ユーザのデータはDynamoDBに保存。というシンプルな構成。
そして大事な大事なお金のお話。
学校に入学して得上先生に出会うのにかかった学費は155万。
元をとるために、サービスを運用していき、キャラクターボイスやフレーズスタンプを課金化したいとのこと。
そこで、ユーザ数を想定して維持費や利益を細かく計算して発表されてました。すばらしい。
音声データもテキスト化して、そのデータを送って、ブラウザ側で音声に変換しているので、転送量は少ないなどの工夫もされているそうです。
めざせ年間黒字 150万!
チャットに投稿したコメントは文字でも表示がされるので、目の不自由な方と耳の不自由な方とのチャットも成立させることもできるのではないかという夢もあるとのこと。
最後に得上の総括。
「AWSに触り始めてから半年で企画、収益計算も考えて出来る。
まさしく今、世間で求められているのはこういう人材だと思います。」
会場からも素晴らしいとの声があがっていました。
短期間で簡単にシステムを作ることができるのもクラウドの魅力ですね。
発表おつかれさまでした!
こんな学生さん達が学んでいたバンタンライブアカデミーでは、講師をしていただける方を今後も募集中だそうです。
〜 番外編 〜
得上はエキストラトラックの「荒木の部屋」にも参加していました。
EC2にmysqlをインストールしたりしないでRDS使おうよ、
webサーバとして使わずに、BeansTalkを使えばいいじゃない?
EC2にしかできないことあるでしょ!
というお話をされてました。
ちなみにEC2にしかできないことってなんでしょう?という荒木さんからの投げかけに
会場から
「ActiveDirectory」
との声。
得上も「ディレクトリサービスが欲しい。IAMやSTSと連動してくれたらすごくよい。」と同意。
会場からも「あったら使いますか?」という問いかけに挙手した人は半分以上でした。
来年の今頃にはサービス化されてたりするかな?
そこから、別の話題に。
「LTが毎回面白い得上さん、AWSでは最初にプレスリリースを作ってからサービス開発をしますという話もLTでしていましたが
普段から自分も心がけているのでしょうか?」
という荒木さんからの質問に
「時間の流れの中で見てる人のテンションをどう動かしていくかというタイムラインを考えて、そこに構成を当てはめていく。
Usteramを見てる人のことも考えている。最後の着地点が頭の中に出来上がってから作り始める。」とのこと。
また、ネタを作るために調べたりなどの作業は特にしておらず、
新サービスのリリースが出たら、SDKを全部読んで把握しているそうです。
そこから、どうネタに使うか考えるとのこと。
参考にしたいですね。
〜 個人的感想 〜
今回のJAWS DAYSにはAWSカルタで遊べるブースもありまして、
実際にやってみると非常に面白かったです。
クローラーサービスmitsubachiのCUIツールをアップデートしました
弊社マイニングブラウニーで提供しております、ウェブサイトをクローリングする
プラットフォームサービス「mitsubachi」ですが、これを操作するCUIツールの
ログ出力機能をアップデートしました。
mitsubachi 入門ガイド-mitsubachi CUI Toolをセットアップする
mitsubachiはクロール処理を個々のキューで処理をするため、ログがキューの
単位で独立して出力されます。
そのためトレースがとてもしにくいという残念な一面がありました。。
CUIツールを利用したmitsコマンドでクロールのログを取得しようとすると...
$ mits rlist [project-name] -f log Picked up _JAVA_OPTIONS: -Dfile.encoding=UTF-8 -Dfile.encoding=UTF-8 No. 1:リソース名[log/stderr/20130311/141149_search.rb.08760274.log],サイズ[0],タイムスタンプ[2013-03-11T14:11:50+0900],コンテンツタイプ[text/plain; charset=utf8] No. 2:リソース名[log/stderr/20130311/141208_list.rb.94416081.log],サイズ[0],タイムスタンプ[2013-03-11T14:12:09+0900],コンテンツタイプ[text/plain; charset=utf8] No. 3:リソース名[log/stderr/20130311/141211_list.rb.95394080.log],サイズ[0],タイムスタンプ[2013-03-11T14:12:12+0900],コンテンツタイプ[text/plain; charset=utf8] No. 4:リソース名[log/stderr/20130311/141215_list.rb.00687670.log],サイズ[0],タイムスタンプ[2013-03-11T14:12:16+0900],コンテンツタイプ[text/plain; charset=utf8] No. 5:リソース名[log/stderr/20130311/141225_list.rb.81718690.log],サイズ[0],タイムスタンプ[2013-03-11T14:12:26+0900],コンテンツタイプ[text/plain; charset=utf8] No. 6:リソース名[log/stderr/20130311/141235_list.rb.24222363.log],サイズ[0],タイムスタンプ[2013-03-11T14:12:36+0900],コンテンツタイプ[text/plain; charset=utf8] No. 7:リソース名[log/stderr/20130311/141235_list.rb.37079102.log],サイズ[0],タイムスタンプ[2013-03-11T14:12:36+0900],コンテンツタイプ[text/plain; charset=utf8] No. 8:リソース名[log/stderr/20130311/141237_list.rb.37947385.log],サイズ[0],タイムスタンプ[2013-03-11T14:12:38+0900],コンテンツタイプ[text/plain; charset=utf8] No. 9:リソース名[log/stderr/20130311/141247_list.rb.91683724.log],サイズ[0],タイムスタンプ[2013-03-11T14:12:48+0900],コンテンツタイプ[text/plain; charset=utf8] No. 10:リソース名[log/stderr/20130311/141251_detail.rb.76353917.log],サイズ[0],タイムスタンプ[2013-03-11T14:12:52+0900],コンテンツタイプ[text/plain; charset=utf8] No. 11:リソース名[log/stderr/20130311/141254_list.rb.46466238.log],サイズ[0],タイムスタンプ[2013-03-11T14:12:55+0900],コンテンツタイプ[text/plain; charset=utf8] No. 12:リソース名[log/stderr/20130311/141258_list.rb.00179981.log],サイズ[0],タイムスタンプ[2013-03-11T14:12:59+0900],コンテンツタイプ[text/plain; charset=utf8] No. 13:リソース名[log/stderr/20130311/141300_detail.rb.27872237.log],サイズ[1393],タイムスタンプ[2013-03-11T14:13:01+0900],コンテンツタイプ[text/plain; charset=utf8] No. 14:リソース名[log/stderr/20130311/141311_detail.rb.58600194.log],サイズ[0],タイムスタンプ[2013-03-11T14:13:12+0900],コンテンツタイプ[text/plain; charset=utf8] No. 15:リソース名[log/stderr/20130311/141313_detail.rb.15733403.log],サイズ[0],タイムスタンプ[2013-03-11T14:13:14+0900],コンテンツタイプ[text/plain; charset=utf8] No. 16:リソース名[log/stderr/20130311/141321_detail.rb.41712169.log],サイズ[0],タイムスタンプ[2013-03-11T14:13:22+0900],コンテンツタイプ[text/plain; charset=utf8] No. 17:リソース名[log/stderr/20130311/141336_detail.rb.57443087.log],サイズ[0],タイムスタンプ[2013-03-11T14:13:37+0900],コンテンツタイプ[text/plain; charset=utf8] No. 18:リソース名[log/stderr/20130311/141343_detail.rb.20019418.log],サイズ[0],タイムスタンプ[2013-03-11T14:13:44+0900],コンテンツタイプ[text/plain; charset=utf8] No. 19:リソース名[log/stderr/20130311/141348_list.rb.41029642.log],サイズ[0],タイムスタンプ[2013-03-11T14:13:49+0900],コンテンツタイプ[text/plain; charset=utf8] No. 20:リソース名[log/stderr/20130311/141349_detail.rb.88511458.log],サイズ[0],タイムスタンプ[2013-03-11T14:13:50+0900],コンテンツタイプ[text/plain; charset=utf8] No. 21:リソース名[log/stderr/20130311/141358_detail.rb.01599541.log],サイズ[0],タイムスタンプ[2013-03-11T14:13:59+0900],コンテンツタイプ[text/plain; charset=utf8] No. 22:リソース名[log/stderr/20130311/141400_detail.rb.01626726.log],サイズ[0],タイムスタンプ[2013-03-11T14:14:01+0900],コンテンツタイプ[text/plain; charset=utf8] No. 23:リソース名[log/stderr/20130311/141403_detail.rb.23286314.log],サイズ[0],タイムスタンプ[2013-03-11T14:14:04+0900],コンテンツタイプ[text/plain; charset=utf8] No. 24:リソース名[log/stderr/20130311/141409_detail.rb.19171701.log],サイズ[0],タイムスタンプ[2013-03-11T14:14:10+0900],コンテンツタイプ[text/plain; charset=utf8] No. 25:リソース名[log/stderr/20130311/141409_detail.rb.45222870.log],サイズ[1393],タイムスタンプ[2013-03-11T14:14:10+0900],コンテンツタイプ[text/plain; charset=utf8] No. 26:リソース名[log/stderr/20130311/141421_detail.rb.33944169.log],サイズ[0],タイムスタンプ[2013-03-11T14:14:22+0900],コンテンツタイプ[text/plain; charset=utf8] No. 27:リソース名[log/stderr/20130311/141426_detail.rb.00015241.log],サイズ[0],タイムスタンプ[2013-03-11T14:14:27+0900],コンテンツタイプ[text/plain; charset=utf8] No. 28:リソース名[log/stderr/20130311/141429_list.rb.11848910.log],サイズ[1393],タイムスタンプ[2013-03-11T14:14:30+0900],コンテンツタイプ[text/plain; charset=utf8] No. 29:リソース名[log/stderr/20130311/141430_detail.rb.00386591.log],サイズ[0],タイムスタンプ[2013-03-11T14:14:31+0900],コンテンツタイプ[text/plain; charset=utf8] No. 30:リソース名[log/stderr/20130311/141434_detail.rb.79122253.log],サイズ[0],タイムスタンプ[2013-03-11T14:14:35+0900],コンテンツタイプ[text/plain; charset=utf8] No. 31:リソース名[log/stderr/20130311/141447_detail.rb.41676158.log],サイズ[0],タイムスタンプ[2013-03-11T14:14:48+0900],コンテンツタイプ[text/plain; charset=utf8] No. 32:リソース名[log/stderr/20130311/141457_detail.rb.09392800.log],サイズ[0],タイムスタンプ[2013-03-11T14:14:58+0900],コンテンツタイプ[text/plain; charset=utf8] No. 33:リソース名[log/stderr/20130311/141458_detail.rb.33425740.log],サイズ[1393],タイムスタンプ[2013-03-11T14:14:59+0900],コンテンツタイプ[text/plain; charset=utf8] No. 34:リソース名[log/stderr/20130311/141509_detail.rb.81220295.log],サイズ[0],タイムスタンプ[2013-03-11T14:15:10+0900],コンテンツタイプ[text/plain; charset=utf8] No. 35:リソース名[log/stderr/20130311/141515_detail.rb.36874013.log],サイズ[0],タイムスタンプ[2013-03-11T14:15:16+0900],コンテンツタイプ[text/plain; charset=utf8] No. 36:リソース名[log/stderr/20130311/141518_detail.rb.80295723.log],サイズ[0],タイムスタンプ[2013-03-11T14:15:19+0900],コンテンツタイプ[text/plain; charset=utf8] No. 37:リソース名[log/stderr/20130311/141518_detail.rb.98154046.log],サイズ[0],タイムスタンプ[2013-03-11T14:15:19+0900],コンテンツタイプ[text/plain; charset=utf8] No. 38:リソース名[log/stderr/20130311/141521_detail.rb.06842553.log],サイズ[0],タイムスタンプ[2013-03-11T14:15:22+0900],コンテンツタイプ[text/plain; charset=utf8] No. 39:リソース名[log/stderr/20130311/141525_detail.rb.67984060.log],サイズ[0],タイムスタンプ[2013-03-11T14:15:26+0900],コンテンツタイプ[text/plain; charset=utf8] No. 40:リソース名[log/stderr/20130311/141532_detail.rb.15367995.log],サイズ[0],タイムスタンプ[2013-03-11T14:15:33+0900],コンテンツタイプ[text/plain; charset=utf8] ...
ギャーーなげえ!
というありさまです。
これを少しでも見やすくするために、ログをリスト出力するlgetという機能を
用意しました。
$ mits lget [project-name] -t e > err.log
このようにすると、err.logのなかに
og/stderr/20130311/141300_detail.rb.27872237.log NoMethodError: undefined method `text' for nil:NilClass (root) at <script>:21 org.jruby.embed.EvalFailedException: (NoMethodError) undefined method `text' for nil:NilClass at org.jruby.embed.internal.EmbedEvalUnitImpl.run(EmbedEvalUnitImpl.java:127) at org.jruby.embed.jsr223.JRubyEngine.eval(JRubyEngine.java:129) at org.jruby.embed.jsr223.JRubyEngine.eval(JRubyEngine.java:157) at org.mushikago.services.mitsubachi.sandbox.SandboxedScriptExecutor.execute(SandboxedScriptExecutor.java:91) at org.mushikago.services.mitsubachi.sandbox.SandboxedScriptExecutor.main(SandboxedScriptExecutor.java:144) Caused by: org.jruby.exceptions.RaiseException: (NoMethodError) undefined method `text' for nil:NilClass Exception in thread "main" javax.script.ScriptException: org.jruby.exceptions.RaiseException: (NoMethodError) undefined method `text' for nil:NilClass at org.jruby.embed.jsr223.JRubyEngine.wrapException(JRubyEngine.java:115) at org.jruby.embed.jsr223.JRubyEngine.eval(JRubyEngine.java:132) at org.jruby.embed.jsr223.JRubyEngine.eval(JRubyEngine.java:157) at org.mushikago.services.mitsubachi.sandbox.SandboxedScriptExecutor.execute(SandboxedScriptExecutor.java:91) at org.mushikago.services.mitsubachi.sandbox.SandboxedScriptExecutor.main(SandboxedScriptExecutor.java:144) Caused by: org.jruby.exceptions.RaiseException: (NoMethodError) undefined method `text' for nil:NilClass log/stderr/20130311/141300_detail.rb.27872237.log NoMethodError: undefined method `text' for nil:NilClass (root) at <script>:21 org.jruby.embed.EvalFailedException: (NoMethodError) undefined method `text' for nil:NilClass at org.jruby.embed.internal.EmbedEvalUnitImpl.run(EmbedEvalUnitImpl.java:127) at org.jruby.embed.jsr223.JRubyEngine.eval(JRubyEngine.java:129) at org.jruby.embed.jsr223.JRubyEngine.eval(JRubyEngine.java:157) at org.mushikago.services.mitsubachi.sandbox.SandboxedScriptExecutor.execute(SandboxedScriptExecutor.java:91) at org.mushikago.services.mitsubachi.sandbox.SandboxedScriptExecutor.main(SandboxedScriptExecutor.java:144) Caused by: org.jruby.exceptions.RaiseException: (NoMethodError) undefined method `text' for nil:NilClass Exception in thread "main" javax.script.ScriptException: org.jruby.exceptions.RaiseException: (NoMethodError) undefined method `text' for nil:NilClass at org.jruby.embed.jsr223.JRubyEngine.wrapException(JRubyEngine.java:115) at org.jruby.embed.jsr223.JRubyEngine.eval(JRubyEngine.java:132) at org.jruby.embed.jsr223.JRubyEngine.eval(JRubyEngine.java:157) at org.mushikago.services.mitsubachi.sandbox.SandboxedScriptExecutor.execute(SandboxedScriptExecutor.java:91) at org.mushikago.services.mitsubachi.sandbox.SandboxedScriptExecutor.main(SandboxedScriptExecutor.java:144) Caused by: org.jruby.exceptions.RaiseException: (NoMethodError) undefined method `text' for nil:NilClass ...
このようなスタックトレースが出力されます。
上の例だとクロールスクリプトdetail.rbのの21行目でエラーが出ているな
ということがわかります。
mitsubachiクローラーが途中で中断してしまってるけど、どこでエラーしたのか
わからないときに使えます。
ぜひ使ってみてください。
mitsubachi CUI Tool ver. 2.1.0 ダウンロード
なんなのかマイニングブラウニーという会社
こんにちは、マイニングブラウニーのすずきです。
先日togetterでとてもよいまとめがありました。
クラスメソッド社長の横田さんが、自社の特徴を
わかりやすい語り口でツイートされています。
読んでいて、一瞬クラスメソッドさんに就職したくなるくらいw
そのくらい、とても魅力的な特徴を持つ会社さんです。
そんでね、ふと思ったんです。
マイニングブラウニーという会社、
声を大にして言える特徴ってなんだろう。
そういわれてみると、結構謎かもしれない。
だって代表得上の近影からしておかしい。
なんなのか。
なんなのかマイニングブラウニーという会社。
わたしは得上ではないので、横田さんほどたくさんの言葉で
お伝えすることはできません。
が、あえてマイニングブラウニーという会社を一言であらわすとしたら
「やりたくなったらやっちゃおう」
です。
もともとSI系の兵隊だったわたしは、いままで割といろんな企業を
見る機会がありましたが
ほとんどの会社では、なにか新しいことをはじめようとするときは
上長への報告が必要でした。
「○○をしようと思うのですが、よろしいでしょうか?」
「○○をすると××がよくなると思うのですが、いかがでしょうか?」
まあ大体こんなかんじにお伺いをたてるのが定石だと思います。
マイニングブラウニーでは、なにぶん得上がせっかちです。
いかがでしょうか?なんて、聞かれた時点でなにも進展のないことを
問われるのを嫌います。
逆に、
「○○したほうがよさそうだなー」
って思ったことは、さくっと勝手にやってしまって、サプライズ的に
「やっちゃいました!」
と報告すると、会社として非常によろこばれます。
わたしも勝手にこのブログを立ち上げたり、無断でコーポレートサイトの
色変えたりTwitterに画像あげたりしてますが
そういうことで注意を受けたことは一度もありません。
なので、
逐一指示されるのを好まない、好きなようにやりたいタイプの人で、
これ、自分だったらこうするのに!
ですとか
お金もらって自分の思うものをつくりたい!
ですとかの
野望をお持ちの方に向いているような気がします。
なんか面白そうな会社だわねって思っていただけたら、ぜひ連絡してみてください。
では( ╹◡╹)♥
--
追記
このブログを書いてる最中にこんなまとめができてました。
すごいですクラスメソッドさん。こつこつと継続が大事なんですね。
参考にさせていただきます!