技術メモ カテゴリー

web系技術メモ

hで悩む

[技術メモ] 2008年6月30日(月曜日) 21:54

<h1>が悩ましい

<h1>タグ。言わずと知れた大見出しです。最近、これの使い方で悩んでおります。
皆様ご存知のとおり、hタグは、1~6と段階があり、h1から途中を飛ばさずに構造化して使うことになっています。h1タグは各ページに1つまで。SEO的には<title>とほぼ同じ内容のものが良いとされているようです。

ドキュメントの名前を明示する場所は何処?

<h0>が欲しいと思いませんか?(ノ∀`)それっぽいメタタグもありそうですが、いまいち一般的ではなく……<title>はパンくずまみれですし、本来<h1>的な「第1章 なんとかかんとか」なんてのでは、肝心のドキュメントの名前が伝わりません。ドキュメント名、本で言えば書名を明示する場所は何処が相応しいのでしょう。

<h1>に書いてしまうと文章構造としては不自然な気も

会社案内サイトの場合は<h1>は会社名(+コピー)にし、ヘッダ辺りに埋め込むのが常套でしょうか。
その場合、<h1>はメタタグ的な役割になってしまい、文章構造用としては死んでしまいます。サイト構造に引きづられると言いますか、そもそも「サイト構造=文章構造」なのだから良いではないかとも思いますが、見出しは見出しであって、サイトの名称は見出しではありませんので、なんか腑に落ちません。

世のサイトを見てみましょう

まずw3c

トップページの<h1>は「The World Wide Web Consortium (W3C)」
第2階層ページは7つ中6つの<h1>が「W3C」。w3cも、似たようなジレンマを抱えているように見えます。

次に米ヤフー

あまりにも大きすぎて、第2階層が別サービスになってます(ノ∀`)
ちょろっと眺めた感じでは、記事ページは記事名が<h1>、それ以外はコンテンツ名が<h1>かもしれません。
ルールは存在しているようですが、やはり自前ルールと言えそうです。

ああ、なんと悩ましげなhでしょうか。

コメントは受け付けていません。

ctrl二度押しで検索窓

AutoHotkeyで、googleデスクトップのアレを作ってしまおう…な、
googleデスクトップのCTRLダブルクリックのあれ2のその後です。

CTRL2度押しの調整

ctrlを連打した際の挙動は好み次第でしょうか。

3度押し以上も2度押しと同じ扱いにする場合

新・なまず日記方式がエレガントです。

~Control::
	SetTimer, Control_CheckCnt, 170
	Control_cnt += 1
return

Control_CheckCnt:
	Hotkey, ~Control, Off
	SetTimer, Control_CheckCnt, Off

	if(Control_cnt >= 2)
	{
		;ここにコード
	}
	Control_cnt = 0
	Hotkey, ~Control, On
return

この場合ctrl連打が終了するまで反応しません。

2度押し直後に反応し再反応しない

ctrlを連打しても2回目で反応し、尚且つそのまま連打し続けても再反応しない挙動の場合。

~Control up::
	if( A_PriorHotKey = A_ThisHotKey and A_TimeSincePriorHotkey < 180
	and (tempA_TimeSincePriorHotkey > 400 or tempA_TimeSincePriorHotkey == -1) ) {
		GuiControlGet, Gui_mode, Visible, Value
		if (!Gui_mode) {
			Gui, Show, x204 y145 h41 w286, 検索してね-AHK
			GuiControl, Focus, Value
		} else {
			Gui, Hide
		}
	}
	tempA_TimeSincePriorHotkey := A_TimeSincePriorHotkey
return

前回と前々回 ctrl が押された時間を記録し、前々回が近すぎる場合を3度押しとして除外します。
こちらの挙動の方がしっくり来るので、現在はこれを利用中。

URLエンコード

Operaの備忘録のぺえじ 方式がエレガントです。別途テキストファイルを用意する手間が必要ですが、しっかりとした出力が得られます。
googleツールバーとの相性も抜群で、ハイライト表示などにも齟齬が全くありません。
urlencode

