2011/09/30

[Youtube]サムネイルについて

確かに便利な技だなと思った。

画像が以下のようにvideoidをベースに生成されるので、URLを作って<img src>に設定するだけです。
videoidは、http://www.youtube.com/watch?v=XXXXXX の部分のことです。

via:APIを使わずにYoutube動画のサムネイルを得る方法
とまー、stackoverflowのHow to get thumbnail of YouTube video link using YouTube API?から情報を引っ張っているわけだが、これ、YouTube APIのどの部分なのかなとちょっと調べたくなった。

結果的には、Reference Guide: Data API Protocolmedia:thumbnailのところに該当するということが判明。

なので、APIが変更されたら、このリファレンスを真っ先に見れば対応できるのかなと。

2011/09/29

[iGoogle]UI変更

ひょっとしてiGoogleのUI変わった?

公式ブログには、特に発表がなかった気がするのだが。

ちょっとgadgetがさがしにくくなった感じがする。

2011/09/28

[twitter]検索結果一覧取得

ずばり、search APIでゲットすることができます。

これ、すっげー便利なのは、JSONPが使えるということ。

なので、サーバーを経由させずに、javascriptで直接アクセスできるんですねー。

ちょっとサンプルアプリみたいなのを作りたくなったなー。

2011/09/27

[twitter]APIについて

備忘録として、

個人の情報を取得したい場合は
GET users/lookup

フレンドを取得したい場合は、
GET friends/ids

フォロワーを取得したい場合は、
GET followers/ids

それぞれリクエスト!!

2011/09/26

[twitter]40X系列のエラーがでる件

昨日、twitterのログインする方法を書きましたが、それからゲットしたaccess_tokenをもとにして、lookupなどにリクエストを飛ばしているのですが、なぜか不定期にエラーが返ってきてしまう。

twitter api叩いたら 400 Bad Request 出たよメモ

GAEのURL FetchでUser-Agentを指定する
を参考にして、User-Agentの設定を行なっても、100発100中にはならない。

他に何か原因があるのだろうか?

リクエスト投げる回数が多すぎるのだろうか?

それにしても、1時間に150回よりも少ない回数であることは間違いないのだが。。。

2011/09/25

[Google App Engine][twitter][oauth]ログインを自作する

twitterのUsing OAuth 1.0aを読んでいて、認証を行なうには、oauthを使う必要があるとのこと。

oauthを使うにあたって、すでに、サンプルがころがっているのだが、理由はわからないが、すぐに受け入れることはできなかった。

Djangoや、JavaScriptのjQueryは受け入れられたのに。

きっと、3rdパーティーの不確定要素が多いライブラリからだと思うのだが。
(この判断も一方的なのだが。)

前置きが長くなってしまったが、というわけで、Google App EngineのPythonを使って自作をすることに。


#!/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 datetime,time,random,urllib,hmac,hashlib,re,os
from google.appengine.ext import webapp
from google.appengine.ext.webapp import util
from google.appengine.api import urlfetch


#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

# Request Token URL
reqt_url = 'https://api.twitter.com/oauth/request_token'
# Authorize URL
auth_url = 'https://api.twitter.com/oauth/authorize'
# Access Token URL
acct_url = 'https://api.twitter.com/oauth/access_token'

class oauth():

def __init__(self,secret= "",method="POST"):

self.consumer_secret = '●●●●●●'
self.token_secret = secret
self.method = method

self.param = {
'oauth_consumer_key':'●●●●●●',
'oauth_nonce':self.getNonce(),
'oauth_signature_method':'HMAC-SHA1',
'oauth_version':'1.0',
'oauth_timestamp':self.getTimeStamp()
}

def setParam(self,param):
for i in param:
self.param[i] = param[i]
self.param['oauth_signature'] = self.makeSignature()

def callRequest(self,requrl):
param = urllib.urlencode(self.param)

if self.method == 'POST':

result = urlfetch.fetch(
url=requrl,
payload=param,
method=urlfetch.POST,
headers={'Content-Type': 'application/x-www-form-urlencoded','User-Agent':'***'}
)

else:

param = re.sub("&", ",", param)

result = urlfetch.fetch(
url=requrl,
method=urlfetch.GET,
headers={'Authorization': 'OAuth realm="",'+param,'User-Agent':'***'}
)


if result.status_code == 200:
return {'result':True,'content':result.content}
else:
return {'result':False,'content':result.content}
#return {'result':False,'content':str(result.status_code)}

