Archive

Archive for the ‘IT’ Category

Webサービスのヒアリングとリリース後のプロセスで大事なこと

4月 5th, 2012

昨日、Onlabでデザイン系のセミナーがあったようで。
Pirikaのkojimaさんがブログにまとめていて、すごく参考になったので転載させていただきます。

デザイン戦略

1.人から始める時にこの3つを考える事
①自分の周りにいる人達が意識していることを観察できているか
②ユーザーがこのプロセスがあったとして、そのプロセスを終えている理由とモチベーションは何なのか
③ユーザーがこの課題にあたっている時にどういうステップを踏んでいるか
2.話すのをやめ、作り出すこと
①プロトタイプを通して何を学びたいか
②一番早く学びたい事を学べるように何をすればいいか
③明日早く自分のチームとプロトタイプをつくるために今何ができるか
3.たくさんのプロトタイプを作ってそのほとんどを捨てる覚悟を持つ
4.できる限りの時間をスタートアップをやっていない人達と話す事に使う
①スタートアップ界隈以外の誰と会話しているか
②自分の持っているイメージ(家庭とは○○である、とか)が正確かどうかの検証をしているか
③文化にとけ込んでいるか
5.あなたの物語を人間味のあるものにすること

http://kojimafujio.tumblr.com/post/20464162723/elle-luna

ローンチ後の戦略

【ゴール設定】
ローンチする時に問いかける質問「なぜ僕はローンチするのか」
ローンチする時に、ローンチする目標を明確にしないといけない
「○○の数の人が○○をアップロードするプラットフォームを作る」というような目標
設定したゴールは大きな世界を変えるぞみたいなゴールではなく、小さくシンプルなゴールを作る
【KPIの設定】
自分の目標を達成できているかどうかのKPI設定
3〜5のKPIに集中すること、30個もあってはいけない
【ローンチ後のプロモーション】
TechCrunchに載る事を重視しない
大事なのは自分のサービスのターゲットユーザーが読んでるニュースサイトに載る事
【フィードバック】
サインアップするとパーソナルなメールが届く、スペルミスとかわざと入れる
onesheetの場合はonesheetにサインアップしてでもonesheetを作らなかった人に、アカウント作ったのに、onesheetをつくらなかったのはなんで?というメールを送った
こうすることで、凄く返信率が高く1/3の人が返信してくれた
ユーザーからフィードバックを取る時はシンプルにユーザーに問いかける
【QA資金調達について】
資金調達はできるだけあと
物を作って、そのアイデアが検済みの状態で資金を調達する
事業を展開している中でボトルネックが明らかになった時にVCから調達すべき

http://kojimafujio.tumblr.com/post/20463996322/brenden-mulligan

また、今ライフネットの岩瀬さんの著書、『ネットで生保を売ろう!』を読んでいて、事業計画を立てるための調査分析プロセスが面白かったです。

・「ネットで生保が売れるか?」という問題を「どういう属性の人なら買ってくれるか?」という問いに置き換えて、ペルソナを設定した
・海外の人脈をフル活用して、米国や英国のネット生保販売の事例を調査した
・個人ブログで協力を呼びかけ100名弱を対象としたネットアンケートを実施し、面白い回答をした人たちに個別で電話でフォローのインタビューを行った
・さらに何名か会議室に集まってもらい、かなり掘り下げたフォーカスグループインタビュー
・洞察が得られるためにホワイトボードに書き出して議論、整理した

特にB2Cのサービスにおいて、「ユーザーを大事に」と言うけれども、具体的なアクションがあまり出回っていない気がしますが、こういう当たり前の事を淡々とこなすだけなんだなー、と感じました。

ちなみに、最近身内で耳にするあすかアセットの谷屋さんの話がはじめ出てきていて、新鮮でした。

8maki IT, proposal, デザイン

Quick Zsh Tip: ディレクトリのブックマーク

2月 20th, 2011

Y CombinatorのHacker Newsを見てたら、Bashにおけるディレクトリのブックマーク方法について書かれてました。
これでcdの手間がすごい省ける!
» Quick Bash Tip : Directory Bookmarks

そのzsh版もコメント欄に書かれていたのですが、コピペするだけじゃ動かなかったので、修正版をUP。

# ZSH Directory Bookmarks
alias m1='alias g1="cd `pwd`"'
alias m2='alias g2="cd `pwd`"'
alias m3='alias g3="cd `pwd`"'
alias m4='alias g4="cd `pwd`"'
alias m5='alias g5="cd `pwd`"'
alias m6='alias g6="cd `pwd`"'
alias m7='alias g7="cd `pwd`"'
alias m8='alias g8="cd `pwd`"'
alias m9='alias g9="cd `pwd`"'
alias mdump='alias | grep -e "g[0-9]=" | grep -v "m[0-9]" | sed "s/^g/alias g/g" > ~/.bookmarks'
alias lma='alias | grep -e "g[0-9]=" | grep -v "m[0-9]" | sed "s/^g/alias g/g"'
touch ~/.bookmarks
source ~/.bookmarks

こうするとブックマークされて↓

# This will create a bookmark for the /var/www directory
/var/www% m1

こうするとブックマークしたディレクトリに移動できます↓

# This will cd into /var/www
/var/www% g1

`lma`コマンドで今のブックマーク状況をチェックできます。

/var/www% lma
alias g1='cd /var/www/'
alias g2='cd /etc/httpd/conf.d'

8maki IT, proposal, エンジニア

マニアックな金融系サイトをnode.jsとMongoDBで実装してみた(実装編)

1月 19th, 2011

