Archive for 4月, 2009

CAPTCHAの近況

火曜日, 4月 28th, 2009

みなさまこんにちは、加賀田です。本日はCAPTCHA関連のニュースを続けて見つけたので、そのことについてメモ。

まず、ITmediaからCHAPTCHAを破ってGmailアカウントを取りに行くワームのお話。Hotmailなんかでも以前から同様のニュースが出ていましたね。

ちなみに、こちらがGmailの新規アカウント取得画面。この画面、場合によっては人間であるはずのわたし自身にも自信を持って読めないテキスト画像をよこしてくるんですが…。ワームの正答率がどれほどかは伝わってきていませんが、Google側が対策を講じるくらいですから、それなりのものなんでしょう。

で、その対策として試作されたというのが、画像を回転させるCHAPTCHAというものだそうで。丸い写真の上にあるスライダーで画像を回転させるんでしょうか。で、写真の天地を正しく調整できたら人間扱いする…ということなんでしょうね。

写真のような複雑な画像を使えば、確かにテキスト画像よりはボットに破られにくくはなるんでしょう。でも、スパマー側の技術革新も無視できません。結局いたちごっこになりそうな感はあります。

しかも、人手を使ってCHAPTCHAを破る有料サービスなんていうものまで出てきているそうで。もはや、人間と機械を区別するだけでは間に合わない状況にすらなりつつあるようです。というか、世の中にはいろんな仕事があるものです…。

そしてこれらのニュースと時を同じくして、スラッシュドット・ジャパンにもCHAPTCHAに関する議論が上がっています。CHAPTCHAの入ったフォームを初めて見たときには「うまいことを考える人もいるもんやなあ」とのんきに感心していたものでしたが、その実なかなか難しい問題をはらんでいますね。

お別れのご挨拶

金曜日, 4月 17th, 2009

皆さん、こんにちは。加藤です。
突然ですが、来週いっぱいを持ちまして退社することになりました。
おそらくこの投稿が最後の投稿になると思われます。

入社して2年ちょっと。このブログを始めて2年弱。
読者の皆様、関係各位の皆様、大変お世話になりました。

特に、未経験で入社した私を根気よくご指導いただいた諸先輩方、心よりお礼申し上げます。

次の仕事も制作会社ではないですが、Web関連で変わらずWebサイトを作る予定です。
またどこかでご縁がありましたら、よろしくお願いいたします。

それでは、私は去りますが今後ともWeb&Peaceをよろしくお願いいたします。

Firefox3.0.8が不安定

木曜日, 4月 16th, 2009

みなさまこんにちは、加賀田です。突然ですが表題のとおり、Firefoxの現行版3.0.8がなんだか不安定みたいです。皆様の環境ではいかがでしょう?

わたしの業務用マシン(WindowsXP)では、Firefoxを3.0.8にインストールしてからクラッシュの頻度が目に見えて増えました。もっとも、増えたといっても日に一度あるかないかくらいですが(Firefox2のころはもっとひどいこともあったもんなあ)、それでもブラウザのクラッシュにはいらっとするもので。加藤のマシンでも、似たような状況らしいです。

当初はアドオンが増えすぎたかなあなんて内部要因を疑っていたのですが、うち以外でも3.0.8がクラッシュしているらしいという話も聞こえてきました。Mozilla Fluxさんの記事によれば、マルウェアとWindows版Bonjourに嫌疑がかかっているようです。

そういうわけで、とりあえず業務用マシンのBonjourを停止してみました。実は弊社内ではiTunesによる音楽ファイルの共有を行っていて、これを止めちゃうと若干さびしくなるのですが背に腹は代えられません。しばらくはこれで様子を見るとしましょう。

現在所属しているカテゴリ・サブカテゴリにクラス変更

月曜日, 4月 13th, 2009

皆さん、こんにちは。加藤です。
今日も夏のような陽気ですね。
自宅の気温計は25度を超え、すでに冷房をつけたい気持ちにかられています。
とりあえず、今週は先週ほどは気温は上がらないようですが、このままでは4月から冷房をつけるというエコ的にありえない行動に出てしまいそうです。。。

さて、本日は1年ほど前の掘り出し物を使う機会があったのでご紹介させてください。
「現在所属しているカテゴリ・サブカテゴリにクラス変更」ということで、これだけではなんのこっちゃ分からないと思いますので、説明しますと

