あなたも写真のヒストグラムが読めるようになる!アプリを作った

画像のヒストグラムを生成するアプリケーションを作ってみました
フォトショップやPicasa、カメラ本体でもヒストグラムは作ってくれますが、一点だけ画期的な?機能がありまして画像上の各ピクセルがヒストグラムのどこに対応するかわかるようになっています
この部分は机だとか、空だとか、あるいは人肌はこんなふうにばらけるのかとかよくわかって面白いです

写真じゃなくてもロゴでもQRコードでも面白いです
こういう人工物の方がヒストグラムの意味はより理解しやすいですね

Google App Engine(Python) 上で動いています
ヒストグラムのデータの生成まではサーバー側でやっています
ヒストグラムの描画と画像上の色情報の取得はクライアント側でCanvasを使いました

これを手始めに画像解析をちょっとやっていこうかと思っています
アルゴリズムだけで意味をとりだすというのは興味のあるところです

スマートフォンの衝撃 母にとっての

この前の水曜日だったと思う
夕食時に母がNHKのクローズアップ現代を見ていた
テーマは「スマートフォンの衝撃

僕は食事に夢中でちらちらとしか見ていなかったんだけど
番組の後半で母が声を上げる

「汚いわねー」

なにかと思ってテレビのほうを向くと
指の指紋でベタベタなiPhoneが画面に大写しになっている
出演者が実際にiPhoneを操作して見せてる場面だった

「こんなに汚くなるものなの?」
「そうだよ」

そういえば母はケータイの画面をよく拭いている

母にiPadをプレゼントしようと思ってるんだけどだめかもしれない
汚れるからと言って仏壇に飾ったままにしそうだ

each 一つづつテキパキと – プログラム言語にみる英単語1

さて始まりました新シリーズ「プログラム言語にみる英単語」第一回目はeach!
彼女あってこそのプログラム言語だと言えるぐらいの大黒柱です

みなさんはコンビニで働いたことありますか?
僕は今ビールが飲みたくなってきています
コンビニに走るかどうか迷いながらこれを書いています
コンビニじゃなくてもいいです
お店のレジやったことありますか?

僕はないです
僕にはできそうもないです
だって焦るじゃない
レジ前に行列できちゃったら

今、目の前の会計に集中することが最善だとわかっていても
後ろに並んでいる人がちょっとコワモテだったりイライラしてるふうだったり急いでいるふうだったり
あるいは美人だったり
あるいは胸元が大きくあいた服を着ていたり
状況が僕の集中力を奪っていく

バーコードがなかなか読めない
ビニール袋が滑ってなかなか開けない
お釣りをこぼす

想像しただけでやっぱり僕には無理だ無理
ということで彼女に登場願おう!

今回はRubyのeachです
(どのプログラム言語にも相当するものがあります
書き方とか使い方は少し違いますが
Rubyは簡潔で英語そのものらしいです
プログラム言語のわからない人でも読みやすいと思います)

3人が商品を抱えてレジに並んでいます
彼女はてきぱきと会計をすませていく

#ruby

#3人のお客さんが並んでいる
customers = {'田中' => [100,200,150], '斉藤' => [2500,5000], '鈴木' => [2000,3999,6200,10500]}

#ひとりずつ会計を済ましていく
customers.each do |name, goods|
    #最初にレジをリセット
    sum = 0
    #商品一つづつの金額を足していく
    goods.each do |price|
    	sum += price
    end
    print name, "様、", sum ,"円のお買い上げです\n"
end

#田中様、450円のお買い上げです
#斉藤様、7500円のお買い上げです
#鈴木様、22699円のお買い上げです

おみごと
彼女はさっさと列をさばいてしまいました

彼女の仕事ぶりをみていくと
僕のように気が散りません
ひとりずつ着実に済ませていきます
常にその人に集中します
前後のお客さんが何がしかの影響を与えることは決してありません

彼女ももちろんうしろにお客さんが並んでいることを知らないわけではないのです
しかし常にその人のみに集中します

これが彼女 each の本質です