さて、前回の記事「マニアックな金融系サイトをnode.jsとMongoDBで実装してみた(概要編)」に続き、実装の詳細を書こうと思うのですが、こちらはどうせ技術者しか見ないので手っ取り早く、コードとシェルを中心にします。

この記事では、開発から運営まで一連の流れを示して、node.jsとMongoDBである程度のWebサービスを提供できるようになること、を目的としています。

SakuraのVPSにMongoDBとnode.jsをインストール

以前、別のサーバーにMongoDBを入れてアクセス解析をしようとしたのですが、どうやら32bit版だと1つのDBは2GB以上入れられないらしく。
しかたなしにSakruaのVPS(CentOS64bit)に64bit版のMongoDBをソースコードから入れました。
※32bitだとyumとかapt-getとかで入ったのにー

wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-1.6.5.tgz
tar xvzf mongodb-linux-x86_64-1.6.5.tgz
sudo mv mongodb-linux-x86_64-1.6.5 /usr/local/bin # どっか適当に
sudo mv /usr/local/bin/mongodb-linux-x86_64-1.4.3 /usr/local/bin/mongodb
useradd mongodb
mkdir /var/lib/mongodb  # 中身を入れるディレクトリ
chown -R mongodb:mongodb /var/lib/mongodb
mkdir /var/log/mongod
chown -R mongodb:mongodb /var/log/mongod
sudo /sbin/chkconfig --add mongod
/sbin/chkconfig mongod on
/sbin/chkconfig --list |grep mongod
sudo /etc/init.d/mongod # 起動スクリプト
sudo /etc/init.d/mongod start
sudo easy_install pymongo # ついでにpythonから使うのでライブラリインストール

ちなみに、デーモン化したかったので簡単な起動シェルをこちらから拝借してきました。
» 技術メモ
(こちら、公開してなかったらゴメンナサイ。そしたら別にファイル作ります。)

試しにmongoのシェルから動いてるのを確認してみてください。

mongo
----
MongoDB shell version: 1.6.5
connecting to: test
> show dbs
admin
local
test

次にnode.jsを入れます。
安定版の0.2.6をインストール。ssl使う場合はもっと大変そう。

wget http://nodejs.org/dist/node-v0.2.6.tar.gz
tar zxvf node-v0.2.6.tar.gz
cd node-v0.2.6
./configure --without-ssl
make
sudo make install

また、node.jsはライブラリのパッケージ管理にnpmというものを使っていて、こちらもインストール。

ここまできて、npmは/usrとか/usr/localにroot権限で入れるのではなく、$HOME/.npmrcを設定して一般ユーザーの権限で入れるのがベストプラクティスなのだと理解した。
» npmをインストールする – スコトプリゴニエフスク通信

とのことで、おとなしくそれに従う。ってか実際rootで入れると、sudo npm install xxxするときに怒られます。

wget https://download.github.com/isaacs-npm-v0.2.14-6-14-g0cec5bf.tar.gz
cat >>~/.npmrc <<NPMRC
root = $HOME/.node_libraries
binroot = $HOME/bin
manroot = $HOME/share/man
NPMRC
tar -zxvf isaacs-npm-v0.2.14-6-14-g0cec5bf.tar.gz
cd isaacs-npm-v0.2.14-6-14-g0cec5bf
make install

で、必要なライブラリをインストール。

npm install express # これは古いらしく結局ソースから読み込み・・・
npm install mongodb
npm install ejs
npm install spark # 結局使わず・・・
npm install forever

node.jsでwebサーバーを書く

これで一通り環境が整ったので、適当なフォルダにapp.jsかなんかのファイル名でごりごり書いていきます。
前提として、mongoDBに既に必要なデータは入ってるものとします。
詳しくはmongoDBの日本語マニュアルを参照。@doryokujin君に感謝!

ちなみにnode.jsコミュでは一番メジャーっぽい、express.jsっていうフレームワークを使っています。
githubにサンプルコードがたくさん載っていて、特にmvcがとても参考になりました。

なお、フォルダ構成はこんな感じです。
/service
 /public・・・cssとかimgとか静的ファイル
 /express・・・expressの本体
 /views・・・テンプレートファイル
  body.html
  layout.html
  header.html
 app.js

app.js

var express = require('./express'),
	phpjs = require('./php');

var app = module.exports = express.createServer(),
	Db = require('mongodb/db').Db,
	ObjectID = require('mongodb/bson/bson').ObjectID,
	Server = require('mongodb/connection').Server,
	db = new Db('dbname', new Server('localhost', 27017, {}));

app.set('views', __dirname + '/views');
app.register('.html', require('ejs'));
# express.jsはテンプレートエンジンにjadeを使ってるがキモいのでejs
app.set('view engine', 'html');
app.use(express.staticProvider(__dirname + '/public'));
# 静的フォルダの指定
app.use(express.logger('\x1b[33m:method\x1b[0m :date :status \x1b[32m:url\x1b[0m :response-time :remote-addr :referrer'));
# loggerはnode.jsが使っているConnectのformatに対応
app.helpers({ # テンプレートから呼び出せるヘルパー関数群
  helper1: function(){ return false; },
  helper2: functoin(){ return true; }
});
# routingの部分。 / にアクセスしたらこれが実行される
app.get('/', function(req, res){
	getCollection1(function(result1){
		getCollection2(function(result2){
			res.render('body', { # layout.htmlを使ったbody.htmlを描画
				layout:'layout',
				result1: result1,
				result2: result2
			});
		});
	});
});

db.open(function(){}); # dbをオープン。これしないと接続できなかった。。。
function getCollection1(callback) {
	db.collection('collection1', function(error, stock_info) {
		if( error ) console.log(error);
		else {
			stock_info.find({}, function(error, cursor){
				if( error ) console.log(error)
				else{
					cursor.toArray(function(error, results) {
						if( error ) console.log(error)
						else callback(results);
					})
				};
			})
		}
	});
}
function getCollection2(callback) { /* 以下同文 */ }