def getNonce(self):
str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz123456789[]{}!$%&'()-^\:;*+><"
strlist = list(str)
string = ""
for i in range(20):
x = random.randint(0,len(strlist)-1)
string += strlist[x]
return string

def getTimeStamp(self):
d = datetime.datetime.today()
d = time.mktime(d.timetuple())
d = str(int(d))
return d

def makeSignature(self):
pks = sorted(self.param.keys())
param = ''

for i in pks:
param = param + '&' + i + '=' + urllib.quote_plus(self.param[i])
else:
param = param[1:]

param = urllib.quote_plus(self.method) + '&' + urllib.quote_plus(reqt_url) + '&' + urllib.quote_plus(param)

h = hmac.new("%s&%s" % (urllib.quote(self.consumer_secret), urllib.quote(self.token_secret)), param, hashlib.sha1)
sig = h.digest().encode("base64").strip()
return sig


class LoginHandler(webapp.RequestHandler):

def get(self):

oauth_token = self.request.get('oauth_token')
oauth_verifier = self.request.get('oauth_verifier')

if oauth_token == '' and oauth_verifier == '':

ioauth = oauth()
param = {'oauth_callback':'この処理が走るURL'}
ioauth.setParam(param)
ret = ioauth.callRequest(reqt_url)
if ret['result']:
content = ret['content']

content = content.split('&')
for i in content:
temp = i.split('=')
ioauth.param[temp[0]] = temp[1]

self.response.headers.add_header('Set-Cookie', 'ts='+ioauth.param['oauth_token_secret'])
self.redirect(auth_url+"?oauth_token="+ioauth.param['oauth_token'], permanent=True)

else:

ioauth = oauth(secret=self.request.cookies.get('ts'))
param = {'oauth_token':oauth_token,'oauth_verifier':oauth_verifier}
ioauth.setParam(param)
ret = ioauth.callRequest(acct_url)

if ret['result']:
content = ret['content']

content = content.split('&')
for i in content:
temp = i.split('=')
ioauth.param[temp[0]] = temp[1]

#認証成功!!
path = os.path.join(os.path.dirname(__file__), 'redirect.html')
template_values = {
'oauth_token':ioauth.param['oauth_token'],
'oauth_token_secret':ioauth.param['oauth_token_secret'],
'user_id':ioauth.param['user_id'],
'screen_name':ioauth.param['screen_name']
}
self.response.out.write(template.render(path,template_values))


def main():
application = webapp.WSGIApplication(
[('/twitter/login', LoginHandler)],
debug=True
)
util.run_wsgi_app(application)

if __name__ == '__main__':
main()
http://hoge/twitter/loginにアクセスすると、LoginHandlerクラスが反応します。

最初、直アクセスした場合は、当然、

oauth_token
と、
oauth_verifier
がないので、最初のif文が実行されます。

その中で、oauthクラスのインスタンス変数を宣言するのですが、コンストラクタの時点で、作成できる変数群をすべて設定しておきます。

setParamクラスでsignatureを作成し、httpのPOSTで通信を行ないます。

oauth_token、oauth_token_secret返ってくるので、oauth_token_secretをクッキーに保存しoauth_tokenをquery stringに設定して、リダイレクトをします。

リダイレクトの結果、oauth_token、oauth_verifierがコールバック先のquery stringに付与されて呼び出されるので、それを元に、再度、signatureを作成、access_tokenをゲットします。

今回、上記の処理を書くにあたって、Twitter API を OAuth で認証するスクリプトを 0 から書いてみたを参考にしました。

ただ参照先サイトは、コールバックの設定がなかったので、そこだけ、ちょっとプログラムの変更をする必要がありましたが。

こうしてまとめておけば、後でいつでも、振り返るので、便利ですね。

2011/09/24

[twitter]lookupの便利な使い方

twitterで個人の情報をゲットするのに、users/lookupに問い合わせを行なうのだが、便利な方法として、query stringに、user_idをカンマをつけることによって、複数のユーザーの情報を取得することが可能なようだ。
毎回、毎回、一つのidで問い合わせを行なう必要がないので、便利ですね。

2011/09/22

[twitter][icon]ログインアイコンについて

備忘録として。

よく、サインインの時に、twitterでログインするかどうか聞かれますが、そのときに、表示されるアイコンってあるのかなーっと思って、探していたら、devloperページにありました。

すぐに見つけることができないので、メモ。

2011/09/21

[GoogleAppEngine]Cookieの設定方法

「import Cookie」を行っても、Cookieの設定を行なうことができない。
正確にいうと、設定はできるのだが、画面を切り替えると、値の取得を行なうことができない。