まず、MTなど動的にページを出すときのサイドメニューで、現在閲覧しているページが所属している、カテゴリ名・サブカテゴリ名・記事タイトル名などのクラスを変えるスクリプトを作ってみました。
MTの場合、工夫すればMTタグのみで実現可能なのかもしれませんが、私は実現できなかったのでJavaScriptで実現しました。
サンプルイメージとしては以下のようなカンジです。

p_stay

上の図は通常の状態。下の図は、このスクリプトを利用し、その記事が属しているカテゴリ・サブカテゴリ(あるいは記事タイトル)にクラス名stayをつけて、どこに属しているのか分かりやすくしています。
ソースは以下のようになります。

function highlightpage(){
var nurl1 = window.location.href;//現在地のURLを取得

var nurl2 = nurl1.split(“index.html”);//現在地のURLからindex.htmlを除く。これは要らないかも。
var nurl3 = nurl1;//これも要らないかも
var nurl5 = nurl3.split(“/”);//”/”で分解
var nurl4 = nurl5[0]+”//”+nurl5[2]+”/”+nurl5[3]+”/”;//カテゴリまでのURL
var nurl6 = nurl5[0]+”//”+nurl5[2]+”/”+nurl5[3]+”/”+nurl5[4]+”/”+nurl5[5]+”/”;//サブカテゴリまでのURL
var nav = document.getElementById(“メニューのID名”);
var links = nav.getElementsByTagName(“a”);

for(var i=0; i<links.length; i++){
var linkurl = links[i].getAttribute(“href”);
if(nurl1 == linkurl){
links[i].className = “stay”;
}
}
}

こんな感じです。タイトルのクラスを変えるときは、単純に現在地のURLと比べれば良いと思われます。
また、カテゴリ・クラス名はMTTopLevelCategoriesなどカテゴリー一覧リストで出力することを前提としています。
一覧で出力せずに、通常のHTMLでサイドメニューを構築しているのであれば、このスクリプトを使わずともMTタグで出来ると思われます。
色々、試行錯誤しつつやっていたので無駄なソースがあるかも。
やっていることは、現在のURLを分解しカテゴリ(サブカテゴリ)までに分解し、それをサイドメニューにあるaタグのhrefと比べて合致するものにはクラス名stayを追加する、ということをやっています。

これって、MTタグだけで出来るのだろうか…

忘れないで、IE6

金曜日, 4月 10th, 2009

Web&Peaceをご覧の皆様、はじめまして。
先日よりHTMLコーダーとして入社いたしました中尾と申します。
入社して間もない私ですが、投稿する機会をいただきました。

思えば入社前から読んでいた当ブログ。
ついに投稿させてもらえることになり嬉しく思います。
日刊には耐えられるのか、ネタの確保はできるのか、などなど
心配事は数知れず・・・。

未熟な部分もありますが、何卒よろしくお願いします。

新参者といえば、先日正式リリースされたIE8。
その圧倒的なシェアにより一般的なウェブブラウザ
(またはインターネットボタン)としてお馴染みですが、
制作者にはその挙動による足かせで少し有名です。

とはいえ、今度のIE8はズレを修正してくれる「互換表示」機能が
付いており、表示もスムーズ、さらに高速で安定しているそうです。

IE8が正式リリースされ、順調にシェアを伸ばしている中で
日本ではIE6のシェアが増えるという記事。

もちろんブラウザはセキュリティやバグの観点から
最新のバージョンにしていただきたいものですが、未だIE6が増えているのは驚きです。

アナログ放送のように突如IE6を打ち切るわけにはいかないので、
制作者はIE6と良い関係を築かなくては意図した表示にできません。
CSSのバグなどが多いIE6は、制作者には決して避けて通れない道。
HTMLやCSSハックによる条件分岐は枚挙にいとまがありません。

ここ最近は憎悪を抱いていたIE6ですが、ズレと格闘しているうちに
だんだんIEに愛着が沸いてきたりして・・
ケンカして仲良くなるって、青春ぽいですね。

今後ともWeb&Peaceをお願いいたします。

第4回CSS Naked Day

木曜日, 4月 9th, 2009

みなさまこんにちは、加賀田です。本日は表題のとおり、年に一度のCSS Naked Dayでしたね。

CSS Naked Dayとは、GoogleのユーザインタフェースエンジニアであるというDustin Diaz氏が提唱する、「WebサイトのCSSを外してみる日」のこと。普段はCSSやJavaScriptやFlashなどの技術に隠れてしまいがちな、HTMLコーディングの地道な努力をみんなで称え合おうということなんでしょう。