console.log('Express app started');
app.listen(3000);

layout.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
	<div id="header"><%- partial('header') %></div><!-- こういう風にヘッダも分けれる -->
	<div id="body"><%- body %></div><!-- 中身がここに書かれる -->
</body>
</html>

開発のポイントとしては、
php.jsが便利すぎる!
 phpの関数をjavascriptでどう書くか?というスニペット集。
 上記コードでは必要な関数を外部モジュール化して使ってます。
loggerのformatが不明だった
 node.jsが使っているConnectのサイトにAPIが!
DBへのアクセス毎にcallbackが入れ子していくので、とにかくアクセスは少なく!
 いやはやMongoDB使ってて正解でした。
 これがMySQLだったらどれだけ入れ子していったことか。
 もちろんjsdeferredとか使って同期処理させることはできますが。

これでモノは揃ったので、実際に実行してみます。

cd /path/to/service
node app.js

すると”Express app started”と出るので、実際に http://localhost:3000/ から確認してください。
ポートは自由に変えられます。

nodeのデーモン化を行う

一応以上までで実装は完了してるのですが、これをちゃんとサービスとして運営するにはあともろもろ必要ですよね。

一番てこずったのが、デーモン化。
なんかエラー出して止まっちゃったときに、自動で再起動してくれないと困る。
結論から言うと、npmでインストールできるforeverというライブラリを使っているのですが、右余曲折ありまして。

1. どうやらspark(configの設定、マルチコア対策)+upstart(デーモン化)+monit(監視)がテッパンらしい。
» Deploying Node Apps with Spark – How To Node – NodeJS
» Deploying Node.js With Upstart and Monit
2. sparkはすんなり入った。
3. upstartが動かん・・・ってrequirementがpython2.5以上で他にもCentOS5向けじゃなさそう・・・
» What are the requirements for building Upstart?
4. じゃあmonitから直でspark呼ぶか、ってnpmとか諸々$HOMEに入れてるから、monitから起動できない模様・・・
5. なんか他にも、spark2とかdaemon.nodeとかforeverとか色々あるな~
6. daemon.nodeは割と有名っぽいけど、作者が同じforeverが簡単そう!

cd /path/to/service
forever start app.js

7. 動いた!←イマココ

これで何とかデーモン化ができました。

実際にデプロイする

ちょっとポートを空けてうんぬんとか面倒くさかったので、ApacheからProxyさせました。
これだとloggerの:remote-addressにIPが出ないんですけどね・・・
近々改善予定。
» mitukiii.jp | Ubuntuにnode.js入れてApacheからProxyさせてみた

ついでにMongoDBの状況をmuninでチェックできるように、mongo-muninとやらを導入しました。

sudo ln -s /usr/share/munin/plugins/mongo_ops /etc/munin/plugins/mongo_ops
sudo /etc/init.d/munin-node restart

まとめ

いやいや、MongoDBもnode.jsも初めてだったので四苦八苦しました。
しかもnode.jsに関しては、まとまった日本語ドキュメントが無いという・・・
ていうか全体的にドキュメントが不足がち。
しかもまだ安定運営周りの方法が確立していないようで、色々議論されてました。
node servers, npm scripts, spark2 and monit
たしかにnpm start app.jsで管理できたら便利やなー

でもこれで、一通りnode.js周りのことが勉強できたし、足りないとこだらけなので貢献していければなーと思います。
久々の長文ありがとうございました。

今回リリースしたサイト↓
http://marketgeek.net/ja/

8maki IT, proposal, エンジニア, サービス , ,

マニアックな金融系サイトをnode.jsとMongoDBで実装してみた(概要編)

1月 19th, 2011

ちょっと半分趣味で、Marketgeekなるマニアックなファイナンス系のサイトを、意味もなくnode.jsとMongoDBで実装、リリースしました。

ただ、node.jsとMongoDBは結構はやりな割に、運用実績がすごく少ないようで、その技術の背景など含めてまとめてみました。
※なお、開発回りのことだけ知りたい方はこちらへどうぞ↓
» マニアックな金融系サイトをnode.jsとMongoDBで実装してみた(実装編)

node.jsとは何か?

node.jsは、サーバーサイドJavascriptのフレームワークで、簡単にWebサーバー等を実装することができます。

サーバサイドJavascriptは昔から注目されていましたが、node.jsの登場で一気にその流れが加速。
理由といえば、こういう類のモノにしては、びっくりするくらい速い!こと。
Google Chromeで採用していたV8をJavascrptエンジンに使っており、スピードUPが測れたとのこと。
いわゆる”Pythonより速い”らしいw

加えて、昨今HTML5も騒がれていますが、そうなるとサーバーへのリクエストが細分化されますよね?
そうすると非同期で処理するnode.jsはうってつけかも!という流れもあり(WebSocketとか)、今年はnode.jsの年!と言われるようになったのかも。

node.jsに関してはこの記事が詳しいです↓
» 2011年はサーバサイドJavaScriptの年になる - Publickey

MongoDBとは何か?

MongoDBとは、いわゆるNoSQL系のDBで、最新DBの中では一番注目されているオープンソースです。
今まで主流のDBであるRDBは、いわゆるExcelのようにまず列を決めてその属性群(スキーマと言う)をもったデータを行として入れていく、というスタイルのものでしたが、NoSQL系のDBではkey(IDのようなもの)でデータを管理し、そのデータの属性(スキーマ)は一定に決めなくてもよい、という柔軟なデータ構造を取れるため各所で使われ始めています。
スキーマレスDBとも言われています。

