2011/02/28

Native Client APIを試す

C、C++で作ったファイルをJavaScriptから実行できるNative Client SDKがリリースされたので、さっそく試してみました。(windowsで。)

まずは、Google Chrome Canary Buildのダウンロードサイトからexeファイルをダウンロードします。

ダウンロードした「ChromeSetup.exe」をダブルクリックしてインストールを行ないます。
(インストールを行なう際に、検索エンジンを選ぶ必要があります。)

インストール完了後、Google Chrome Canary Buildを立ち上げる。
Photobucket
アドレスバーに「about:flags」を入力後、「Native Client」を有効に設定します。
Photobucket
設定完了し、再度、ブラウザを立ち上げたら、Native Client SDKをダウンロードを行い、「naclsdk_win.exe」ファイルをダブルクリックしてインストールします。
Photobucket
インストール完了後、コマンドプロンプトを立ち上げ、インストールしたディレクトリの直下にある「examples」に移動し、「httpd.cmd 5103」を実行します。

実行後、Examplesに紹介されているプログラムを動かします。

停止したい場合は、「http://localhost:5103/?quit=1」にアクセスを行ないます。

2011/02/27

[lifehack]ゲーム離れって本当かよ?

最近、「ゲーム離れ」という言葉をよく聞くが、本当に起こっているのか?
たぶん、起きてない。

18歳から49歳の年齢層では、80%近くがモバイルデバイスでカジュアルゲームをプレイしているのに対し、従来型のゲームをプレイしているのは50%をわずかに下回る。

via:モバイルソーシャルゲームと従来型ゲームの利用実態が明らかに--米調査

一昔前だったら、こんな現象なんてなかったのに、確実にハードでゲームをやらなくなっている。

かつ、ゲームという定義がそもそもあやふやになりつつあるような気がする。

なので、今後、この流れを認識している状態で任天堂やソニーがどう動くのかが見ものである。

2011/02/26

[chrome web store]adsense導入の件

Packaged Appにgoogle adsenseが導入できるかどうか確認したところ、NGだそうです。

ちょっとがっくり。。。

2011/02/25

[Google Libraries API]手っ取り早くロード

前回、[Google Libraries API]APIをloadするで、動的に、ライブラリをインクルードする方法を書きましたが、もっと簡単な方法がありました。

それは、Librariesに記載されているPathのURLをそのままsrc属性に書けば、インクルードすることができます。

例えば、jQueryの場合、Pathは、https://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.jsなので、

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js" >

と書けばオッケーです。

これは、便利。

2011/02/24

GoolgeTV

会社でGoogleTVを発見したので、ちょっくら拝見

Photobucket
液晶は、SHARP製で、次の写真が、クラウドTVの全容。

Photobucket

Photobucket
上は、リモコン。若干、操作にとまどってしまった。

OSは、android2.1だった。

驚いたのは、日本で電源を入れたにもかかわらず、海外のテレビ番組をみることができた。
もちろん、すべてのテレビ番組をみることはできなかったが。

さらに、netflixのアプリが入っていたが、会員契約をしていなかったので、オンデマンド映画を見る事ができなかった。
今後、クラウドTVを通して、オンデマンドで映画を見る事が当たり前になるんだろうなーっと思ったのだが、その一端に触れたかった。

ゲームアプリなど、もっと使用頻度が高いとされているアプリがまったく入っていなかったので、androidマーケットから購入したアプリの使いかっても結局、わからずじまい。

テレビ上で、アプリを購入してから使うまでの一連の流れを試してみたかった。

唯一の救いは、ネット閲覧できたということ。
検索エンジンは、もちろん、chrome。

いくつかサイトを見て、思ったのは、PC、スマホ、テレビの3端末に対応させるような作り方をしなければなと。
インターフェースもまだ本決まりの部分はないと思うので、今後、研究されていくだろう。

今後、クラウドTVを通して世の中がどう変化していくのかとても楽しみです。

2011/02/23

[html]articleタグ

小話なのですが、HTML リファレンスを眺めていたら、articleというタグを発見。

これ自体は、特段、変わったタグではないのですが、ここまで用意する必要があるのかどうか疑問に思ってしまった。

2011/02/22

[jQuery]動的にtextareaの高さを調節

facebookのニュースフィードに文字を入力するとき、動的に、textareaの高さが変わる仕掛けになっています。
どうやってそれを実現しているのかな~っと気になって調べたのですが、結局わからず。。。

