銀行口座をVisualize
ビジュアライジング・データ ―Processingによる情報視覚化手法
を読んで「何か身近に数字を絵にして試せるものはないかなー」と思っていたのですが、自分が使用しているオンラインバンクでCSVで取引履歴が取得できたので、Processingで試してみました。
とりあえず、入金/出金(振込とか)を色分けして正方形の面積で金額の大きさを表しているだけなのですが、正方形どうしが重なり合わないようにしたり、以外と面倒な事をやっています。作ってみると、何をしたいのか若干分からなくなってますね。。。コード書く前にもうちょっと考えときゃよかった。次は時系列表示にしてみよかな。。
Ubiquityを使って英単語を調べる
FireFoxのプラグインでUbiquityというのがあります。他のWebサイトの機能をコマンドとして登録して使用できる、User MashUpを可能にするFirefox上の環境です。将来的にはFirefoxのURLバーに実装されるかも知れません(URLをWebのドキュメントがある場所であると考えるのではなく、Web上のリソースに対するリクエストような考えると割と自然な進歩?)。
ブラウザの新境地? Ubiquityが変える衝撃のブラウザ体験 (1/2):
http://www.itmedia.co.jp/enterprise/articles/0808/31/news003.html
まあ、そういうわけでどういうものかちょっと気になって見てみて、最近APIが公開されたiknowという英語学習SNSの単語検索を呼び出すコマンドを作成してみました。
コード
CmdUtils.CreateCommand({
name: "iknow_search",
icon: "http://example.com/example.png",
homepage: "http://example.com/",
author: { name: "xxxx", email: "xxxxx@gmail.com"},
license: "GPL",
description: "search words or pharase in iknow",
help: "iknow",
takes: {"input": noun_arb_text},
preview: function( pblock, input ) {
var baseUrl = "http://api.iknow.co.jp/items/matching/${word}.${format}";
var tempUrl = {"word":input.text,"format":"json"}
var params = {include_sentences:"true"};
pblock.innerHTML = "";
jQuery.getJSON(CmdUtils.renderTemplate(baseUrl,tempUrl),params,function(resp){
jQuery.each(resp,function(i){
pblock.innerHTML += this.responses[0].text + "<br/>";
pblock.innerHTML += this.sentences[0].text + "<br/>";
pblock.innerHTML += this.sentences[0].translations[0].text + "<br/>";
});
});
},
execute: function(input) {
var baseUrl ="http://www.iknow.co.jp/items/search?keyword=${QUERY}";
var tempUrl = {"QUERY":input.text};
var urlString = CmdUtils.renderTemplate(baseUrl, tempUrl);
Utils.openUrlInBrowser(urlString);
}
});
Ubiquityコマンドの作成
Ubiquityコマンド作成の情報は、現状下記のリンクかソースを見るしかないくらい少なく、しかも上記のコマンドはまだプレビューで訳を表示しEnterキーでiKnowのサイトで該当のアイテム検索結果を表示するのみですが、行数の割には用を足しているかと思います。Ubiquity導入後、Command Editorを使用して上記のコードを貼付ければ使用できます。
Labs/Ubiquity/Ubiquity 0.1 Author Tutorial
https://wiki.mozilla.org/Labs/Ubiquity/Ubiquity_0.1_Author_Tutorial
上のチュートリアルに載っている事ですが簡単に作り方を説明したいと思います。
CmdUtils.CreateCommand({
name: "hello-world",
execute: function() {
displayMessage( "Hello, World!" );
}
})
ubiquityコマンドは、cmd_<コマンド名>というfunctionがあればそれを参照するのですが、普通はCmdUtils.CreateCommand()というユーティリティ関数を使用して作成します。上記のコードはその最も単純な例です。
CreateCommandに渡すオブジェクトのnameとexecuteというプロパティに、それぞれコマンド名の文字列と実行する関数を指定します。execute(コマンドの実行)はUbiquityのコンソールにコマンド名を入力しEnterを押した時点で実行されます。displayMessage()を実行すると、MacならGrowl,WindowsならUbiquityのコマンドの下に引数に与えた文字列が表示されます。
CmdUtilsにはコマンド作成以外にも、ユーザーがブラウザで選択中の箇所にテキストやHTMLを挿入(setSelection),IPから位置情報を取得(getGeoLocation),文字列のテンプレート処理(renderTemplate)などコマンド作成を楽にする関数が用意されており、これまたドキュメントは少ないのですが、ソースはこちらで見る事ができます。
プレビューの表示
Ubiquityではユーザーの入力に応じて出力されるプレビューウインドウがあり、こちらはCreateCommandに渡すオブジェクトのpreviewプロパティに、HTML文字列か関数を指定する事で実現できます。下記は冒頭のコマンドでのpreview部分です。
preview: function( pblock, input ) { var baseUrl = "http://api.iknow.co.jp/items/matching/${word}.${format}"; var tempUrl = {"word":input.text,"format":"json"} var params = {include_sentences:"true"}; pblock.innerHTML = ""; jQuery.getJSON(CmdUtils.renderTemplate(baseUrl,tempUrl),params,function(resp){ jQuery.each(resp,function(i){ pblock.innerHTML += this.responses[0].text + "<br/>"; pblock.innerHTML += this.sentences[0].text + "<br/>"; pblock.innerHTML += this.sentences[0].translations[0].text + "<br/>"; }); }); },.....
previewは第一引数にpreviewエリアに表示するDOM要素を、第二引数にユーザーから渡されるコマンドの引数をとっています。コマンドの引数はtakeプロパティで、どのnoun_typeで取得するか指定できます。
takes: {"input": noun_arb_text},
引数データの扱い
noun_typeは引数の制約や、コマンドの補完機能(例えば日付データが入力されたら、日付データを引数にとるコマンドをUbiquityがサジェストする)に使用され、下記のようなnoun_typeがあります。また、CmdUtilsを使用してカスタムのnoun_typeを作成する事ができます。
- noun_type_arb_text
- noun_type_date
- noun_type_language
- noun_type_people
- noun_type_place
- noun_type_tab
noun_typeのソースは下記で確認する事ができます
nountypes.js
一方、コマンドの引数としてpreviewやexecute(の第二引数)に渡されるオブジェクトは、下記のようなプロパティを持ちます。
- inputObject.text // 文字列
- inputObject.html //タグを含む整形されたHTML
- inputObject.data // 文字列以外のnoun_typeのデータ
- inputObject.summary // 長い文字列の要約版
iknow-searchのpreviewで行っているのは、コマンドの引数から(テンプレート機能を使用して)URL文字列を組み立て、JSONでリクエストを取得、preview用のDOMに結果を反映するという一連の処理ですが、uqibuityではjQueryが使用できるため簡単に実装できます。
また同様に、コマンド入力後Enterを押した時に実行されるexecuteでは、Utils.openUrlInBrowser()を使用してブラウザで該当のURL(検索結果ページ)を開くようになっています。
まだまだ発展途上(というかできたばかり)のコンセプトですが、Webの機能をお手軽にコマンドにできるのはこれから重宝しそうです。
Processingでグラフ
前から少し気になっていたProcessingという言語について、ちょうど本屋におもしろそうなオライリー本が出ていたので買ってみました。
ビジュアライジング・データ ―Processingによる情報視覚化手法
簡単な例としてグラフの作成があったので、自分でも日本の人口統計を使ってグラフを書いてみました。