中でもMongoDBは、KVS(Key Value Store)だけでなく、複雑な検索を行ったり、インデックス張ったり、簡単にスケールさせられたり(サーバー増やしやすい)と、実用にかなった機能をもっているため広まってきています。

ちなみに実用実績としては、ForsquareがMongoDBを採用してるようです。
MongoDBと他のDBとの比較はこの記事が詳しいです↓
» MongoDB’s performance as compared to others

また、3月頭にMongoDBの商用サポートを行っている10genのイベントが東京であるらしいので興味ある方はどうぞ。
» Mongo Tokyo

なぜnode.js+MongoDBを使って実装したのか?

柔軟に金融情報を管理しようとするとスキーマ決めるのって難しいよねーっていう感じと、今後もっとリッチなVisualizationを作っていくためにAjaxとかWebSocketに適してるっぽいのがいいという勘で、MongoDBとnode.jsを選んでみました。

。。。正直あんま理由とかはないですけどねf^^;
ていうか、もともとこういうサイトを作る気合いはあったのですが、ただ技術的には何も新しい・難しいことはないので、だったら勉強がてらやってみよう!というノリでw

あと、オープンソースコミュニティにもそろそろ絡んでいきたいなーと思っていて、発展途上のnode.jsとMongoDBは最適だ思ったので。
開発して分かったのですが、まだまだ色々な問題点があるので、随時コミットしていきたい。

なぜMarketgeekを作ったのか?

日本のベンチャー界隈も「世界へ出ろ!英語化しろ!」とはやし立てられてますけど、実際世界と日本の違いをまともに話せる人、まともに比較できるリソースがあまりにも少なすぎるかなー、と。
それだと「とりあえず英語化して、海外視察して、ちょっと英語でプレゼンしてみて。」っていう感じで終わってしまう気がする。
そこで、具体的に何を目標にどうアプローチしていけばよいのか、思考のネタになるものを作ってみたかったとです。

加えて、逆に英語圏の人からアジアのベンチャーとかって、中々見えにくいのではないでしょうか?
2バイト文字ばっかだし。
もちろん中国とかシンガポールとかにたくさんVCは進出してきてある程度情報が海を越えてるかもしれませんが、英語で書かれた米メディアに比べて、アジアの英語メディアって圧倒的に少ない。
特に東南アジア。
これからはアジアの時代になると言われていますし、思った以上にニーズがありそうで、かつそれなりのポジションを築けそうだったのでホイホイ作ってみました。

まぁなにより作ってて単純に楽しかったです。
最先端の技術使って、興味のあるマニアックなもの作ってw
Naspersって2兆円もあるのか!フヒヒヒヒヒっwwwみたいなw

あ、ちなみにNaspersは@anritさんが作ったこの図が凄く分かりやすい。
Zynga、Groupon、Facebookの金の供給元ってすごいですよね。
naspers

とりあえず見てみてください。随時機能拡張予定です。
http://marketgeek.net/ja/

あと、要望とかコメントとかあったらtwitterへどうぞ⇒@marketgeek_net

技術編はこちら↓
» マニアックな金融系サイトをnode.jsとmongoDBで実装してみた(実装編)

8maki IT, proposal, エンジニア, サービス, 金融 , , , ,

GAE専用のフレームワーク「Kay Framework」のチュートリアルを試す

9月 5th, 2010

ちょっと大量のデータをやりとりするようなWebアプリケーションのプロトタイプを作って、色々データ分析したくなった。
そこで、ちょちょっとTwitterの分析系アプリを作ろうと思い立って、大量のデータを安価に、簡単にスケールさせられることからGAE(Google App Engine)に手を出した。

実は結構前からGAEを色々いじくってるんだが、いつもpythonのWebフレームワークとして使っているdjango(正式にはジャンゴと読むらしい)がGAEだと結構めんどくさそう。
バージョンも0.9と古いということでうまいやり方を探していいたところ、友人にKay FrameworkなるGAE専用の日本人作フレームワークを教えてもらったので使ってみた。

結論:かなり使いやすい!

Twitter OAuthとの繋ぎこみあたりなんか、デフォルトで仕組みが組み込まれてて、5分くらいで実装できた。
そこまで行くのに、チュートリアルとかいじりつつ、4時間ぐらいか。

» 1. Kay チュートリアル — Kay v0.10.0 documentation

日本人の方が作っているということで日本語ドキュメントもそれなりに整備されていて、かなり扱いやすかったのだが、manage.pyを使わず、Google App Engine Launcherを主に使って嵌った点があったのでまとめる。

1.2.4. GAE にアップロードする

デプロイしてwebを確認したら、下記のようなエラーが出た。
TemplateNotFound: myapp/index.html
どうやら、tenplateファイルをコンパイルする必要があるらしい。
実際、下記のコマンドを実行するとエラーは消えた。

python manage.py preparse_apps

1.7.2. 管理用スクリプト

データベースのマスタデータの挿入などの管理スクリプトの実行をどうするのか迷ったが、普通に下記のようにコマンドを打てば大丈夫。

python manage.py create_categories -h localhost:8080 --no-secure

これは、本番環境でも使える。
localhost:8080 -> xxx.appspot.com

OAuth

さて、実際にTwitter OAuthと連携させる段階。
どうやらKay FrameworkはOpenIDやOAuthにも既に対応しているらしい。

» Kay Framework で認証に Twitter の OAuth を使う方法

この通りにやったら本当にできてしまった。
一瞬。

これから簡単なTwitterアプリを作ろうって人は、Kay Frameworkが激しくオススメ!!
» kay-framework – Project Hosting on Google Code