しかし、似たような機能を実装しているjQuery Pluginとかないのかなーっとgoogle検索を行なったところ、ありました。

Elastic – Make your textareas grow Facebook style jQuery plugin
というエントリーでプログラムが紹介されていました。

導入方法は超簡単。

サンプルコードのダウンロードを行い、

$('#textareaのid').elastic();

を書くだけ。

確かに、サンプルコードを読んでみると、そうなっておりました。

うむうむ、便利、便利。

2011/02/21

[facebook]user_idのexpiresを回避する方法

機能、facebookでuser_idを取得する方法について書きましたが、実は、user_idには、expiresが設定されていて、ある一定期間がすぎるとリクエストが飛ばせないようになっております。

それを回避するためには、https://www.facebook.com/dialog/oauthにリダイレクトを行う際に、scope変数に、offline_accessを設定する必要があります。

これを設定すれば、expiresに悩まされる事なく、ガンガンリクエストを飛ばすことができます。

なんと、便利な。

2011/02/20

[facebook][GoogleAppEngine]アプリの作り方その2

前回、アプリの作り方Hello Worldというタイトルで、facebook上にアプリをのっける方法を書きましたが、実は、あれでは、IDを取得できていないことがわかりました。

なので、今日は、その修正版のプログラムを紹介


#!/usr/bin/env python
#
# Copyright 2007 Google Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
import os
import urllib
import base64

from google.appengine.ext import webapp
from google.appengine.ext.webapp import util

#django
from google.appengine.dist import use_library
use_library('django', '1.0')
from django.utils import simplejson
from google.appengine.ext.webapp import template

class MainHandler(webapp.RequestHandler):
def get(self):
__error = self.request.get('error')
if __error:
#redirect facebook
self.redirect("http://www.facebook.com/",permanent=True)
else:
self.redirect("http://apps.facebook.com/test/")

def post(self):
f_app_id = "●●●●●●"

redirect_url = "http://hoge.appspot.com/test/"
redirect_url = redirect_url.encode('utf-8')

auth_url = "https://www.facebook.com/dialog/oauth?client_id=" + f_app_id
auth_url = auth_url + "&redirect_uri=" + urllib.quote_plus(redirect_url)
auth_url = auth_url + "&scope=offline_access"

signed_request = self.request.get('signed_request')

sig, payload = signed_request.split('.', 1)
sig = self.base64_url_decode(sig)
query = simplejson.loads(self.base64_url_decode(payload))

#not logined
if not query.has_key("user_id"):
self.response.out.write("<script>top.location.href='")
self.response.out.write(auth_url)
self.response.out.write("</script>")
#already auth and load index.html
else:
template_values = {
'user_id':query["user_id"] ,
'oauth_token': query["oauth_token"]
}
path = os.path.join(os.path.dirname(__file__), 'index.html')
self.response.out.write(template.render(path, template_values))

def base64_url_decode(self,data):
sdata = data.encode('ascii')
sdata += '=' * (4 - (len(sdata) % 4))
return base64.urlsafe_b64decode(sdata)

def main():
application = webapp.WSGIApplication(
[('/test/', MainHandler)],
debug=True
)
util.run_wsgi_app(application)

if __name__ == '__main__':
main()


こうすることによって、エラーの場合と、アプリの承認と両方対応することができます。

処理の流れとして、最初に、MainHandlerのpostメソッドがコールされます。
で、facebookサーバーから送られてくるsigned_request の中に、user_idが存在しない場合は、auth_url変数に設定されているURLにリダイレクトします。

リダイレクト後、アプリを承認するかどうかの確認画面が表示されます。

もし、この段階で、否認を選択した場合に、MainHandlerクラスのgetメソッドがコールされます。
その際に、error変数をfacebookサーバーが送信してくるので、この値をもって、否認されることが確認できます。

ない場合は、承認されたことになるので、もう一度、自分にリダイレクトを行います。
で、リダイレクトされたときには、user_idが付与されているので、それを使って、GraphApiなどをコールすることができるようになります。

取得するまで時間がかかりましたが、こうして処理をテンプレにしておくと、後で、振り返ることができるので、便利かなと。

2011/02/19

[Chrome Web Store]国の選択

Chrome Web Store International Support: Developer Previewによると、16カ国の中からどの国にアプリをリリースするか選択できるようになったそうです。

まぁー、こう言ったことは、すでに、AppStoreでは装備されている機能なので、何も目新しくはないのですが、今回の動きからいよいよ今年は、本格的にchrome web storeのローカライゼーションが開始されるんだろうなーっと思い、1エントリー。

