Hatena::ブログ(Diary)

Higé au lait Twitter

 | 

2009年03月29日

デジタル一眼レフサイコー @ 大岡川・お花見フォトウォーク

テクテクパチリ! - [お知らせ] 3/28大岡川お花見フォトウォーク詳細です

Picture 292
Picture 292 by higeorange on Zooomr


参加 2 回目のテクパチ・フォトウォーク 大岡川・お花見フォトウォークに参加してきた。

3 日前に買ったデジタル一眼レフのデビューなのですよ。今までフィルムでもまともに一眼レフを触わったことがなかったために基本的なことがわかってない状態での撮影。しぼり優先で撮っていたけど。どれくらい絞ればいいのかがわからず…。要勉強。


肝心の桜のほうは満開ではなく2、3分咲きくらい。暇なら来週末くらいにどこか満開の桜撮りにいこうかなぁ。

桜以外は昔ながらの商店街を歩き撮り歩き撮り。古い銭湯、いつもどおりの下向き加減の撮影。たまには上も撮らないとなぁ。

今日撮った写真の一部

Error 404 - Not Found

2009年03月27日

デジタル一眼レフ購入

Nikon D60 を買った。買うと決めたら早めに買っとかないといろいろ考えすぎて結局買わないということが多いので即決。

標準ズーム一本のセット。望遠ズームはあったほうがいいのかなぁ。



週末に参加 2 回目の テクパチがあるので思う存分写真を撮ってくる。

2009年03月23日

デジタル一眼レフを買おうかなぁ

最近カメラが熱いのですよ。

テクパチ とか 巨大撮影会 *1 などいろいろ写真撮影しようぜイベントが周りで盛り上がっていることもありより一層力を入れて写真というものを撮ってみようかなと思っている。

VQ1005 と携帯電話のカメラだけじゃもの足りなく感じている。そこでメインになるデジタル一眼レフを買おうと思う。で何にするかだ。


候補

  • Nikon D60 (D90 は少し重かった)
  • Canon EOSKissX2
  • Olympus E520 (E620 もいいなぁと思ったけど高い)

安さ、軽さ重視なところがある。それならコンパクトデジタルカメラでいいじゃないという考えも。


んー。悩む。

*1:名前違うか。まだ参加したことないけど。

2009年03月17日

Opera の右クリックイベント検出

IE, Firefox, Safari だと

var d = document.getElementById('hoge');
d.oncontextmenu = function(e) {
    if(window.event) event.returnValue = false; // for IE
    else e.preventDefault();
    // なんらかの処理
}

のようなコードで右クリックでコンテキストメニューを表示させないで処理を実行できる。


しかし Opera の場合、同じような動作を実現することはできない。

まずデフォルトの状態だと右クリックを JavaScript で検出することさえできない。

検出できるようにするには、

Preferences -> Advanced -> Content -> JavaScript Options -> Allow script to recive right clicks*1

のチェックをつける。

さらに Opera には oncontextmenu というイベントハンドラがないので

d.addEventListener('mousedown', function(e) {
    if(e.button == 2) {
        // なんらかの処理
   }
}, false);

のように mousedown イベントをみる必要がある。まだ問題がある。コンテキストメニューを表示させないで処理を実行することができない。 preventDefault() でも駄目。


解決策ではないんだけど alert() を処理に含めればコンテキストメニューを表示させないで実行できる。もちろんアラートダイアログはでるけどね。


最後の手段として Opera 自体のコンテキストメニューを無効にしてしまう方法がある。

opera:config#UserPrefs|AllowContextMenus

のチェックをはずせば OK。ただし、いかなる場所でコンテキストメニューが表示されないので不便すぎる。

*1:日本語に読み替えてね

2009年03月16日

ページ内検索と表示されていない文字


<p>hog<span style="display:none;">fuga</span>e</p>
<p>hog<span style="visibility:hidden;">fuga</span>e</p>

上記のような HTML だと 1行目は 'hoge' 2行目 は 'hog e' と表示される。