※今までメディアブログを意識して文体は丁寧語でしたが、もっと気軽にブログを書きたいと思ったので、ゆるい感じの文体に戻そうかと。

8maki IT, proposal, エンジニア

今のiPadでできること・できないこと2

5月 20th, 2010

先日の記事、「今のiPadでできること・できないこと」が割と好評だったので、書き漏らしを追記します。

なんか半分以上、アプリの紹介になってしまいましたが・・・f^^;

画面の向き固定
デュアルディスプレイ化
日本の雑誌の購読
リモートデスクトップ/Linuxへのアクセス

画面の向きの固定

ipad2-hold

地味に知ってる人が少ない画面の向きの固定機能。
右側の側面に、音量調節スイッチの上にHOLDスイッチが付いてます。
iPhoneではHOLDができないため、寝転がると向きを変えてしまってすげー不便、と言う声は良く聞いていたのですが、iPadでは解決しています。

デュアルディスプレイ化

ipad2-dual

iPadをディスプレイとして使っちゃおうという使い方。
iDisplayというアプリを使えば、PCとWifiを通じて外部ディスプレイとして使うことができるようです。
Gizmodeで詳細なレビューがされています。
4月初旬段階ではまだまだバグが多いようですが、今ならもう直ってるかな?
あと、AirDisplayという拡張ディスプレイ用のアプリも、今週中くらいに登場予定。

日本の雑誌の購読

ipad2-maga

ちょうど昨日リリースされたマガストアというアプリが凄いです。
日本の雑誌をiPadでダウンロードして、読むことができます。
値段はだいたい、本誌の100円引きくらい。
AERA週刊NewsweekF1速報というマニアックな雑誌も扱っています。

中身はというと、雑誌のデータをまんま画像データとして入れた感じ。
見開きなどは見れませんが、いちいち本屋に行かずに買え、どこでも読むことができるので重宝しそうです。

リモートデスクトップ/Linuxへのアクセス

ipad2-remote

LogMeIn Ignitionというアプリを使えば、会社や家のPCのデスクトップにアクセスできるようになります。
¥3,500と割高ですが、かなり人気のアプリのようです。

また、iSSHというアプリは、LinuxへのSSH接続機能を提供しています。
これらを使えば、開発関連のタスクをすべてiPadで行うことができるようになるかもしれませんね。
もちろん、iPadのキータッチ入力だとプログラミングはしにくいので、BlueToothの外付けキーボードの接続をオススメしますが!

8maki IT, proposal, サービス

今のiPadでできること・できないこと

5月 17th, 2010

mixi日記には書きましたが、4/26~5/1まで、WWW2010という学会に参加するためにアメリカに行っておりました。
ついでながら、近くにApple Storeもあったため、iPadを何個か買ってきました。

一番初めに使った衝撃が、「ノートPCを持ち歩かなくて済む!」という印象でした。
ちょうど2週間くらい使ってみて、本当にノートPCの代替として使えるのか、現状何ができて何ができないのか、タスク内容に応じてまとめてみました。

※なお、画像は全てiPad本体でキャプチャしたものです。

タッチキー入力
メール/カレンダーチェック
Webブラウジング
本・雑誌・新聞
iPadアプリ
音声通話
カメラ
外部出力
その他

タッチキー入力

iPhoneみたいに結構めんどいのではないか?というのが、懸念として大きかったのですが、案外入力しやすいです。
というより、横に倒してキーボードを大きくすると、本当に普通のキーボードの8割くらいの速度で打てます。
縦の場合、持って両親指二本でタイプする感じですね。

ipad-key

メールを打ったり、メモを書いたりというときにはあまり不自由しません。
ただ、プログラミングといった細かい文章作業は難しいように思えます。
また、十字キーもないので、文章の途中選択、コピー&ペーストはiPhoneと同じくめんどい。。。

メール/カレンダーチェック

・メール
メールのリーダーもデフォルトで入ってるものがあります。
ローカルに保存したい(オフラインでも見たい)場合はこちら。

しかし個人的に、圧倒的にGmailをWebで見た方が使いやすい。
メールのスレッドもちゃんと折りたためたり、開いたりできますし。
メール操作はほとんど不満がありません。

ipad-mail

・カレンダー
こちらは逆に、Web版のGoogle CalendarのUIはクソでした。
なぜか、週での表示ができない。

カレンダーはiPad付属のカレンダーを使っています。
こちらのテクニック↓を使えば、複数のカレンダーを表示できます。
カレンダーも不満無し。
» iPadで複数のGoogleカレンダーを表示させる方法

ipad-cal

Webブラウジング

基本的に、普通のWebブラウザと変わらない感じです。
ただ、タブ(?)が9個までしか開かず、それ以上開こうとすると上書きされてしまうので注意が必要。
操作性、表示は全く問題ありません。
縦で表示するといくらか縮小されますが、横で表示するとほとんどのサイトが等倍で表示されます。

ipad-safari

また、PCで見ていて「あとで読む」記事をiPadに送る、という操作も便利です。
Evernoteでそういうプロセスがあるそうですが、完全にオフラインの状態だと中々開かなかったりしてちょっと不満。
そこで私は、pdfdownloadというサイトで、指定のサイトをPDF化してiPadに入れています。
結構めんどいっちゃめんどいですが、じっくり読めるので長文ブログやニュースは全部PDFに落としています。

本・雑誌・新聞

iBookやKindleアプリを使って、英語の本は基本的に読めます。
PDF化した本も、PDFリーダーアプリを使って読むことができます。
また、Wall Street JournalやTime、New York Timesなど、メジャーなアメリカの雑誌も購読することができます。