そもそも論、GoogleAppEngineは特殊なことをしないと、設定できないのかなーっと思ったら、回答がありました。

・・・省略・・・
username = self.request.cookies.get('username', '')
・・・省略・・・
self.response.headers.add_header(
'Set-Cookie',
'username=%s; expires=Fri, 31-Dec-2020 23:59:59 GMT' \
% username.encode())

via:Google App EngineでCookieを発行する
というわけで、The Request Classにもあるとおり、requestクラスのcookies変数でとりにいくわけだが、ちょっと納得がいかないのが、設定方法。

これって、HTTPヘッダーに直接埋め込みのような。。。

後、ドメインやpathの設定はどうするのだろうか?

ちょっと疑問を残しつつ、本エントリーを締める。

2011/09/20

[Python]unixタイムの取得方法

ずばり、この記事が参考になりました。

>>> import datetime,time
>>> d = datetime.datetime.today()
>>> time.mktime(d.timetuple())
1294640034.0

via:pythonでdatetimeをunix time
さらに、
t = time.mktime(d.timetuple())
t = int(t)
t = str(t)
とすることによって、int型、及び、str型に対応することもできる。

2011/09/19

[Python]ランダムな文字列を作成する

タイトル通りなのですが、今、twitterのログイン機構を勉強していまして、その中で、oauth_nonceを作成するときに、ランダムな文字列が必要となるので、調査しました。

ちょっとぐぐってみると、まさに、うってつけのエントリーがありました。

Pythonでランダムな文字列をつくるには?

詳しくは、エントリーを見てほしいのですが、これはとても便利。
ってか、デフォルトで用意されていなかったんですね><

githubにも公開されているので、プログラムをダウンロードすることも可能です。

2011/09/18

[icon]日本のソーシャルサービスアイコン

まじであざーす。
フラットなフリーの日本向けソーシャルアイコンセット
こいうのをまじで求めていたんだよねー。

2011/09/17

[本]夜の銀座の資本論

こちらも読了

クラブへようこそ
夜の銀座は信用取引の世界
夜の銀座は見栄の世界
夜の銀座は二流を一流にする
夜の銀座のポートフォリオ
夜の銀座のリスクマネジメント
ナンバーワンは美人が絶対条件か?
執着はものごとを悪くする
パッション1年、セックス3年…
華麗なる愛人生活
夜の銀座のブランド戦略
お給料交渉の現場
七転び八起きの精神
オーナーママの憂鬱
お金にモテる人の「品格」

via:目次
家内が持っていたので、ちょっと借りました。
(というか、なんちゅう本を持っていたんだ。)

銀座のママである著者の経験や見聞から、夜の銀座のクラブで働くホステスの実態に迫った一冊。
読んでみて実感したのは、やはり、ハイリスクハイリターンな職業なんだなーということ。
これは、著者自身認めている。
ってか、自分自身に対する投資コストがすっげー。
本書によって、いかにホステスが、リクスを背負って懸命(賢明)に働いているか垣間みることができます。

ちょっと横道にそれるのですが、第9夜のタイトルが「パッション一年、セックス三年。。。」とあったので、実際のホステスのセックスに迫った内容なのかなーっという下心丸出しモードで読んだのですが、全然、そんなことは書いていませんでした。一回もクラブには行ったことがないので、すっげー知りたいなーっと思っていたのですが。

こうして感想を書いてみると、クラブのホステスさんの業務内容が把握できたのだが、これとキャバクラの違いってなんなのだろうか?と思ってしまった。
これは単なる情報不足及び勉強不足に伴う疑問だと思うので、後でグーグル先生にお伺いを立てることにしよう。

震災後に、本書を手に取ったため、この部分に疑問を感じないわけにはいかなかった。
第11夜 夜の銀座のブランド戦略 162ページ
資産家の方が代々保有している銘柄の筆頭格は、電力株です。
まじで!!今回の震災によって、上記の銘柄が必ずしも安定しているとは限らないということが明らかになってしまった。
ここで書きたいのが、たとえでかい企業でも安心できないし、安定もしていないということ。

最後に、
第6夜 夜の銀座のリスクマネジメント 102ページ
また投資先が、潰れてしまったら株式は紙切れになってしまいますので、投資先はまず潰れそうもない、時価総額が大きい国際優良企業の株式や国際に投資
「投資先はまず潰れそうもない」とあるが、これってどうやって、判断するの?
時価総額が大きいだけで本当に大丈夫?
大量に負債を抱え込んでいてもおk??