Population growth in Japan
Processingを一言で説明しようとすると、Javaの描写機能を使用しやすいインタフェースで提供する言語環境(なのかな?)でしょうが、なんでProcessingに興味をもっていたかというと、これを使用した作品(っていうのがいいですね)に興味深いというか斬新なものが多かったからな訳です。
MusicBox: a truly powerful visualization of your music library:http://www.crunchgear.com/2008/12/15/musicbox-a-truly-powerful-visualization-of-your-music-library/
音楽のライブラリを可視化するソフト。ファイルのメタデータ(作者やジャンルなど)のみではなく、実際の音声データをスキャンしてマッピングする。
Aligning humans and mammals:http://benfry.com/infoseed/
人間とほ乳類の遺伝子配列をならべて描写した画像
Base26:http://toxi.co.uk/p5/base26/
英語の言葉同士の慣例性を表現した図。
仕事ではほとんどCRUDなWEBアプリケーションしか見ないのですが、こういうデータの重要性もさることながらどう見せるかでどれだけ印象や理解度が変わるかという事を考えるとおもしろい。色々遊んでみようと思います。
2月の読書リスト
三月に入ってしまったが、気になった本のレビューは後でするとして、二月分の読書リストをとりあえずあげてみる。
リスク〈上〉―神々への反逆 (日経ビジネス人文庫)
本を読む本 (講談社学術文庫)
図解! あなたもいままでの10倍速く本が読める
Ruby by Example: Concepts and Codeオン・ザ・ロード (世界文学全集 1-1) (世界文学全集 1-1) (世界文学全集 1-1)
モテたい理由 (講談社現代新書 1921)
上達の法則―効率のよい努力を科学する (PHP新書)
ウェブを変える10の破壊的トレンド
人々はなぜグローバル経済の本質を見誤るのか使える!確率的思考 (ちくま新書)
明日の広告 変化した消費者とコミュニケーションする方法 (アスキー新書 045) (アスキー新書 45)
コンテナ物語ーー世界を変えたのは「箱」の発明だった
最短で結果が出る超仕事術 (講談社BIZ)
数学入門〈上〉 (岩波新書)
ブランド・エンジニアリング
Icon: Steve Jobs, The Greatest Second Act in the History of Business
スティーブ・ジョブズ-偶像復活
学校がアホらしいキミへ
「へんな会社」のつくり方 (NT2X)
決算書の暗号を解け! ダメ株を見破る投資のルール
「1秒!」で財務諸表を読む方法―仕事に使える会計知識が身につく本
貧乏人のデイトレ 金持ちのインベストメント―ノーベル賞学者とスイス人富豪に学ぶ智恵
RESTful Webサービス
JavaScript 第5版
勝間和代のインディペンデントな生き方 実践ガイド
なぜRSSリーダーは使われないのか?
定期的にチェックするサイトについて、
もっとも多かったのは「4~5」で33.8%(112人)、それに次ぐのは「2~3」で32.6%(108人)と、2~5で6割以上という結果であった。11以上のサイトをチェックする回答者は、12.1%(40人)であった。
さらにそのチェックの仕方であるが、「お気に入り」からサイトチェック9割以上、RSS リーダー派は0.6%らしい。
なぜRSSリーダーは使われないか?
こうした結果について、30秒くらい考えた。なぜRSSリーダーは使われないのか?
- 閲覧するサイトの量が少ない
- 質的に目新しいものではない
閲覧するサイトの量が少ない
現時点で、何かしら動機や興味によって一日100を超えるようなサイトをチェックする人は少ないだろう。仕事で猛烈に情報収集をする必要があるなど、なにかブートストラップ的なものがなければ、RSSリーダーを使用しようとはしないのではないのか?
質的に目新しいものではない
RSSリーダーの恩恵を受けている人にとっては、膨大なサイトをフォルダやタグを用いて整理できたり、新しい情報を順に(リニアに)消化できるという機能は、それなしではネットサーフィン(という言葉はあんまり好きではないが)が苦痛になってしまうだろう。
が、
多くの人にとっては、Webサービスを必要とするのは、「新しい機能」や「新しいコンテンツ(デザインも含めて)」 である。典型例で言えば、オンラインショッピングや動画配信、また有名人のブログやSNSなどだろう。
RSSリーダーはこうした機能やコンテンツベースのソリューションではなく、膨大な「量」をこなすためのソリューションだ。
別に全ての人が毎日膨大な情報を吸収する必要があるとは思えないが、すごくメタ(ボリックではない)なレベルでは、量から質への転化というか、多くの情報を吸収するということは新しい時代の価値観の形成するベースであるような気がする(それを共有することも)。
RSSリーダーの使用率が低いのは前々から知っていたが、社内での会話からIT業界の中でも使っている人が少ないことに愕然とした今日このごろでした。
投信の自動積立 – 最適な日付は?(国内株式Index型)
素人の投資信託で書いたように、先月から4分散で投信の自動積立を始めたのだが、
「自動積立日って何日にすればよいのだろう?」 と思っていたら、
金融の世紀というブログで、投資信託の積立日というというエントリがあった。
上記で使っているデータが2003年からのものだったので、投信の設定日から今月までもうちょっと詳しく調べてみた。(ちなみに自分がkabu.comで買っているトピックスオープンで調べた)
具体的な期間は、投信の設定日の1990年3月-2008年2月
これを見ると、
- 11-14日あたり
- 22-25日 あたり
が積立日としてねらい目のように思える。
もっと確実に言えそうなのは、「月初と月末は(比較的)高い」
まあ安い高いといっても、最大0.7-0.8%の差をどう見るかという事でしょうが、この差が信託報酬より大きくなっているのも事実…
ちなみに、なぜか知らないけど自分は13日に設定していた(まぐれ?)
キーワードで検索した時のgoogleランキングを調べるrubyスクリプト
「SEO対策の有無をチェックするために、あるキーワードで検索して対象のWebサイトが何位くらいか調べる 」 という事をちょっと前仕事でやっていたのだが、数をこなさなければならないのと、対象のWebサイトが多かったのでバッチコマンドっぽく書いてみた
使い方
google_rank.rb [-l | --limit 検索数 ] 検索文字列
例えば、”bit sized”という文字列で30位までのURLを取得しようとすると
google_rank.rb -l 30 bit sized
とすればよい、結果は下記のようになる
google_rank.rb -l 30 bit sized
1,bitsized.wordpress.com/ 2,bitsized.wordpress.com/.../ 3,en.wikipedia.org/wiki/Drill_bit_sizes 4,www.madison.k12.wi.us/toki/teched/codrills.htm 5,www.imao.us/archives/000960.html 6,www.theoriginalbitfit.com/ 7,bitesizestandards.com/ 8,www.bitesizebonus.com/ 9,www.japaninc.com/article.php?articleID=521 10,www.crypto.rub.de/imperia/md/content/ 11,home-and-garden.become.com/ 12,www.springerlink.com/index/74HV57D1UH95PHHL.pdf 13,www.hardforum.com/showthread.php?t=967973 14,www.hydracore.com/drill_bit_sizes.htm 15,dic.yahoo.co.jp/dsearch?enc=UTF-8&p=bit& 16,atlaspen.com/search/?item=503438&pv=1 17,www.goodexperience.com/blog/archives/000633.php 18,www.wired.com/wired/archive/15.03/snackminifesto.html 19,search.luky.org/linux-kernel.2001/msg05005.html 20,www.modulaware.com/mdlt76.htm 21,www.patentstorm.us/patents/5501020-description.html 22,answers.yahoo.com/question/ 23,www.hechinger.com/hardware/tools/ 24,www.gfl-hand-tools.com/product-word/209/Bit-Sets.doc 25,bobmay.astronomy.net/misc/drillchart.htm 26,www.theoriginalbitfit.com/v4/go.gnf?s=bitfit& 27,thatgrrlca.blogspot.com/2007/ 28,www.dri.co.jp/auto/report/wf/wfmts340mb07.htm 29,www.ttora.com/forum/showthread.php?t=29091 30,docs.sun.com/app/docs/doc/
準備
HTMLのパースにhpricotというライブラリを使用しているため、あらかじめ準備しておく必要がある。”gem install hpricot”でインストールできる
ソースコード
google_rank.rb
require 'rubygems' require 'optparse' require 'hpricot' require 'open-uri' require 'cgi' # class definition class GoogleRank def initialize @str_query = "" @base_url = "http://www.google.co.jp/search?hl=ja&q=" @suffix_url = "&lr=" @srch_url = "" @srch_limit = 20 @current_number = 0 end def encode_query @str_query = CGI.escape(@str_query) end def cat_query if @current_number == 0 @srch_url = @base_url + @str_query + @suffix_url else @srch_url = @base_url + @str_query + @suffix_url + "&start=" + @current_number.to_s + "&sa=N" end end def get_rank doc = Hpricot(open(@srch_url)) # get the <div> that contains search result res = doc.search("//div[@id='res']") # <span class="a">hoge.com/target.html</a> spans = res.search("//span[@class='a']") spans.each_with_index{ |span,i| page_info = CGI.unescape(span.inner_html) #puts "page_info:" + page_info page_url = page_info.split(/ /) # trims html tags item_url = page_url[0].gsub(/<[\/]*[a-z]+[\/]*>/,"") puts (@current_number + i + 1).to_s + ","+ item_url } end def search_rank self.encode_query while @current_number < @srch_limit self.cat_query self.get_rank @current_number += 10 #puts "current_number=" + @current_number.to_s end end attr_accessor :str_query attr_accessor :srch_limit end # bat command process rank = GoogleRank.new opt = OptionParser.new opt.on('-l VAL','--limit VAL'){ |v| rank.srch_limit = v.to_i } opt.parse!(ARGV) ARGV.each {|i| if rank.str_query == "" rank.str_query = i.to_s else rank.str_query = rank.str_query + " " + i.to_s end } rank.search_rank
素人の投資信託
一月に読んだ本に影響され、ボーナスも余っているので、投信でもはじめようと思いたった
ウォール街のランダム・ウォーカー 株式投資の不滅の真理
お金は銀行に預けるな 金融リテラシーの基本と実践 (光文社新書)
マネーと常識 投資信託で勝ち残る道
上記の本を租借すると、「金融サービスのコスト」という一つのメッセージが伝わってくる。
つまり、
- 銀行に預ける -> 潜在的にインターバンクとの利ざやを銀行に取られる
- アクティブ運用 -> 信託報酬、アクティブ運用に関わるコストが受取り利率に跳ね返ってくる
という。
実際の運用方針は
お金は銀行に預けるな 金融リテラシーの基本と実践 (光文社新書)
に習って、
- 国内株式のインデックスファンド
- 海外株式のインデックスファンド
- 国内債券のインデクスファンド
- 海外債券のインデックスファンド
を1万円づつノーロードの毎月積み立て型で購入し、追加で相対的に割安になっていると思われるファンドを毎月選んで増額する。
まあ、
- 経済・金融の知識がない素人が「相対的に割安になっていると思われるファンド」 を選べるか?
- 自社株も毎月引き落とし(3万くらい)なので、上記の毎月5万って結構痛い
という問題点は残るものの、
- 「金融の知識と経済状況に対して興味を持ち続ける 」モチベーションとなる事を期待しよう。
- ボーナスの時に一気につぎ込むのではなく、同じつぎ込むにしても毎月の投資額を増やす(ドルコスト均衡法?)
という事にしよう。
半年後くらいに結果を一回レポートします。
1月の読書リスト
2008年から月10冊くらい読書をしようかなと思う。
というわけで一月分のリストですと
別エントリでレビューしてるので、そちらを参照
以前、仮説思考という本を読んだのだが、実際の仕事で仮説思考をどのように生かすのかがずっと課題だった(今でも悶々と悩んでいる時間はあるが)。B型の凝り性の人に、A型の細かい人に、CAPS分析のAnalyzer型の人におすすめ
これはMUSTだと思う。著者(勝間和代)のファンになってしまった
一つ上の本つながり
これまた、勝間和代つながり。PCを使ったHack集かなと思いきや、もうちょっと本質的な話で、膨大な情報があふれる中で、どう向き合って、情報の量を質に添加していくかという感じ
小林秀雄は頭と心にくる
アップルはすごいすごいというだけでなく、結構冷静にどこが違うのか、日本のメーカーはなぜiPhoneのような魅力的な製品をなぜ作れないのか語っている。ひと味違うサービスや、ビジネスモデルを考える時に参考になるかも
判断の仕方:朝11時までメールは読むな!
題名からして、ハウツー本っぽいと思う人が多いだろう。
一言で言えば、
「決断する(判断する)」するための判断材料
をケーススタディを用いて、シンプルに分かりやすく説明している。
朝11時までメールは読むな! 「後悔しない決断」の技術 (講談社BIZ)