日本の場合、i文庫というアプリを使って青空文庫という、著作権切れの本を自由に読むことができます。
日本の雑誌はまだ見たことがありませんが、新聞では、産経新聞がiPhoneアプリを出ていて、それを2倍拡大することで結構読みやすくなっています。
追記: 日本の雑誌も読めるようになりました。 » 今のiPadでできること・できないこと2

ipad-mag

iPadアプリ

現状あまり良質なアプリがあるとは言えない状況です。
電子書籍(雑誌)、ゲーム、メモ帳(手書き可能)などがやはり主流となっています。

また、ややこしいことに、iPadアプリをiTunes経由で見るには米国アカウントが必要で、さらに米国アカウントだとクレジットカードを登録できないため、米国でしか見れない有料アプリは買えない状態です。
例えば、各ドキュメントアプリのKeynoteやNumbers(Excelのような表計算アプリ)も米国でしか見れないため、落とせない。。。
ただ、普通の有料アプリは、日本のアカウントでも検索してダウンロードすることができるので、重宝しています。
この問題は、日本発売と同時に解決されることでしょう。

こちらのサイトから、各カテゴリ毎のアプリランキングを見ることができます。
» iPadアプリのカテゴリ別ランキングリスト – もとまか日記

音声通話

iPadには電話機能は付いていませんが、マイクとスピーカーが内蔵されているので、Skypeアプリ(iPhoneアプリ)を使えば不自由なく音声通話も行えます。
この際なので、Skypeのクレジットも買ってしまいました。
20円/分くらいで携帯電話にも通話ができます。
ただ注意が必要なのが、3G回線ではSkypeは使えないようです。

» Skype – Skype 日本語ブログ – Skype for iPhoneの3G通話対応について

カメラ

標準装備はされていません。
なんか上部にMacBookと同じタイプのカメラっぽいのが付いているんですが・・・
いずれファームウェアかなんかがUpdateされると使えるようになるのか?
追記: 輝度センサーらしいとのこと。

ちなみに、Camera for iPadというアプリを使えば、iPhoneで取った写真・動画を無線経由でiPadに表示する、ということはできるみたいです。

外部出力

iPadのオプションツールとして、VGAアダプタがあります。
要はiPad内のコンテンツを、出力するために必要なコネクタです。
ただ、出力には注意が必要。
基本的に表示できるコンテンツは、以下に限られるようです。

 ・ビデオ、Youtube、Safariで表示しているビデオ
 ・写真(スライドショー)
 ・Keynote
 ・Safari上のWebページ(アプリ使用)

» iPad:iPad Dock Connector – VGA アダプタの互換性について

その他

・ドキュメント編集:
OfficeのWord、Excel、Powerpointのようなアプリを、AppleがPages、Numbers、Keynoteというアプリで、それぞれ$10くらいで販売しています。
ただ、アカウントの問題からまだ購入できていません。
Google Docsは問題なく扱えます。

・印刷
デフォルトの機能としては、まだ無いようです。
下記記事を見るといずれ実装されるみたいですが・・・
とは言え、ネットワーク経由で印刷できるアプリはいくつかあるみたいです。
» アップルのS・ジョブズ氏、「iPad」への印刷機能実装を肯定か–米報道

・ラジオ
radikoというiPhone用のアプリを使って、FMラジオも聞くことができます。
バックグラウンドでの再生もできて便利。(Safariのストリーミングページを立ち上げる)

まだまだ未知数なところが多いiPad。
日本発売が楽しみですね。

続きを書きました→今のiPadでできること・できないこと2

8maki IT, proposal, サービス

グラフだけじゃない、Data Visualizationフレームワーク集

1月 19th, 2010

(8 free Data Visualization frameworks not only for charts [en])

相変わらずData Visualization関係で調査・開発を行っているのですが、その中でJavascriptのライブラリ・フレームワークを探す時間も多いです。

» 20 Fresh JavaScript Data Visualization Libraries

上記記事のようにまとめ記事が結構あって助かるのですが、ほとんどがCharts(グラフ)のライブラリなんですよね。Chartsも線グラフか、棒グラフか、円グラフか、、、みたいにライブラリ化される主要なグラフは8種類くらいしかなく、面白くない。
適切なデータに対して適切なVisualを関連付けるわけですから、もっと多くのVisualが考えられてもいいはず!

そこでChartsに限らない、もっと根本的にData Visualizationを扱っている有名どころのフレームワークをリストアップしてみました。

SIMILE Widgets Exhibit

dv-js-library-simile

MITのメディアラボがリリースしているFaceted Search用フレームワークです。HTMLを拡張したテンプレート言語を用いて、簡単にFaceted Searchと、検索結果のリッチなVisualizeを可能にしています。現在、リスト、テーブル、地図、Timeline、TimeplotといったVisualに対応しています。タブなどでVisualを切り替えられるので、ユーザーの目的にマッチした検索機能を提供することができます。

SIMILE Widgetsでは、他にもTimelineや、TimeplotRunway(Coverflow)などのVisualもAPIとして個別に提供しています。

» SIMILE Widgets Exhibit – US President Search DEMO

ProtoVis

dv-js-library-protovis

ProtoVisはStanfordのVisualizationフレームワークです。これは巷のライブラリと違い、グラフや地図、といった単位を1つの単位として扱わず、線や面、点といったもっと細かい部品単位でVisualを作成しています。どちらかというとProcessing.jsに近いかも。たくさんのDEMOが載っているので、それらを参考にかなり自由度の高いVisualを作成することができます。

» ProtoVis DEMO

Prefuse Flare (Flash)

dv-js-library-prefuse