とちょっと疑問に感じたので、突っ込んでみた。
心配なのは、国際優良企業というのは、主観が混じってしまい、客観的に分析するのが難しくなるんじゃーないのかなーと思ってしまった。

2011/09/16

[ゲーム]TOKYO GAME SHOW 2011に参加

今日は、TOKYO GAME SHOW 2011に参加しました!!

去年からの毎年恒例行事かなと勝手に決めているのですが、昨年と比べてなんか、ブースが少なくなったような気が。。。

それでも、興味があった機種やゲームに触ることができたので、とても楽しかったです。

明日から、一般公開ですが、今年も、めっちゃ混みそう。
今日はとても熱かったので、参加される方は、熱中症に気をつけてくださいね。






2011/09/15

[ゲーム]ドラゴンクエスト25周年記念パック

をどうやら、弟が購入したようだ。

実家にあるようなので、今度、帰ったら少し触ってみたい。

2011/09/14

[本]脱「ひとり勝ち」文明論

あっという間に読了

1 脱「ひとり勝ち」文明へ
2 未来は、電気自動車の中にある
3 「エリーカ」開発で見えてきたこと
4 日本発、日本型の文明を!

via:目次
本書を手に取った理由として、空気を読むな本を読めの推薦図書にあったので、手に取りました。

小学校に道徳という授業が、今でもあるならば、是非、導入してほしい一冊だと感じた。
というのも、本書にも言及されていたが、学生にアンケートを取ったところ、将来悪くなると予想が大半を占めており、確かに本書を読めば、将来は明るいじゃないかと希望を持つ事ができると思ったからだ。

最初、ただの地球温暖化ってやばいよねーっというチープな内容の環境本と思っていたが、とんでもなかった。
力学的エネルギー保存の法則(だったような気がする。間違っていたら指摘してほしい。)から、従来何か運動が起きれば、何か消費し、かつ、不純物が発生するという原則でエネルギーが使われていたが、本書で提唱されている、太陽光エネルギーを使った方式に従えば、不純物(この場合、熱、SOx、Nox COxなど)がなく、めっちゃ環境に優しいエネルギーが実現するという事が書かれており、是非、将来、実用化されてほしい。
かつ、日本は上記の技術が先行しており、若い人もチャンスを掴むことができると著者は述べていた。

ただ、海外の国ないし、企業が猛烈な勢いで研究を進めているので、早くしないと抜かれてしまうよと懸念されていた。
なので、後は、やるかやらないかの話ということなのだろう。

未来は、明るい。

我々が、明かりを絶やさなければ。

via:日はまた昇らずにはいられない - 書評 - 脱「ひとり勝ち」文明論
やらないと、明かりが消えてしまう。

また著者の研究の進め方は、普段の仕事の上でも大変参考になるものがあった。
他者と同じことをすると消耗戦になり、結果的に、それは「ひとり勝ち」ということに結びついてしまう。
そうではなくて、誰でもやろうと思えばできるが、違う視点(アプローチ)から研究をするということ。
それが最終的に、脱「ひとり勝ち」に繋がるのだと。
とは言っても人とは違う発想をするというのが、一番難しいとは思うのですが。。。
かつ、違う視点から考える一つのファクターとしてデータの重要性も述べていました。
まー客観的に実現可能かどうかそこで判断できますからねー。

というわけで、環境本から入った本書ですが、最後は、仕事術の話へと繋がっていく内容でした。

PS
震災があり、↓のような記事もあるのだから、なおさら、太陽光エネルギーの導入は重要と言えよう。
東電が原子力発電所より太陽光発電所を作るべき理由
news - 東日本ソーラーベルトは誇大でも
こちらのエントリーでは、本書を推薦していました。
Park your Power - 電力を駐車場に貯める時代は来るか?

2011/09/13

[icon]Crystal Clear

こちらのサイトは、生きているようだ。

16×16、22×22、32×32、48×48、64×64、128×128までの各サイズがそれぞれ600個以上、全合計で3600個ぐらいある無料で利用可能なアイコン集、それが「Crystal Clear」です。クリエイティブコモンズライセンスで提供されており、PNG形式で提供されています。

via:無料で利用できる600個以上のアイコン集「Crystal Clear」
で知って、これも当時、頻繁にたずねていたが、最近、訪問したときも、無事に生きていてほっとしました。

まー、Crystal Clearが、ドメインがwikimedia.orgとなっていたので、大丈夫だろうとは思っていましたが、代わりに、Everaldo.com : Crystal Iconsのサイトが死んでいました。