2011/02/18

[facebook][Google App Engine]Graph API

Google App Engineを使って、Graph APIを取得する方法について。
Graph APIの仕様は、ここにあるので、これにそった実装を行う。

#!/usr/bin/env python
from google.appengine.ext import webapp
from google.appengine.ext.webapp import util
from google.appengine.api import urlfetch

class MainHandler(webapp.RequestHandler):
def post(self):
url = " https://graph.facebook.com/" + "Authenticationでゲットしたfacebook id"
result = urlfetch.fetch(url)
if result.status_code == 200:
ret = "var ret;"
ret = ret + "ret = {result:true"
ret = ret + " , content:" + result.content
ret = ret + "};"
self.response.out.write(ret)
else:
self.response.out.write("var ret;ret={result:false};")

def main():
application = webapp.WSGIApplication(
[('/hoge', MainHandler)],
debug=True
)
util.run_wsgi_app(application)

if __name__ == '__main__':
main()

こんな風に実装を行えば、JSON形式でしかも、true or falseを確認した上で、以降の処理を行うことができる。

https://graph.facebook.com/の後に、AuthenticationでゲットしたIDを突っ込んであげれば、基本情報を取得することができます。

こうしてテンプレ化しておけば、いくらでも使い回しができるので、便利かなと。

2011/02/17

[IT用語]ARPUって?

最近、ARPUという言葉を結構聞くので、何かなと?

月間電気通信事業収入。通信事業における、加入者一人あたりの月間売上高。携帯電話事業者の収益性の比較などによく用いられる指標である。

via:ARPU

これって、ソーシャルアイテムとかまでに話を膨らませると、一人当たりの月間売上高ということになるんだなと。

あくまで、月間売上高なので、純益とかを示す指標などもあればなーっと。

結局は、そこが大事なのだから。

2011/02/16

[本]一瞬で自分を変える法

こちらも親父が持っていたので拝借。

1 あなたを大物にする「不思議な力」
2 「勝利の方程式」のマスター法
3 自分を変える「信念強化」法
4 「成功者のメンタリティ」七つの法則
5「一瞬にして劇的に」自分が進化する!
6 「やる気」が自動発火する身体のつくり方
7 相手の「深層心理」を鋭く読む法
8 カリスマが必ず持っている「三つの武器」
9 「戦わずして勝つ」言葉の魔力
10 「新基軸を打ち出す」のが上手い人
11「つねに最高の自分」を引き出すプログラミング
12 富と成功「五つのカギ」
13 最後に、あなたの成功を確信する!

via:目次

他の成功哲学書とは、違って抽象的な部分が少なく、神経言語プログラミング(NLP)を使って他人とコミュニケーションを取っていく方法を中心に内容が展開されていた。

自分、自分と相手に強要するのではなく、あくまで相手を中心にあわせる方法で、かなり気に入ってしまった。

さっそく明日から実践してみようと思った。が、あからさまに相手の呼吸やトークのトーン、ペースなどを真似すると、話相手が馬鹿にされているのかと感じてしまう可能性も考えられたので、あまり露骨に合わせるのはやめておいた方がいいかなと思った。

と感想を書いていたら、人は見た目が9割を思い出してしまった。外見もさることながら、身振りや手振りや声の調子なども総合してあの本では見た目と定義していた。

ある意味通じるものがあるのではないだろうか?

やはりこの手のきちんとしたコミュニケーション法が一学問として確立してもおかしくないのではとますます思ってしまった?
(大学では専門課程としてあるのかもしれないが、中高では当然、存在しない。)

だって、相手がいて初めて自分という存在も成り立つのだから。
この本を通してさらに人間関係に磨きをかけたいと思いました。


2011/02/15

[css]textareaのフォーカスの色を変更

表題通りなのだが、一般的にtextareaにフォーカスが当たった場合、枠線の色が変更されるようになっています。

それを解除する方法ですが、Chrome のtextarea にfocusした時に 黄色く枠線が光るのをやめたい。。を参考にすると、CSSでoutlineをnoneに設定するといけるようです。

実際に試してところ確かに、枠線の色が消えました。

元記事は、chromeだけでしたが、firefoxや、IEでも消えました。

2011/02/14

[iPhone][HTML]ブックマークのiconを設定