Prefuse FlareもData Visualizationのフレームワークとして有名です。Prefuseは、Javaのフレームワークでしたが、今回Flashに対応しました。こちらも豊富なVisualを用意しており、SIMILE同様データ構造をしっかり設計しているので柔軟性が高く、Visualの切り替えや様々なVisualを拡張することができるようになっています。

また、Flashならでわの気持ちのいいインタラクションも高評価です。

» Flare DEMO

Style Chart

dv-js-library-style-charts

こちらは、javascriptでVisualのリクエストを投げるとサーバー側で画像を生成し、それを表示するというフレームワークです。Galleryを見る限りかなり豊富なVisualを扱えるようです。画像だからってアニメーションやアクションが行えないわけではなく、そこにもちゃんと対応しています。扱っているライブラリが少ない、レーダーチャート(スパイダーチャート)も用意している点がいいです。

» Style Chart Editor(DEMO)
» Style Chart Gallery

CanViz

dv-js-library-canviz

有名なVisualizationフレームワークであるGraphvizのJavascript版です。主にグラフ構造のデータを描画するのに適しています。ただ、DEMOを見る限り、アニメーションやイベントの設定ができないようで、本当にVisualizeのためだけのフレームワークのようです。

» CanViz DEMO

Axiis (Flex)

dv-js-library-axiis

こちらはAdobe FlexのVisualizationフレームワークです。インタラクティブなアクションがかなりリッチに作りこまれています。下記のBrowser Statisticsは一部で話題になりましたね。かなり自由度の高いフレームワークのようです。

» Axiis – Browser Statistics DEMO

Infovis

dv-js-library-infovis

こちらもグラフ構造のデータ描画ライブラリとして有名です。フレームワークではないので個別のVisualを利用する形になります。グラフ構造しか扱えないのですが、この手のライブラリとしては珍しく、Weighted Graph(ノード間のパスに重みが付いている)/Directed Graph(パスに方向がある)、の描画にも対応しています。現時点で5種類のグラフ系、ツリー系のVisualがありますが、どれもよくできています。

» Infovis DEMO

RGraph

番外ですが、HTML5用のグラフ生成ライブラリも登場しています。HTML5なのでまだまだ本格導入は難しいかもしれませんが、相当クオリティ高く仕上がっており、今後が楽しみなライブラリです。

» RGraph DEMO

8maki IT, proposal, survey, テクノロジー, デザイン , , ,

モノと関連データの関係性-Semantic Webによるスキーマ定義-

12月 13th, 2009

前回、モノをある切り口で捉え、それを適切な表現方法にあてはめて考えるアイディア出しスタイルと、モノの関連データにVisualizationをあてはめるというData Visualizationのスタイルは、脳の構造・プロセスが同じで、分かりやすいのではないか、という記事を書きました。

» アイディアの発想法とData Visualizationは同じ構造なのではないか?

そこで今回は、上記事で言及している”モノとその関連データ”とは何なのか、深く掘り下げてみたいと思います。

関連データとはプロパティである

「データから自動でVisualizationを行う」という取り組みの中で、どのようにデータを扱えばよいかという問いにぶちあたり、最近RDFおよびRDF Schema、Dublin Coreあたりを調べています。

RDF とは、主語・述語(プロパティ)・目的語(値)という3要素を用いてデータの関係性を表現するWeb上の枠組みのことです。例えば、「New Yorkの略語はNYである。」という例文は下記のようなXMLで表現されます。

<rdf:RDF
 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
 xmlns:dcterms="http://purl.org/dc/terms/alternative">
  <rdf:Description rdf:about="urn:states:New%20York">
    <dcterms:alternative>NY</dcterms:alternative>
  </rdf:Description>
</rdf:RDF>

この例で、主語・述語・目的語はこのような意味になります。↓
主語: New York というモノが存在し、
目的語: NY という関連データがあり、
述語: 略語 という主語と関連データの関連性を意味している。

これだけだとちょっと分かりにくいかもしれませんが、表は、基本的に主語・述語・目的語の構造に落とすことができます。下記は宇多田ヒカルのWikipedia Infoboxの例です。「宇多田ヒカルの出生名は宇多田光である」ということを表しています。

utada

この構造は、前回の記事で示した、モノ⇔関連データ⇔Visualizationの構造に合致しています。

ここの述語、要はプロパティの部分とVisualizationをうまくひもづけるルールを定義できたら、「扱うデータからVisualizationを発想する」ことができるのではないでしょうか。さらに言えば、ルールさえしっかりしていれば、データとプロパティさえ定義すると自動でユーザーが求めるVisualizationを生成することができるようになります。

規格化されたプロパティの定義

ただ、適切なプロパティと適切なVisualizationをひもづけるには、プロパティの規格化が必要です。色々な人が、バラバラのプロパティ名を用いたり、統一化されていないカテゴリをプロパティとして付与したりすると、自動化が非常に困難になります。

そこでRDFでは、Dublin Coreというメタデータ記述語彙集を用いることが推奨されています。Dublin Coreには、TitleやCreatorといった15の基本要素と呼ばれるプロパティ候補があり、これらを用いることで、情報に共通化されたメタデータ、プロパティを付与することができるようになります。

さらにこれを細分化したDCMI Metadata Termsというものも存在します。DCMI Metadata Termsでは、50個以上のプロパティが定義されています。 先程の「略語」という述語(プロパティ)は、DCMI Metadata Termsのdcterms:alternativeというプロパティに置き換えることができます。

考察

このようにWeb上でデータを構造化する動きは、Semantic Webという流れの一つです。Semantic Webとは、コンピュータが理解できるように、Web上の情報に意味を付与しよう、というプロジェクトです。Data Visualizationで扱うデータをSemantic Webに合わせて構造化する方法は、現状は、割と有効だと思われます。