ぐぐったところ、Crystal Project Icons - Everaldo: Crystalがあったので、一安心。

結構、たくさんのアイコンがあるので、便利です。

2011/09/12

[button]MyCoolButtonがいつの間にか有料に。。。

トホホ。

だいぶ前に、

サイズ、色、フォントを指定し、テキストを入力することでWeb 2.0風なボタンを作成することができる「Web 2.0 Button Generator」というサービスがありました。

via:Web 2.0風なボタンをオンラインで作成「Web 2.0 Button Generator」
というのを読んで、実際に、My cool buttonサイトをたずねて、色々とボタンを作っていては楽しんでいたのですが、いつの間にか有料に。

確かに、あれから、色々バージョンアップしているようだが、それでも無料でいてほしかった。

2011/09/11

ドラゴンクエスト~勇者アベル伝説~ コンプリートDVD-BOX

そうかーすでに売り切れだったかー。

ツタヤで借りてみたとき、全部で8巻だった気がする。








2011/09/10

[本]JavaScriptクックブック

ようやく読了
JavaScriptクックブック
JavaScriptクックブック
オライリージャパン

はじめに
1章 JavaScript文字列の操作
はじめに
レシピ1.1 複数の文字列を連結する
レシピ1.2 文字列と別のデータ型を連結する
レシピ1.3 条件に基づいて文字列を比較する
レシピ1.4 文字列内で部分文字列を検索する
レシピ1.5 文字列から部分文字列を取り出す
レシピ1.6 文字列が存在し、空でないことを調べる
レシピ1.7 キーワード文字列を個々のキーワードに分割する
レシピ1.8 特殊文字を挿入する
レシピ1.9 textareaを1行ずつ処理する
レシピ1.10 文字列から前後のホワイトスペースを削除する
レシピ1.11 文字列の左右にパディングを施す
2章 正規表現の使用
はじめに
レシピ2.1 部分文字列が存在するかどうかをテストする
レシピ2.2 大文字と小文字を区別しない部分文字列マッチングをテストする
レシピ2.3 社会保障番号を検証する
レシピ2.4 パターンのインスタンスをすべて検出してハイライト表示する
レシピ2.5 パターンを新しい文字列と置き換える
レシピ2.6 キャプチャを使って文字列内の単語を入れ替える
レシピ2.7 正規表現を使ってホワイトスペースを削除する
レシピ2.8 HTMLタグを名前付きエンティティと置き換える
レシピ2.9 特殊文字を検索する
3章 日付、時間、タイマー
はじめに
レシピ3.1 今日の日付を表示する
レシピ3.2 日時をUTCで出力する
レシピ3.3 ISO 8601表記の日付を出力する
レシピ3.4 ISO 8601表記の日付をDateオブジェクトに適した形式に変換する
レシピ3.5 特定の日付を作成する
レシピ3.6 未来の日付をスケジュールする
レシピ3.7 経過時間を追跡する
レシピ3.8 タイムアウトを作成する
レシピ3.9 繰り返し実行するタイマーを作成する
レシピ3.10 タイマーで関数クロージャを使う
4章 数字と算術演算の処理
はじめに
レシピ4.1 増分カウンタを管理する
レシピ4.2 10進数値を16進数値に変換する
レシピ4.3 乱数ジェネレータを作成する
レシピ4.4 色をランダムに生成する
レシピ4.5 テーブルの中の文字列を数値に変換する
レシピ4.6 テーブル列のすべての数値を合計する
レシピ4.7 度数とラジアンの間で変換を行う
レシピ4.8 ページ要素に収まる円の半径と中心を割り出す
レシピ4.9 円弧の長さを計算する
5章 配列とループの操作
はじめに
レシピ5.1 配列をループにかける
レシピ5.2 多次元配列を作成する
レシピ5.3 配列から文字列を作成する
レシピ5.4 配列をソートする
レシピ5.5 値を受け取った順序で格納し、アクセスする
レシピ5.6 値を受け取った順序で格納し、逆の順序でアクセスする
レシピ5.7 新しい配列を既存の配列のサブセットとして作成する
レシピ5.8 配列内を検索する
レシピ5.9 多次元配列を1次元配列にする
レシピ5.10 配列要素を検索して削除または置換する
レシピ5.11 各配列要素に関数を適用する
レシピ5.12 すべての配列要素に関数を適用し、新しい配列を返す
レシピ5.13 フィルタリングされた配列を作成する
レシピ5.14 配列の内容を検証する
レシピ5.15 連想配列を使ってフォーム要素の名前と値を格納する
6章 JavaScript関数の再利用
はじめに
レシピ6.1 再利用可能なコードブロックを作成する
レシピ6.2 関数との間で1つのデータ値をやり取りする
レシピ6.3 引数として複雑なデータオブジェクトを使う
レシピ6.4 動的なランタイム関数を作成する
レシピ6.5 関数を引数として渡す
レシピ6.6 再帰アルゴリズムを実装する
レシピ6.7 状態を記憶する関数を作成する
レシピ6.8 汎用カリー化関数を使ってアプリケーションのパフォーマンスを改善する
レシピ6.9 メモ化を使ってアプリケーションのパフォーマンスを改善する
レシピ6.10 匿名関数を使ってグローバル変数をラッピングする
7章 イベントの処理
はじめに
レシピ7.1 ページの読み込みが完了したことを検知する
レシピ7.2 イベントオブジェクトを使ってマウスクリックイベントの位置を捕捉する
レシピ7.3 再利用可能な汎用イベントハンドラ関数を作成する
レシピ7.4 状況の変化に応じてイベントを取り消す
レシピ7.5 イベントが入れ子の要素伝いに引き渡されないようにする
レシピ7.6 キーボードアクティビティを捕捉する
レシピ7.7 HTML5の新しいドラッグ&ドロップ機能を使う
レシピ7.8 Safariの回転イベントと他のモバイル開発環境を使う
8章 ブラウザの構成要素
はじめに
レシピ8.1 Webページのユーザーにアクションの確認を求める
レシピ8.2 無駄なものを省いた新しいブラウザウィンドウを作成する
レシピ8.3 ページにアクセスするブラウザについて調べる
レシピ8.4 Webページからの移動についてページのユーザーに警告する
レシピ8.5 色のサポートに応じてスタイルシートを変更する
レシピ8.6 ページサイズに応じて画像サイズを変更する
レシピ8.7 CMSテンプレートページでパンくずを作成する
レシピ8.8 動的なページをブックマークする
レシピ8.9 状態の保存を戻るボタンとページの更新に対応させる
9章 フォームの要素と検証
はじめに
レシピ9.1 フォームのテキスト入力の値にアクセスする
レシピ9.2 フォーム要素を動的に有効または無効にする
レシピ9.3 イベントに基づいてフォーム要素から情報を取得する
レシピ9.4 ラジオボタンがクリックされたときにアクションを実行する
レシピ9.5 電話番号の有効性を確認する
レシピ9.6 フォームのサブミットを中止する
レシピ9.7 フォームのサブミットを重複させない
レシピ9.8 フォーム要素を表示または非表示にする
レシピ9.9 フォーム上でのアクションに基づいて選択リストを変更する
10章 デバッグとエラー処理
はじめに
レシピ10.1 JavaScriptがサポートされない状況にうまく対処する
レシピ10.2 関数のエラーをチェックする
レシピ10.3 単純なデバッグとしてアラートを使う
レシピ10.4 エラーを捕捉して適切に処理する
レシピ10.5 処理しやすいエラーを発生させる
レシピ10.6 FirefoxでFirebugを使う
レシピ10.7 Firebugを使ってブレークポイントを設定し、データを調べる
レシピ10.8 Firefoxとコンソール
レシピ10.9 Internet Explorerの組み込みデバッガを使う
レシピ10.10 Internet Explorerの開発者ツールを使ってブレークポイントを設定する
レシピ10.11 OperaのDragonfly
レシピ10.12 Dragonflyを使ってブレークポイントを設定する
レシピ10.13 Safariの開発者ツールを有効にする
レシピ10.14 Safariのデバッガを使ってブレークポイントを設定する
レシピ10.15 Chromeでデバッグする
11章 ページ要素へのアクセス
はじめに
レシピ11.1 特定の要素にアクセスし、その親要素と子要素を調べる
レシピ11.2 Webページ内のすべての画像にアクセスする
レシピ11.3 article要素の画像をすべて検索する
レシピ11.4 Selectors APIを使ってarticle要素の画像をすべて検索する
レシピ11.5 要素グループの親要素を検索する
レシピ11.6 すべての要素で最初の段落をハイライト表示する
レシピ11.7 <ul>にストライプテーマを適用する
レシピ11.8 特定のクラス名を持つすべての要素を配列にまとめる
レシピ11.9 ある属性を共有する要素をすべて検索する
レシピ11.10 選択されたオプションをすべて取得する
レシピ11.11 テーブル行のすべての値を合計する
レシピ11.12 要素の属性を取得する
レシピ11.13 要素のスタイル情報を取得する
12章 要素と属性の作成と削除 はじめに
レシピ12.1 innerHTMLを使ってコンテンツをすばやく簡単に追加する
レシピ12.2 ページの既存の要素の前に要素を挿入する
レシピ12.3 ページの最後に新しい要素を追加する
レシピ12.4 Internet Explorerの古いバージョンで新しい要素のスタイルを設定する
レシピ12.5 新しい段落を挿入する
レシピ12.6 新しい段落にテキストを追加する
レシピ12.7 既存の要素に属性を追加する
レシピ12.8 Boolean属性を評価する
レシピ12.9 属性を削除する
レシピ12.10 段落を移動する
レシピ12.11 リンクを脚注の箇条書きに置き換える
レシピ12.12 既存のテーブルに行を追加する
レシピ12.13 div要素から段落を削除する
レシピ12.14 HTMLテーブルから行を削除する
レシピ12.15 要素のCSSスタイルプロパティを変更する
13章 Webページ空間の操作 はじめに
レシピ13.1 Webページの領域を割り出す
レシピ13.2 要素を測定する
レシピ13.3 ページ内の要素の位置を確認する
レシピ13.4 ページの一部を非表示にする
レシピ13.5 たたみ込み可能なフォームセクションを作成する
レシピ13.6 ページオーバーレイを追加する
レシピ13.7 タブページを作成する
レシピ13.8 マウスホバーで表示されるポップアップ情報ウィンドウを作成する
レシピ13.9 サイドバーのたたみ込みとサイズ変更
14章 対話性とアクセシビリティ はじめに
レシピ14.1 非表示のページセクションを表示する
レシピ14.2 アラートメッセージを作成する
レシピ14.3 データが正しく設定されていないフォームフィールドをハイライト表示する
レシピ14.4 ページオーバーレイにキーボードアクセシビリティを追加する
レシピ14.5 たたみ込み可能なフォームセクションを作成する
レシピ14.6 カラーフラッシュでアクションを示す
レシピ14.7 タブページにARIA属性を追加する
レシピ14.8 ライブリージョン 15章 メディアを活かした対話型アプリケーションの作成 はじめに
レシピ15.1 Canvasで基本的な図形を作成する
レシピ15.2 Internet ExplorerでCanvasアプリケーションを実行する
レシピ15.3 Canvasに動的な折れ線グラフを描画する
レシピ15.4 JavaScriptをSVGファイルに追加する
レシピ15.5 WebページのスクリプトからSVGにアクセスする
レシピ15.6 Internet ExplorerでSVGをエミュレートする
レシピ15.7 HTMLに対話型のSVGを埋め込む
レシピ15.8 数学関数を使ってSVGでリアルなアナログ時計を作成する
レシピ15.9 SVGとcanvas要素をHTMLに組み込む
レシピ15.10 FirefoxとWebKit/SafariでWebGLのサポートを有効にする
レシピ15.11 オーディオファイルの再生中にルーチンを実行する
レシピ15.12 video要素を使ってJavaScriptからビデオを制御する
16章 JavaScriptオブジェクト はじめに
レシピ16.1 基本のJavaScriptオブジェクトを定義する
レシピ16.2 オブジェクトのメンバをプライベートにする
レシピ16.3 オブジェクトをプロトタイプで拡張する
レシピ16.4 オブジェクトにゲッターとセッターを追加する
レシピ16.5 オブジェクトの機能を継承する
レシピ16.6 新しいプロパティを定義してオブジェクトを拡張する
レシピ16.7 オブジェクトのプロパティを列挙する
レシピ16.8 オブジェクトの拡張性を抑制する
レシピ16.9 オブジェクトへの追加やプロパティデスクリプタの変更を阻止する
レシピ16.10 オブジェクトへの変更を阻止する
レシピ16.11 1回限りのオブジェクトとJavaScriptの名前空間を実装する
レシピ16.12 Prototype.bindで"this"を再発見する
レシピ16.13 オブジェクトのメソッドを数珠つなぎにする
17章 JavaScriptライブラリ はじめに
レシピ17.1 コードをパッケージ化する
レシピ17.2 コードをJsUnitでテストする
レシピ17.3 ライブラリをミニファイする
レシピ17.4 ライブラリをホストする
レシピ17.5 外部ライブラリ:jQueryフレームワークを使う
レシピ17.6 既存のjQueryプラグインを使う
レシピ17.7 ライブラリをjQueryプラグインに変換する
レシピ17.8 アプリケーションで複数のライブラリを安全に組み合わせる
18章 通信 はじめに
レシピ18.1 XMLHttpRequestオブジェクトにアクセスする
レシピ18.2 データを送信するための準備
レシピ18.3 クエリ呼び出しの種類を特定する
レシピ18.4 Ajaxリクエストにコールバック関数を追加する
レシピ18.5 エラー状態を調べる
レシピ18.6 テキストの結果を処理する
レシピ18.7 Ajaxリクエストを別のドメインに送信する
レシピ18.8 サーバーの選択リストを設定する
レシピ18.9 タイマーを使ってページを新しいデータで自動的に更新する
レシピ18.10 postMessageを使ってウィンドウ間で通信する
19章 構造化データの処理 はじめに
レシピ19.1 Ajax呼び出しから返されたXMLドキュメントを処理する
レシピ19.2 XMLツリーから関連情報を取り出す
レシピ19.3 JSONを使ってJavaScriptオブジェクトを生成する
レシピ19.4 JSONフォーマットの文字列を解析する
レシピ19.5 JSONを使ってオブジェクトを文字列に変換する
レシピ19.6 hCalendarアノテーションをCanvasのタイムラインに変換する
レシピ19.7 RDFプラグインを使ってページのRDFaをJSONに変換する
20章 永続性 はじめに
レシピ20.1 永続情報をURLに追加する
レシピ20.2 ページ間で情報を維持するためのCookieを作成する
レシピ20.3 history.pushStateメソッドとwindow.onpopstateを使って情報を維持する
レシピ20.4 クライアント側のストレージとしてsessionStorageを使う
レシピ20.5 クライアント側でlocalStorageデータストレージアイテムを作成する
レシピ20.6 リレーショナルデータストアを使ってデータを永続化する
21章 アウトサイドJavaScript はじめに
レシピ21.1 ブラウザのアドオン、プラグイン、拡張機能を作成する
レシピ21.2 デスクトップウィジェットとモバイルウィジェットを作成する
レシピ21.3 PhoneGapを使ってJavaScriptアプリケーションを作成する
レシピ21.4 JavaScriptを使ってツールを拡張する
レシピ21.5 Web WorkersとFile APIを使ってデスクトップアプリケーションを作成する
索引