全体を認識に含めつつも、それぞれにぎゅっとフォーカスする
all や every にはこういうことはできないはずです

「お待ちのお客様、こちらへどうぞ!」

おっと、お店が再び混んできました
彼女ひとりで捌き切れないぐらい繁盛しているようですね
each くんが棚の整理から戻りレジについたようです

each が上手にやってのける類の仕事は容易に分散させて並列処理ができます
一つづつの会計は独立していてけっして関係しあうことがないからです

eachくん「お客様すいません、いま1000円札を切らしてしまって・・・」
客A「こまったなあ、これしかもってでてこなかったんだよ」
客B「あら、わたしいまたくさん持っているから両替するわ」
eachくん「ありがとうございます!」

Google App Engine 1.3.4 をいれたら WinSCP がかたまるようになった

Google App Engine で遊んでいるというのは昨晩お伝えしたとおりだが
1.3.4にバージョンを上げてからWinSCPとFFFTPが起動は出来るんだけどそのあとにかたまるようになった

Google App Engine をアンインストールしただけじゃだめでシステムの復元をやらないと解消しなかった
1.3.3は問題なく使えてます

こういう事ってたまに見舞われるけど原因突き止めるまでほんとうに時間かかるね
まいったよ

ちなみにOSはVistaです

追記:
1.3.3でもだめだった
ffftpはマスターパスワードを設定しなければ問題なし
WinSCPつかえなくても困らないのでこれ以上調べない

Python, Google App Engine, Canvas

眠いがメモ
Google App Engine を試してみたくてPython覚えながら一日いじってみる
ちょっとつくってみようと思ったのが
写真のヒストグラムを表示するアプリ
写真の上をマウスでなぞるとその場所がヒストグラムのどこの場所に相当するか表示されるのがちょっと便利
ヒストグラムの読み方を覚えたい人には良いと思います

ウェブアプリで作る意味はあんまりないんだけど勉強だからさ

どこまでサーバー側で処理してどこまでクライアント側で処理するか考える

最初はヒストグラムのデータも写真の上のマウスを置いた場所の色の取得も全部サーバー側で処理しようとしていた
だけどヒストグラムはともかくマウスを置いた場所の色をとるのにいちいちサーバーに問い合わせるのはレスポンスが悪い

これはなんとかクライアント側で処理できないかと考えていたんだけど全然思いつかなくて
とりあえずほっておきつつヒストグラムを描くためにCanvasについて調べていたらCanvas内に写真をおけばjavascriptで各座標の色が取れることがわかって狂喜
しらなかったなー

これがわかったから今度は逆に全部クライアント側で処理することを考える
でもちょっと無理みたい
ヒストグラムを描くためにRGBごとに集計するところで width * height * 4(R,G,Bとアルファ) 個を要素にもつ配列なんてできてしまってこいつがうまく処理できない
であきらめる

結局、写真はサーバー側に保存してその時にヒストグラムを描くための集計も済ませておく
これをクライアント側におくる
ヒストグラムを描くこと、マウスのおいた場所の色を調べて該当するグラフの箇所を示すなどはクライアント側で処理

言葉だけの説明だとなんだかよくわからないね
近いうちに公開します
まだちょっと汚くて

Suono Dolce に一口のった

サイマル放送が始まったりしてにわかに脚光を浴びてるラジオ
Twitterとも相性が良いとかなんとか

僕に言わせれば笑ってしまいますよ
いまさら何をいってんだ

私は16歳からラジオを聴きはじめ21歳からはラジオ一本さ
人生の半分以上ラジオです
テレビなんか持ってないよん
テレビつまんないラジオ楽しい
(まあワールドカップの時はサッカーテレビで見ちゃうけど)
(あ、ラジオのサッカー中継も面白いんだよ)

テレビの連中はまだ身の保全に必死で自分が現役の間をどうしのごうか考えてるだろうけど
ラジオはもうそんな段階は越えて淡々とやっている
すでに一回テレビに越された経験があるから

それはともかく
最近お気に入りなのはSuono Dolce
午前中から夜までは大体かかっている
(深夜はAMに切り替える事多いけど)