ただ、Semantic Webは分かりにくい上に考え方が古いので、中々浸透していません。Data Visualizationを主軸に考える場合、もっと別なデータの構造化・規格化手法を考える余地は大いにあるとは思います。

参考

こちらに、Semantic Webの概念図が載っています。コンテンツにメタデータの付与→メタデータの語彙規格化→語彙の意味把握(Ontology)→論理式を用いて結論を導く(Rules,Logic Framework)→結論の証明(Proof) という流れはいい線いっている気がしますが、先は長そうですね。

8maki IT, proposal, survey, テクノロジー, デザイン , , ,

アイディアの発想法とData Visualizationは同じ構造なのではないか?

11月 30th, 2009

(Data Visualization is the same as how to organize ideas [en])

先日、元サイボウズでアメリカでLUNARRを立ち上げられた高須賀さんにお会いしました。そこで、最近研究している Data Visualization について発想が沸いたので書き残します。各データの種類(スキーマ)から自動で適切な Visualization 方法を選択して表現する、という研究です。

高須賀さんのお話

「アイディアをひねり出すとき、いきなりすごいアイディアを考えるよりも、切り口を見つけてそこから発展させた方がいい。アイディアと切り口のバランスが取れた位置が一番エネルギーがある。」ものすごく簡単にまとめるとこういうお話でした。

つまり、ものごとを構造化してとらえ、ツールを使って着想を得た方がアイディアを出しやすい、ということ。

例: 新しいレーザーを考える。レーザーは点であり直進する。点の反対は面で、直進の反対は曲がる。これらを2次元グラフにプロットし、各象限に何が当てはまるか頭をひねる。面・曲がるという象限、つまりどこにおいても光を反射させ、面に映し出すという切り口から、スクリーンの前に置かなくてもよいプロジェクターというアイディアが生まれた。

このとき、切り口からアイディアをひねるために用いたツールが、高須賀さん曰く2×2というもの。要は2軸ある2次元グラフで昔私もマトリックスとも呼んでいました。構造化してアイディアを得る・まとめる方法は以下の高須賀さんの記事が分かりやすいです。

» 事業を考える切り口 – Toru Takasuka の起業・経営ブログ

» 新しい concept のはじまり – Toru Takasuka の起業・経営ブログ

松岡正剛の編集学校で教える編集術

こういった発想の訓練、実は以前にも受けたことがありました。松岡正剛の編集学校で体験授業です。

割と戦略コンサルのケーススタディ訓練に似ているのですが、MECEに限らず、もっと自由に発想する、ということが目的で楽しかったのを覚えています。そこでいただいたパンフレットに、6個のツールが載っていました。

edit1

1. Combination (一種合成型)
2つのものを合成して新しいアイディアを生み出す。

2. Triple Jump (三間連結型)
ホップ・ステップ・ジャンプ型で発想を展開。大・中・小や過去・現在・未来などの切り口もあり。

3. Branching (二点分岐型)
一つのものを2つに展開。この例ではブランドを切り口に展開した。

4. Trinity (三位一体型)
三位一体型、3点セットで考える発想パターン。3Cなどが代表例かも。

5.1 All Around (二軸四方型1)
Branching型の枝が2つ増えて、四方へと分岐する発想法。

5.2 2×2 (二軸四方型2)
2軸を決めてそれぞれのマスに何が入るか考える。マトリックス型。

※英語は勝手に私が変換したものです。

edit2

Data Visualizationとの関係

さて、本題ですが、切り口をツールにあてはめアイディアを得るという発想法と、Data Visualization は、頭の中では同じ構造で処理しているのではないか?というのが今回のパラダイム・シフトでした。

edit3

どちらも「分かりやすく考える」「分かりやすく表現する」ということで、頭の使い方が非常によく似ているような気がします。Data Visualization というと Computer Science チックですが、何か考えを図にまとめるときのことを考えると分かりやすくて、まず扱う対象があって、それを一つの側面で切ったデータ群があり、それをどう Visualize するか?というのは、高須賀さんのおっしゃる構造的な思考と同じプロセスを踏むのではないでしょうか。

普通 Data Visualization を調べる場合、どういった Visualization があるのか、どうプログラミングで表現するのか、といったことに目が行きがちになります。オライリー本の”Visualizing Data“もアルゴリズム中心の本でした。

そこを、扱うデータから Visualization を発想するというパラダイムに変換することで、おもしろい表現ができるだけでなく、説得力のある Data Visualization 手法を考案できる気がしました。

参考までに、こちらの図↓は様々なチャートを目的別に一覧表示しています。チートシートとして使うと便利かも。

» Chart Suggestions – A Thought Starter

p.s.

オフィスにお邪魔した際、VentureBEATの勝屋さんもいらっしゃいました。Blogに写真を載せてさらにリンクまで張っていただきました。ありがとうございました!最強のコネクターと言われるだけのことあって、超人懐っこいでしたw

» 人のつながりは無限(∞)につながる – 勝屋久の日々是々

  • Ben Fry, 増井 俊之 (監訳), 加藤 慶彦
  • 定価 : ¥ 3,780
  • 発売日 : 2008/12/01
  • 出版社/メーカー : オライリージャパン
  • おすすめ度 : (6 reviews)
    可視化の一つの手段としてProcessingの概要を知りたい人に
    情報の可視化入門
    目からウロコが。。。
    日本人の本より読みやすい
    既存のマッシュアップAPIを使うのとは違ったWeb情報の楽しみ方

8maki IT, proposal, エンジニア , , ,