他のコードも何種か試しましたが文字コードの関係でしょうか、それらは、googleツールバーとの相性が悪く残念な結果に終わりました。
urlencode

今のコード

今のところ、このコードで使ってます。
そこそこ満足なので、この件は完了かなヽ(・∀・)ノ

Gui, Add, Edit, vValue x12 y11 w220 h20 , 
Gui, Add, Button, Default x242 y11 w30 h20 , GO
GUI, Hide
tempA_TimeSincePriorHotkey := A_TimeSincePriorHotkey

URLEncode(str)
{	;http://orera.g.hatena.ne.jp/misttrap/20070214/p1
	ret =
	tmp = 0
	ini = %A_ScriptDir%\sjis2utf8E.ini
	Loop, parse, str
	{
		num := Asc(A_LoopField)
		if tmp <> 0
		{
			tmp += %num%
			IniRead, val, %ini%, zenkaku, %tmp%
			ret = %ret%%val%
			tmp = 0
		}
		else if A_LoopField in a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,0,1,2,3,4,5,6,7,8,9,-,_,!,~,*,.,(,)
		{
			ret = %ret%%A_LoopField%
		}
		else if num < 128
		{
			IniRead, val, %ini%, ascii, %num%
			ret = %ret%%val%
		}
		else if(num > 160 && num < 224)
		{
			IniRead, val, %ini%, hankana, %num%
			ret = %ret%%val%
		}
		else
		{
			tmp := num * 256
		}
	}
	return ret
}

~Control up::
	if( A_PriorHotKey = A_ThisHotKey and A_TimeSincePriorHotkey < 180
	and (tempA_TimeSincePriorHotkey > 400 or tempA_TimeSincePriorHotkey == -1) ) {
		GuiControlGet, Gui_mode, Visible, Value
		if (!Gui_mode) {
			Gui, Show, x204 y145 h41 w286, 検索してね-AHK
			GuiControl, Focus, Value
		} else {
			Gui, Hide
		}
	}
	tempA_TimeSincePriorHotkey := A_TimeSincePriorHotkey
return

~Esc::
	GUI, Hide
	GuiControl,,Value 
return

ButtonGO:
	Gui,submit
	Gui, Hide
	GuiControl,,Value
	search_str := URLEncode(Value)
	Run,http://www.google.co.jp/search?q=%search_str%
return

Comments (1)

googleデスクトップのCTRLダブルクリックのあれのその後。いろいろ微調整中。今後もまた調整するかも。

Gui, Add, Edit, vValue x12 y11 w220 h20 , 
Gui, Add, Button, Default x242 y11 w30 h20 , GO
GUI, Hide


URLEncode(str)
{
	ret =
	tmp = 0
	ini = %A_ScriptDir%\sjis2utf8E.ini
	Loop, parse, str
	{
		num := Asc(A_LoopField)
		if tmp <> 0
		{
			tmp += %num%
			IniRead, val, %ini%, zenkaku, %tmp%
			ret = %ret%%val%
			tmp = 0
		}
		else if A_LoopField in a,b,c,d,e
		,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v
		,w,x,y,z,0,1,2,3,4,5,6,7,8,9,-,_,!,~,*,.,(,)
		{
			ret = %ret%%A_LoopField%
		}
		else if num < 128
		{
			IniRead, val, %ini%, ascii, %num%
			ret = %ret%%val%
		}
		else if(num > 160 && num < 224)
		{
			IniRead, val, %ini%, hankana, %num%
			ret = %ret%%val%
		}
		else
		{
			tmp := num * 256
		}
	}
	return ret
}

~Control up::
if(A_PriorHotKey = A_ThisHotKey and A_TimeSincePriorHotkey < 180)
	GuiControlGet, Gui_mode, Visible, Value
	if (!Gui_mode) {
		Gui, Show, x204 y145 h41 w286, 検索してね-AHK
		GuiControl, Focus, Value
	} else {
		Gui, Hide
	}