iPhoneのsafariで開いたサイトをホーム画面にブクマした場合のアイコンを設定する方法を調査しました。
Specifying a Webpage Icon for Web Clipによると、iPhone、iPod touch用に72x72とiPad用に114x114のpngファイルを用意すればよさそうです。

で、用意したファイルを使って下記のタグを入れることによって設定することができます。

<link rel="apple-touch-icon" sizes="72x72" href="touch-icon-ipad.png" />
<link rel="apple-touch-icon" sizes="114x114" href="touch-icon-iphone4.png" />


2011/02/13

[JavaScript]配列のlengthプロパティについて

arrayのlengthを書き換えることによって、配列そのものの大きさを変更できることは、この本で知ったのですが、では、lengthプロパティに負つまりマイナスの値を入れるとどうなるのだろうか?

var ary = ["hoge","fuga","piyo"];

alert(ary);

ary.length = -1;

alert(ary);​

alert(typeof ary)

上のようなソースで検証した結果、1回目は、すべての配列の値が表示されたが、それ以降は何も表示されなかった。
(chromeで動作)

せめて、エラーならエラー情報を表示してほしいものだが、何も起こらないとなると、こいつはいったい何なのか?

typeofで何も値を返さないということは、そもそも変数自体が宣言されていないと解釈しても間違ってなさそうなのだが。

まーいずれにしても値設定がそもそも不正なので、気にする必要もないと思うのですが。。。

2011/02/12

[css]textareaの縦幅の大きさ

textareaの縦幅を調節する方法は、colsが一般的だと思うのですが、CSSを使ってどうにかできないのかなーっと思っていたら、10.textarea の clos と rows がブラウザにより異なる表示する問題で、width属性で調整できるとわかりました。

さっそく試したところ、確かに縦幅を調節することができました。

便利だなー。

2011/02/11

[本]ずーっと、コンパの話。大金星

まさか、親父がこの本を持っていたとは。。。

親父、まさか、中身を確認して買ったのだろうか?
ひょっとしてコンパしたかったのだろうか?
まじでか!!
まーそんなことはこの際、気にしないことにします。

本書は、高校時代から鉄拳にはまっていたスーパーゲーマーの御手洗渉が、GARDENという学生グループが主催するコンパで女を口説こうとする小説なのだが、本書の8割ぐらいがコンパの内容で占めてしまっていた。

よくここまで、コンパの内容を克明にかけたなーっと著者に脱帽したと同時に、こちらまで、手に汗握る思いで、読込んでしまった。
それだけ主人公の気持ち、立場に入り込んでしまったんだろう。

感想を書いていて思い出したのだが、同じ気持ちを大学時代に味わったことがある。
そのときは、4対3か、3対3か、忘れてしまったが、薬科大のいかにも白金台にいそうな大学生とコンパをしたことがあるが、それはもうめちゃくちゃだった。ろくに話すこともできず、緊張してしまい。手は汗と脂でべとべとになり、口は渇いてしまっていた。
結果的に、空気が重たくなっただけで、会社の重役と面接をしているような気持ちになったことがあり、1カップルも生まれなかった。

そんな状況からどうやって這い上がって行くか、その方法がおもしろおかしく書かれているので、興味のある方は、是非、是非。

水野敬也のすごいところは、夢をかなえるゾウといい、ごくごく普通の人物を描き出すのが本当にうまいなーっと思ってしまう。

これからも、いい作品よろしくと著者に御願いしたい。

2011/02/10

[Google App Engine]Redirectの方法

ちょっと、facebookiアプリのログイン周りで、リダイレクトをする必要があったので、その方法について調査することにしました。

まず、少しぐぐってみると、djangoを使ったリダイレクトが紹介されていたのですが、実際に試してみるとどうもうまくいかん。

そこで、Google App Engineにビルトインされていないかリファレンスを読んだら、ありましたよー。

ここここにやり方が書いてあって、どうやら、こんな感じでいけちゃうみたい。

self.redirect("http://yahoo.co.jp")
これだと、302でリダイレクトをすることになり、301でリダイレクトを行いたい場合は、
self.redirect("http://yahoo.co.jp", permanent=True)
と第二引数にTrueを入れる事によって可能となります。

すごく便利です。

2011/02/09

[iPhone][JavaScript]setIntervalが働かない件

今日、ちょっと自分のGAE環境化で試してみたのですが、どうやら、iPhone上でスクロールしているときに、どうやら、setIntervalが動作しないようだ。

なぜだろうか?

これって仕様なの?