決断や判断を下すために必要な情報とはいったい何だろうか?
本書は極めて簡潔に、下記の 3つを説明しているのではないだろうか。
- 決断する事の性質
- 決断する側の性質
- 決断する際の方法論
まず、決断をする側の人間にはいろいろなバイアス(先入観)がある。それを認識する事から始まる。
- 結果によって決断を評価してしまうバイアス
- 継続性のバイアス(=今まで続いてきた事は今後も絶対変わらないと思ってしまう)
- 自信過剰のバイアス(=突き詰めてみると、自分の専門分野でもよく知らない事は多い)
- 人に対する評価の傾向(=対比誤差-自分にない能力を持っていると過剰評価してしまう、など)
- 道具のバイアス(=自分の使える能力だけで問題解決しようとする)
その上で、決断する事項がどういう性質のものかを見極める必要がある。
発注時など評価シートやマトリックスを使用して、目的に合った評価基準を作成する場面もあれば、実は判断の内容ではなく判断するまでに掛かった時間の方が重要な決断もある。
そして、決断を下すための方法や注意事項を状況に合わせて、説明している。
- フレームワーク(SWOT分析、3C分析など)を使った
- ワーストシナリオを作成する
- 「決断をしない」という決断
- ブレーンストーミング
- 決断する時間
フレームワークの使い方など各項目についての説明は触り程度だが、心理学とビジネススキルの組み合わせ具合が巧妙な良書だと思う。
本書の引用より
If the only tool you have is a hammer,you tend to see every problem as a nail.
もしあなたが持っている唯一の道具が金づちなら、あなたは全ての問題を釘として見るようになる- Abraham Maslow -
金づち以外のツールも持っておこう