return

~Esc::
	GUI, Hide
	GuiControl,,Value 
return

ButtonGO:
	Gui,submit
	Gui, Hide
	GuiControl,,Value
	search_str := URLEncode(Value)
	Run,http://www.google.co.jp/search?q=%search_str%
return

その後

↑だと、ctrl3回押しが2度押し×2回になっちゃいます(ノ∀`)
CTRL二度押しに関しては新・なまず日記の方が期待通りに動くようです。

Comments (1)

近頃は、vista IE7をメインにコーディングしています。
本日ハマったのが、その vista IE7のlist-style-image。
マイナーCMSのスキンCSSをいじっている最中の出来事。
list-style-image:none; でオーバーライドしても、なぜか有効になりません。
いえ、ちょっと違います。有効にはなるのですが、オーバーライドして消したはずの画像がチラチラ表示されます(ノ∀`)
cssにミスがあるのかと思いきや、IEの窓を画面外に動かしたり、該当箇所をドラッグしたりすると、消えたり現れたり。
どうも、仕様と言うよりはバグっぽい挙動です。(NN3がバグった時を思い出しました…古)
OSレベルなのかレンダリングエンジンレベルなのか、はたまたハードが悪いのかw

未検証ですが、覚書として。

ちょっと検証

上記を書いた翌日です。そのCMSをいじる中、別のオーバーライドでハマりました。
簡単なコードで検証してみたところ、上記CMSのプレビュー画面でのみ再現しましたので、ひょっとしなくとも、そのCMSの謎仕様かもしれません。IE7無罪の予感。

コメントは受け付けていません。

この現象について記述しているサイトを見つけられなかったので、記録しておきます。windowsXP以降は一応IE7がデフォルトとなりましたので、今更なIE6です(ノ∀`)
しかし、コーダとしては、一応まだターゲットブラウザから外す訳にもいかず……

IE6のバグ
実働現物

どんなバグかと言いますと、3つ以上のブロックをfloatで並べると一部のテキスト末尾がゴーストよろしく、他所に表示されてしまうのです。何処に現れるかはケース次第で、場合によっては運良く見えない事もあります。

回避方法は、3つ以上並べないこと(笑)いえ、諦めろという意味ではありません。□ □ □ と並べずに、□ (□ □) と2分割の入れ子にすれば大丈夫なのです。
3ペインの場合、今でもIE6対策で、やむを得ずそのようなコーディングをしております(ノ∀`)入れ子自体は文章構造的にはまったく必然性がありません

はやくIE6が駆逐されますように\(^o^)/

Comments (2)

すこぶる好調。しかし、

Gavotte Ramdisk を入れてみるから2日が経過。すこぶる好調です。
仮想メモリの一部をramdiskに割り当てており、その雄姿を拝もうとそれっぽいツールで覗き込んでみたのですが…

  • ページングファイルを複数ドライブに設置すると両方均等?に使う
  • vistaは案外ページングファイルを使わない

ように見えました。
750MB程度のramdiskだけのページングファイルでは心もとないので、HDDの一部も割り当てていました。ramdiskを優先的に使ってもらえればありがたいのですが、どうやらそうでもない模様。
後者に関しては当然、たくさん窓を開けば消費しますので、思っていた以上にvistaが「賢い」感じでしょうか。
なにやら、superfetchやら、readyboostやら、いろんな機能があるようです。
superfetchのおかげでしょう、アプリの起動はXPよりも数段早い印象です。

調子に乗ってみました