試してみてないので、断定はできないのですが、おそらくsetTimeoutも働かないかもしれない。
つまり、スクロール中は、タイムのカウントが止まっているのかなと。

2011/02/08

[iPhone][JavaScript]縦幅に関するあれこれ

ちょっとiPhone上のscreenの幅と高さを知りたくなったので、取得方法について
iPhone/iPod と iPadのscreen.widthをみると、どうやら、

screen.width
screen.height

via:iPhone/iPod と iPadのscreen.width

で固定値として取得できるようです。

開発を行なうときは、参考にしたい値です。

2011/02/07

[python]urlsafe_b64encodeメソッドって

facebookのサンプルアプリをみていたら、

base64.urlsafe_b64encode()

という記述があったので、何かなと思って調査したところ、18.12. base64 — RFC 3548: Base16, Base32, Base64 Data Encodingsにヒットして、どうやら、エンコードをしてくれるメソッドなのだが、「+」の代わりに、「-」を「\」の代わりに「_」にそれぞれ変更してくれるようです。

2011/02/06

[本]もし高校野球の女子マネージャーがドラッカーの『マネジメント』を読んだら

こちらの本も親父が持っていたので、拝借。

タイトル通りに、女子高校生の「みなみ」が、野球部のマネージャーになって「ドラッカー」の「マネジメント」を実践するという本。

で、その実践した結果、野球部がどうなったのかは、本書を確認してほしい。
お恥ずかしながら、今まで、ドラッカーの本を読んだことはないし、これを読んで、ドラッカーを読む気にもならなかったが、内容的にとても感動してしまった。(ドラッカーの教えにではなく。)

いま、こうして改めて客観的に本の感想を書いてみると、本書は、ドラッカーのプロパガンダ本だったのかもしれない。
が、それを抜きにしてもやはりおもしろかったと思う。
出勤中に読んでいたのだが、思わず最後、涙がこぼれ落ちそうになるのをこらえるのに必死だった。

すごく残念に思ったのは、感動的な場面で、突然、なんの前触れもなく、p235に萌え系のイラストが挿入されていたことがショックだった。あれで、感動が半減してしまった上に、どんびきしてしまった。

著者は、なんであのタイミングで挿絵を入れたのか?
さらに、ちょいちょい挿絵があるのだが、その辺もいるのだろうか?
そんな疑問が頭から離れなかった。
たぶん、ない方が感動すると思うのだが。。。
なんか、もったいないなーっと思ってしまった。

著者は、その昔、秋元康のお弟子さんだったようで、AKB48のプロデュース業にも携わっていたようです。
かつ、本書は、そんなAKBのキャラクターがベースとなっているようです。
あとがきで初めて知った。

昨日、書いた夢をかなえるゾウといい、ストーリー仕立ての成功哲学書が流行っているのかなーっと客観的に思ってしまった。



2011/02/05

[本]夢をかなえるゾウ

親父が持っていたので、ちょっと拝借

ガーネーシャというインドの神様が、普通の青年である主人公に成功する方法を指南するのだが、ちまたにあふれている成功哲学書の内容をかき集めて物語としたような感じがした。

現に参考文献としてその手の本がたくさん紹介されていたし、昔の偉人や成功しているビジネスマンの例がひっきりなしに紹介されていた。著者が果たしてこのような方法を経て成功したかどうかは定かではない。

さらに、推測はつくのですが、ある本を批判しているような感じも見受けられた。
それはそれとして別に構わないのですが。

成功哲学書として読むのではなくて、物語として読むと本書はとても充実した内容となっている。

ガーネーシャがインド人なのに関西弁を使っているのがとても矛盾していておもしろかったし、さらにガネーシャと主人公がわかれる時には、思わず涙がこぼれそうになった。話の筋もちゃんと通っている。

amazonでリンクを探している時に知ったのですが、ちょい前にドラマ化されていたんですね。

しかも、主役は、小栗旬だったんだ。

さらに、深夜でも放送されていたんですね。

本書を読んで、結構、やばかったのでドラマで見ていたらもっと感動してやばかったかもなー。

追記
100万部突破していたんですね。確かに突破するだけのおもしろさはあった。

2011/02/04

2011/02/03

[mac]便利すぎるF11

windowsでいうところの「ウィンドウズ+d」みたいなものってマックにないのかなーっと探していたら、発見。

こちらを参考にすると、どうやらF11でいけるみたいです。

さっそくためしてみたのですが、すごく便利。