via:目次
もう何もいうことはありません。 モダンブラウザを始め、種々の問題とその解決策を網羅している一冊。 少し前までは、クックブックがでるとは思わなかった。 それほど時代が求めているのだろう? 語る必要はない。 まずは、立ち読みで確認を。

2011/09/09

[twitter][design]Bootstrapをもとに勉強

これは、すばらしい。

CSSを使うWebアプリケーションを作るためのツールキットで、CSSの文字指定、フォーム、ボタン、テーブル、グリッド、ナビゲーション、アラートなどなどを使ってアプリケーションのフロントエンドを作る。

via:Bootstrap: Webアプリケーションのための高度なCSSフロントエンドを手早く作れるツールをTwitterがリリース
ガチなデザインのもと、HTMLを組もうとすると、すっげー時間がかかってしまう。

ここ数週間(ひょっとしたら数ヶ月間)デザインで悩んでしまった。
正確には、CSSに悩んでしまう。

JavaScriptもさることながら、CSSもブラウザによって解釈が違うので、やになってしまう。
特にIE!!

このサービスを利用することで、そんなブラウザ間を意識することなく、統一性のとれたCSS及びデザインが組めればと思う。

2011/09/08

[google]webfontもCDN経由でローディング

昨日の記事を書いているときに、ドキュメントを読みながらだったのですが、なんと、webfontも動的ローディングができるようです。

pathが、https://ajax.googleapis.com/ajax/libs/webfont/1.0.22/webfont.js

なので、

<script src="https://ajax.googleapis.com/ajax/libs/webfont/1.0.22/webfont.js" ></script>
でいけちゃいます。

なんか、この勢いで、すべてをCDN経由にしたいなーっと思う今日この頃。

2011/09/07

[google]swfobjectをCDN経由でローディング

かなーり前にgoogleのCDNを経由させて、jQueryをローディングする方法を紹介しましたが、同様に、フラッシュ再生用のオブジェクトを各ブラウザで自動生成してくれるswfobjectもCDNで動的にローディングできるようです。

<script src="https://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js" ></script>
これさえあれば、自分のディレクトリにアップロードしなくても呼び出すことができるので便利ですね。

2011/09/06

ちょっとコレほしいかも

もう25周年になるんですねー。

第一作から。


弟が買うようだ。

チャーンス!!