このようなページで 'hoge' とページ内検索をしたらどうなるかを各ブラウザで調べてみた。


IE & Firefox

1, 2行目いずれもマッチせず。

Opera

1 行目のみマッチ。

Safari

1, 2行目ともにマッチ。


だいぶ違うなぁ。

結論としてはページ内検索されるような要素の中に display: none; な要素を含まないってことかな。


参考: 気づいたページ

Firefox のキーボードショートカット | Firefox ヘルプ

キーボードショートカット(Ctrl+W) の文字列の "Ctrl" と "+" の間に Mac 用に "Cmd" という文字が隠されている。

2009年03月07日

フォーカスイベントとタブ切り替え

input や textarea にフォーカスがあったってる状態でタブを切り替えたときに focus, blur イベントがどのように起こるか各ブラウザを調べてみた。


テスト内容

テストページ


ページには input[type=text], textarea, button が並んでる。

各要素はフォーカスすると 要素名を書き出し、フォーカスが外れると 要素名: blur と書き出すようになっている。

やったことはテストページと別のページを開いておき、input or textarea or button のいづれかの要素にフォーカスした状態でもう一方のページに切り替え、テストページに戻るというテスト。ページの切り替えはタブバーを使った。


テストしたブラウザは IE 7, Firefox 3.0.6, Opera 9.64, Safari 3.2.2 の 4 つ。いづれも Windows 環境。


結果

IE & Firefox

テストページから別のページを切り替えると blur イベントが発生。つまりフォーカスが外れる。

戻ってくると同じ要素にフォーカスがあたり focus イベントが発生。


Opera

テストページから別のページを切り替えてもフォーカスは外れない。

戻ってきてもフォーカスされたまま。

ページ切り替えでイベントは発生しない。


Safari

ちょっと挙動がつかみづらいのでもしかしたら違うかも。

テストページから別のページを切り替えるとフォーカスが外れる。ただし blur イベントが発生しない。

戻ってくるとフォーカスは外れたまま。

再びその要素にフォーカスすると blur イベント(さっき外れたときのイベントと思われる。) と focus イベントが発生。

blur イベントはその要素にフォーカスせずともページをクリックしただけでも起こる。


この違いがどのような不具合をもたらすのかがいまいち思いつかない。

2009年03月05日

$.each の落とし穴

jQuery の $.each は for で書くよりさくっとかけて便利だ。 *1

使い方は

$.each([0, 1, 2], function() { alert(this); })

のように、第1引数に Array (or Object)、 第2引数に各要素に対する処理 Function を書く。


this は それぞれの値(この例だと 0, 1, 2)が入ってくるんだけど、ここで注意すべき点は型が Number から Object に変換されること*2

つまり下のようなコード*3だと、'a', 'b', 'c' と順にアラートすると思ったら 'hoge' としかアラートされない。これは、switch が '===' で比較しているため。

$.each(['a', 'b', 'c'], function(){
             alert(typeof this) // object
	switch(this) {
		case 'a':
			alert('a')
			break;
		case 'b':
			alert('b')
			break;
		case 'c':
			alert('c')
			break;
		default:
			alert('hoge')
			break;
	}
})

型変換されずに元の値をそのまま使いたい場合は

$.each([0, 1, 2], function(i, v) {
    alert(typeof v) // number
    alert(v)
}

このように、$.each の 第2引数の関数の第2引数 (上の例だと v)を扱う必要がある。ちなみに 第一引数 (上の例だと i)はインデックス(key) が入る。


$.each 内で switch や === を使って this を比較するときは気をつけようね。


追記 1:10

Number or String が Object に変換されるってのはつまり

var n = 3
s.apply(n)
function s {
    alert(this) // 3
    alert(typeof this) // object
}

こういうことなんですね。

*1:Array.forEach() が全ブラウザで使えるようになればいいんだけど。

*2:String も Object に変換される

*3:うまい例が思いつかず。

 |