この番組のiPhoneアプリもなかなか良く出来ていて来月中には有料版のアプリも出るそうです

このアプリにはファンドがあってだれでも投資できます

っておもわず一口乗ってしまった
今一年で一番カネ無いのに

追伸
今おきにいりは
月曜日10時ニッポン放送の坂崎幸之助・吉田拓郎のオールナイト
これ聞いてると間違いなく仕事できなくなる

Twitter search API の使い方

引き続きです
いままではめんどくさかったりどうせ誰もみないだろうと思ってコードまでこうして解説したりしなかったんだけど
やっぱりそんなことではウェブに世話になっている身としていかんと思いましてね
今後はなるべく書いていきます

jqueryつかえばなんてことなくできると思います
ページ送りとかツイートのストリーム表現とかサーバー側でキャッシュかけようとかいろいろあると思いますが
とりあえず考えない

//javascript(jquery)のみで処理

//json形式で
//キーワードはURIエンコードする
//最近のツイートを1ページあたり100件取得
var search = {
	url : 'http://search.twitter.com/search.json' ,
	words : ['%22earthdaymarket' , 'earthdaymarket' , encodeURI('アースデイマーケット')],
	option : {result_type : 'recent' , rpp : 100}
};

//キーワードはORでつないでanyとする
//クロスドメインのため &callback=? をつかってjsonp で
$.getJSON(search.url + '?q=' + search.words.join('+OR+') + '&callback=?', search.option ,
     function(data) {
          $.each(data.results,function(index,tweet){
               //tweetの整形処理をする(省略)
          });
      }
);

ひとつ引っかかったのがツイートの投稿日時をどんな形で表示するかということ
他見るとだいたい 前とかagoとかになっているのでそれに習いました

//各ツイートについてくるcreated_atを ago 表記に変換する関数
timestamp = function (created_at) {
	var created_at = Date.parse(created_at); //投稿日時をミリ秒に変換
	var now = (new Date()).getTime(); //現在時刻をミリ秒で取得(ツイート毎に取得する必要ないけどまあいいや)
	
	var passage = (now - created_at) / 1000; //投稿時刻をagoに変換&秒に変換

        //端数は全部切り捨て
	
	if(passage < 60){//1分未満だったら秒で表示
		passage = Math.ceil(passage);
		return passage + '秒前';
	}
	if(passage < 3600){//1時間未満だったら分で表示
		passage = Math.ceil(passage / 60);
		return passage + '分前';
	}
	if(passage < 3600 * 24){//1日未満だったら時間で表示
		passage = Math.ceil(passage / 3600);
		return passage + '時間前';
	}

	//1日以上経っていたら日で表示
	passage = Math.ceil(passage / ( 3600 * 24));
	return passage + '日前';

}

Twitter API をつかってアースデイマーケットに言及しているつぶやきを収集

個人的にはあまりツイッターは利用していないが何もしないわけにも行かなくなってきた
使っている人多くなってきたね

アースデイマーケットとしてオフィシャルのアカウントを運営するのは現時点では無理だと思う人手が足りない
ただし言及してくれているツイートを公式サイト内に表示してあげるのは簡単だし販売促進の手助けになる可能性は大いにあるとおもう

現場の賑やか感でないかな
当日前後の出店者とお客さんのやりとりの場にもなるかも

出店者にはそれがわかるハッシュダグつけてもらって区別できるようにしても面白いかも
なりすましの問題はでてくるけど

search API にあるlangやlocaleは効かないみたい?
locateが効けばすでに使われているハッシュタグも地域ごとに再利用できて便利なんだけどなあ
(コードは次の投稿にかきました)

ハッシュダグは#edmkt でとりあえず考えてます
本当は#edmで行きたいんだけどすでに他で使われていてうまくない

ハッシュタグ何にしたらいいか関係者の方々候補ください
出店者にも聞いてみるつもり

まあハッシュタグなくても複数のワードで拾ってあげればだいたいOKな気はします

以下、”アースデイマーケット”,”earthdaymarket”,”#edmkt” の含まれるツイートです