ページングファイルを全部ramdiskにしたい(*゚∀゚)=3
750MBではいかんともしがたく、調子に乗って4GB追加してみました。4,7GBもあれば流石に十分でしょう…
よく見ると推奨サイズ(約4.9GB)に届いていない(ノ∀`)しかもなぜか4095MBまでしか割り当てられない。
とりあえず、4GBをページングファイルに割り当て、残りはtempフォルダに当ててみました。
ついでに、ほとんど使っていない2GBのUSBメモリも差込み、readyboost として使用。しかし、HDDより遅いUSBを差し込んで、早くなるものなのでしょうか(・ω・)

Windows ReadyBoost によると、

ReadyBoostは、内部的には、前述したSuperFetchの追加キャッシュとして機能する。ユーザーの挙動に応じてリード・オンリー・ページのデータをキャシュし、ページ・フォールトが発生したとき(スワップ・アウトされているページをスワップ・インする必要が生じたとき)に、遅いハードディスク上のスワップ・ファイルからではなく、可能であればReadyBoostデバイス上のキャッシュからページ・インを実行する。

どうやらこの環境の場合、USBは挿さないほうがよさそうです。

おまけで、ramdiskのベンチマーク
ramdiskベンチ
ああ、なんか次世代先取りな感じで気持ちがいい数字

Comments (1)

4GBのメモリがあるのですが、Vista32ビットなので1GB弱、使えていません。そんな、悲しい残メモリをramdiskにして使い切る、Gavotte Ramdiskを試してみました。
私の環境での導入方法は、まとめサイトよりもVistaでGavotte Ramdiskを使う のがジャストフィットでした。拍子抜けするくらい簡単。
ページングファイルに割り当てて再起動しても消えません。

ramdiskをページングファイルに

今のところ、まだ不都合は出ておりません。
大丈夫そうなら8GBに増設してページングファイルを全部ramdiskにしちゃおうかな(*゚∀゚)=3

Comments (1)

小指が空振りする

私の小指には、CTRLキーを二度押すと検索窓が立ち上がるあのインターフェイスが染み付いてしまったようで、ちょっと検索しようと思い立つと、自動的に小指がカクカク動いてしまいます(ノ∀`)

なぜかgoogleデスクトップは使えない

ええ、素直にgoogleデスクトップを使えばよいのですが、VistaSP1のうちの環境では、どうもインデクス化?の相性が悪いのか、いつの間にかTEMPフォルダがアーカイブファイルの解凍ファイルで溢れてしまうのしまうのです。これでは流石に使い物になりません。

代替ソフトを探す

さまざまなホットキーランチャーを物色しました。しかしなかなか見つかりません。

  • ctrlキーの二度押し」にあっさり対応している
  • できれば「専用入力窓」が欲しい

を満たしたのは、AutoHotkeyでした。
しかしこれ、すごい便利ですね。可能性無限大。好きにスクリプトを組めるので、かゆい所に手が届きすぎです。
ウェブ検索にしか使わなかったgoogleデスクトップには戻る必要がなくなってしまいました。

成果スクリプト

Gui, Add, Edit, vValue x12 y11 w220 h20 , 
Gui, Add, Button, Default x242 y11 w30 h20 , GO
GUI, Hide

~Control::
	SetTimer, Control_CheckCnt, 200
	Control_cnt += 1
return

Control_CheckCnt:
	Hotkey, ~Control, Off
	SetTimer, Control_CheckCnt, Off

	if(Control_cnt == 2)
	{
		Gui, Show, x204 y145 h41 w286, 検索してね-AHK
	}
	Control_cnt = 0
	Hotkey, ~Control, On
return


~Esc::
	GUI, Hide
	GuiControl,,Value 
	Control_cnt = 0
return

ButtonGO:
	Gui,submit
	Gui, Hide
	GuiControl,,Value 
	Run,http://www.google.co.jp/search?q=%Value%
	Control_cnt = 0
return

※公開後 http://lukewarm.s101.xrea.com/myscripts/ のダブルクリックスクリプトだと「長押し」でもダブルクリック扱いになってしまったので新・なまず日記のものを流用して組みなおしました。

なんと、コンパイルまで出来るのですね((((゜д゜;))))
しばらくgoogleデスクトップの代わりにこれを使ってみます。

Comments (1)