HTMLのコーディングで糊口をしのぐ身としてはこんなに素晴らしい提案はないと思うところで、ぜひ乗っかってみようと思うのですが今年もうっかり当日まで失念しておりました…また来年には実施したいところです。というか、その前にテンプレートのコードも見直さなくちゃなあ。

ちなみに、当ブログのようにWordPressベースのブログで参加する場合には、当日に自動でCSSを外してくれるプラグインなんかも出ています。これなららくちんですね。

Webサイトをお持ちのみなさま、来年には”Don’t think, just strip”すなわち「考えるな、ただ脱げ」の精神でこのイベントに参加なさっても面白いんじゃないでしょうか。そしてHTMLコーディングに光を!

jQuery+draggable+cookie

水曜日, 4月 8th, 2009

皆さん、こんにちは。加藤です。
相棒が終わってしまい、水曜日に物足りなさを感じております。
今夜は、DSの相棒でこの寂しさを紛らわしたいと思います。

さて、本日のお題は「jQuery+draggable+cookie」です。
急に思い立って実験してみました。
どんなものかというと、口では説明しづらいので図で説明をば!

p_dd

こんなカンジで、対象物を移動させ、リロードしても位置を記憶するというものを作ってみました。

実装方法は以下。
まず、jQuery UIのサイトからUIをダウンロードしてください。
また、クッキーを簡単に制御できるjquery.cookieもご用意ください。

ダウンロードしたものから使うものは、

  • jquery-1.3.2.min.js(jquery本体)
  • jquery-ui-1.7.1.custom.min.js(UI本体)
  • ui.draggable.js
  • jquery.cookie.js

です。

ソースは以下のようにまず、head内でjsを読み込みます

<script type=”text/javascript” src=”../js/jquery-1.3.2.min.js”></script>
<script type=”text/javascript” src=”../js/jquery-ui-1.7.1.custom.min.js”></script>
<script type=”text/javascript” src=”../js/ui.draggable.js”></script>
<script type=”text/javascript” src=”../js/jquery.cookie.js”></script>

ドラッグ対象のhtmlは、

<div id=”myDrag”>ドラッグできます</div>

とします。
cssは、

<style type=”text/css”>
#maincol{
position:relative;
height:1000px;//高さ確保
}

#myDrag {
position:absolute;
top:0px;
left:0px;
width   : 100px   ;
height  : 100px   ;
padding : 10px    ;
background-color : #B9FF04 ;
}
</style>

こんなカンジで。。

で、肝心のスクリプトは

<script type=”text/javascript”>

$(function() {
$(‘#myDrag’).draggable({
opacity  : 0.5,    //ドラッグ時の不透明度
cursor   : ‘move’, //カーソル形状
containment: ‘#maincol’,//移動範囲制限
stop: function(e, ui) {
$.cookie(‘tname’,ui.position.top,{expires:30});//topの数値をクッキーに保存
$.cookie(‘lname’,ui.position.left,{expires:30});//leftの数値をクッキーに保存
}
})
});
if($.cookie(“tname”)) {
$(function(){
$(“#myDrag”).css(“top”,$.cookie(“tname”) + “px”);//保存したクッキーの値を挿入
$(“#myDrag”).css(“left”,$.cookie(“lname”) + “px”);//保存したクッキーの値を挿入
});
}
</script>

こんな感じです。
+”px”がないとfirefoxで動きませんでした。無くてもIEでは動きます。私はネジがゆるいのでpxを付けずに何度もリロードしてました。
動作確認は、IE7とfirefox3とwin版safari4betaです。IE6などは未確認です。
また、このソースはあくまで実験物です。万が一実際に使用する場合は、ご自分でしっかりと検証してください。

実際のプロジェクトでは、なかなかこういったものは使わないので、新鮮で楽しかったです。

URL末尾のスラッシュ

火曜日, 4月 7th, 2009

みなさまこんにちは、加賀田です。数日前の記事ですがスラッシュドット・ジャパンに『長いURLは回線容量を無駄に消費? 』というお話が出ていました。内容自体もさることながら、コメントのほうにも興味深いものを見つけました。

>http://www.exapmle.com
>http://www.exapmle.com/

上と下で

>両者に発生するトラフィックに違いはないよ。

のは、サーバー名の直下の”/”だからです(RFCは失念)

http://www.example.com/hoge [example.com]
http://www.example.com/hoge/ [example.com]

なら、
1. www.example.com の /hoge をくれ。
-> /hoge はないが、/hoge/ はあるよ。
2. www.example.com の /hoge/ をくれ。
-> つ /hoge/
という感じで、ブラウザとサーバがやり取りするので、トラフィックに差が出ます。

なんとなく「URL末尾のスラッシュは省略しちゃいけない」とは認識していました…が、ホスト名直下とディレクトリ名末尾とでは厳密には扱いが違ったのですね。

ということで、まずはFirefox+Live HTTP headersでどんな実装がなされているか検証してみました。社内で使用しているWebサーバに対して、次のようなアクセスを試みます。

1) http://www.example.co.jp (ホスト名直下のスラッシュを省略)
⇒FirefoxがURL末尾にスラッシュを追加してリクエストを送出。
2) http://www.example.co.jp/hoge (ディレクトリ名末尾のスラッシュを省略)
⇒そのままリクエスト送出し、レスポンスコード301が返ってくる。http://www.example.co.jp/hoge/へリダイレクト。

なるほど、確かに動きが違いました。1)の場合はクライアントサイドでスラッシュが補完されるのでトラフィックが増えない、対して2)ではサーバサイドでのフォローになるのでトラフィックが増えるというわけですね。

さらに、元記事の投稿者さんが根拠となる「RFCを失念」されたとのことだったので、こちらで調べてみました。

URLの仕様を示すRFCはRFC3986。ABNFなどを見る限りでは、パスが全く含まれないURL(つまり上記1)のような状態)もいちおうURLとして許容できそうです。

そして、そのようなURLの解釈については”6.2.3. Scheme-Based Normalization”あたりが該当の記述になりそうです。

In general, a URI that uses the generic syntax for authority with an empty path should be normalized to a path of “/”.

ただ、スラッシュがない場合の処理をクライアントサイドで実行するかサーバサイドで実行するかについてはRFC3986に記述がないようです。ほかの文書に出てるのかな…。

MTプラグイン参考書

月曜日, 4月 6th, 2009

皆さん、こんにちは。加藤です。
先月引越しをしまして、やはり引越し後は色々大変です。
現在は、ひかりTVなど主にTV関連でうまくいかないことがあり、苦戦中。
色々調べたり、サポートセンターに電話したりしたのですが、解決せず…。
そもそも解決しない問題という噂もちらほら…メシア求む!

さてさて、本題です。
先日、こんな本が発売されてることを知りました。

Movable Type プラグイン開発入門

待ってましたぁ!!
現在、プラグインを作成するためにPerlを勉強中ですが、実際にプラグインってどういう風に作るのだろう?といった根本的な疑問があったので、この書籍は大変役立ちそうです!
発売日がこのブログを書いている4月6日というのにも運命を感じます。
問題は、題材が限定されている書籍なので、本屋においているかどうか…。私は買い物はなんでも実物を見ないと駄目な人間なので、ネット購入は出来れば回避したいのですが…。
久々に本屋巡りの旅に出るかもしれません。

list-style:noneとlist-style:none noneとかIE8とか

金曜日, 4月 3rd, 2009

みなさまお久しぶりです、加賀田です。このところ更新頻度がとみに下がっておりまして、社内外のみなさますみません。

さて、先日投稿した『IEとlist-style:none』に、非常に興味深いコメントをいただきました。naokitaさんありがとうございます。

いわく、

普通に考えた場合
ul.none{list-style:none}ではなく、
ul.none{list-style:none none}なら出来ると考える。

とのこと。

普通に…か、仕様書の記述に従って普通に考えたつもりなんだけどなあなんて愚痴をたれつつも試してみたところ、確かにlist-style:none noneで解決。

なるほど、IEに対してはこうしてlist-style-typeとlist-style-imageの両方がnoneですよーと明示してやらなきゃならないんですね。仕様書の「普通」も、IEの「普通」の前ではいかにも無力です…。

そしてさらに。

が、しかし
ul.none{list-style: none disc;}
ul.none{list-style: disc none;}
の表示が違う。。。

!?そんなことが。

ということで、こちらも検証してみました。まずはnone discから。

p_200904031

次にdisc noneの順で。

p_200904032

後者だけul.noneのマーカがdiscになりました。確かに違いますね。

後者の解釈はともかく、前者のCSSに対してマーカ画像を表示するという解釈は非常に気持ち悪いですね…。もっとも、こういうコードを書く機会自体少なそうではあります。ここまで来ると、ショートハンドを使わないほうが見通しがいいでしょうからね。

ちなみに、先日リリースされたIE8ではlist-style:noneの解釈が仕様書通りになり、他のブラウザと同じ挙動を示すようになっています。よしよしいい子だ。