ホッテントリサーチを公開しました

はてブを使っていてたまに困ることがあります。
「この前ホットエントリーで見たんだけど、あの記事どこだっけ」

数日前だったのは覚えているけど、何日前かわからない場合、過去のホットエントリーを1日ずつ開いてブラウザの検索で文字列検索をかけます。

めんどくさかったのでいつか作ろうと思ってた「ホットエントリーのみの検索システム」を公開しました。
数時間で作ったので、細かい検証はできていませんが、まあ、たぶん適当に動くと思います。

適当に使ってもらえたら幸いです。
ホッテントリサーチ

なお、1年前とか2年前の今日のホットエントリーや、全体でのぶくまユーザー数ランキング等おまけ機能もTOPに掲載していますが、目玉は検索機能です。

Akira Yoshimaru)


〜〜ここから制作秘話(?)〜〜
今回データの元として使ったのは当然ながらはてなブックマークのホットエントリーデータです。
1,761日分(2005/2/10〜2009/12/07)のデータ。延べサイト数は87,264件です。
たったのこれだけのデータなのに、めっちゃくちゃ重い。
データストレージとしてMySQLを使ったのですが、テーブルを数個つなげただけで処理が終わらないとは・・・
いかんせん、サーバーのスペックがよくないのです。
いじめないであげてください。

Windows7に移行する前に確認しておきたいXPモードの真実

先日Windows7が公開され、既に導入済みの方もいると思います。
今回のバージョンの最も大きな目玉は、「XPモード」の搭載でした。
これによって、XPでしか動作しない(と、思われる)ソフトを使っている企業ユーザーなどが、
重い腰を上げてWindows7に。というのがMicrosoftの狙いだったはずです。

しかし、XPモードの詳細な情報が正直少なすぎる。
今回、機会があってXPモードをがっつり使う事に(ハメに?)なったので、
使ってみて分かったことを紹介したいと思います。
特に企業ユーザーは、7への移行の際に見て頂きたい。

■XPモードとは

WindowsXPモードとは、いわゆる仮想OSの機能でこれまで配布されて来た、
Virtual PCの進化版のようなものだと思ってもらえればOKです。
ただし、これまで単独で公開されていた、Virtual PC 2007とは異なり、
Windows7に統合された形のアプリケーションになっています。

Virtual PC自体を知らない人は、こちらを見て下さい。
[ゼロからはじめるVirtualPC2007-マイコミジャーナル]
http://journal.mycom.co.jp/articles/2008/09/24/virtualpc2007/

■XPモードは最終手段?

MicrosoftはXPモードは最終手段だと言っています。
Windows7にアプリケーションをインストールすると、たいていのアプリケーションは、そのまま動作します。
それで動かない場合は、互換モードで動かしてみます。

互換モードでのソフトの起動方法は、プログラムを右クリック>プロパティとすると、「互換性」というタブが表示されます。
ここで該当OSを選択することで、そのOSの互換で動作するようになります。
さらに、それでも動かない場合のみ、XPモードを使え、というわけです。

Windows Virtual PCになって何が変わったのか?

[名前が変わりました。]
いままで、Microsoft Virtual PC 2007だったものが、Windows Virtual PCとなりました。
しかし、言ってみれば”Virtual PC 2009”と考えて良いと思います。対応OSはWindows7のProfessional以上だけです。
XPやVistaでは動作しません。

[USBをサポートするようになりました。]
これまでのVirtual PCはUSB関係のデバイスは全く使えなかったのですが、今回USB機器が使えるようになったので、プリンターやスキャナ等が利用可能です。
しかし、詳細は後で書きますがこれが地雷です。

[物理ドライブへのアクセスが出来るようになりました。]
以前のバージョンでは、仮想OSからはホストOSの物理ドライブは見えませんでしたが、仮想OSからも見えるようになりました。
もちろんXPモードから見えます。

■XPモードを導入するには

[まずはエディションの制限がある。]
XPモードは、Windows7 Professional以上のエディションで利用可能です。
つまり、Home Premium等、パーソナルエディションでは使えません。
まずは、これを気を付けてください。

[CPUの制限がある。]
インテル製CPUでは「Intel VT」、米AMD製CPUでは「AMD-V」これに対応していないと、XPモード自体が起動できません。
新しいマシンを買う時には、念のため購入する店やメーカーに確認を。

[実は最初からXPモードは使えない。]
あれだけ宣伝しておきながら、実は初期インストールの状態ではXPモードは入っていません。
下記のURLから、Virtual PCとXPのハードディスクイメージの2つのファイルをDL、インストールをすると初めて使えるようになります。

http://www.microsoft.com/japan/windows/virtual-pc/default.aspx

[Vistaモードもあるよ。]
XPモード、が目玉なんですけど、実はVistaモードもあったりします。
ただし、これは自分でWindowsVistaのUltimate、もしくはEnterprizeを持っていないと使えません。

[64ビットOSの場合、XPモードは何ビットで動作する?]
64bitのWin7でも、32bitのWin7でも、XPモードは32ビットで動きます。
逆に、64bit XPやVistaは動作しません。

[ウインドウが統合できるのがミソ]
XPモードとは良く言ったもので、XPモードでインストールしたアプリケーションは、Windows7側のスタートメニューの中に自動的に入り、それをクリックすると、XPのウインドウだけが出てきます。つまり、Virtual PCだと意識せずに使えることです。
入る場所は、
[スタートメニュー>全てのプログラム>Windows Virtual PCWindows XP Mode アプリケーション]
の中に配置されます。

■XPモードの問題点

[USB機器の自動認識]
これが一番困ったのですが、XPモードでプリンタを使いたい場合、XPモード上でプリンタをインストールします。
そうすると、プリンタが使えるのですが、USB機器は、ホストOSとの[切り替え式]になっており、
毎回USBの接続をクリックしないと使えません。
接続を行うと、ホストOSのUSBが切り離され、仮想OS側で認識します。
ですが、たとえばウインドウを閉じるなどすると、また接続しなおす必要があるのです。
もし、接続せずにプリントするとキューに溜まった後にエラーで印刷が出来なくなります。
これじゃあ、業務目的には使えない。
仕様だ、というだろうが、いくらなんでもこれは問題があると思われる。

[ドラッグアンドドロップができない]
Virtual PCでは、ホストOSからゲストOSへファイルのドラッグアンドドロップができました。
が、今回のバージョンでは、それができなくなっています。
まあ、物理ドライブが見えるので、実質的に困ることはありませんが、正直めんどくさい。

[Windows7のスタートメニューに入ってくれないソフトもある]
「XPモードでインストールしたアプリケーションはWindows7のスタートメニューの中に入る」
と説明しましたが、たまに自動的にスタートメニューに入らないものがあります。
そもそも、Windows7のスタートメニューに自動で入るソフトがどうなっているかというと、
XPモードの、All Usersのスタートメニューに入ったアプリケーションを監視している様です。
うちの会社で作っているアプリケーションは、MicrosoftClickOnceを使って配信していますが、
これが自動で入らなかった事で発覚した問題でした。

こういう場合は、アプリケーションショートカットをコピーして、XPモードのマイコンピューターを開き、下記のフォルダへ貼り付けします。
[C:\Document and settings\All Users\スタートメニュー\プログラム]
ここに置くと、若干の時間差でWindows7のスタートメニューに反映されます。(Windows7の画面がリフレッシュされます。)

[ファイル等のショートカットは直接ホストOSから起動できない]
たとえば、XPモードで、IE6を開き、どこかのサイトのショートカットを上記のフォルダに置いたとしても反映されません。
アプリケーションのショートカットだとうまくいくので、
「"c:\Program files\iexplorer\iexplorer.exe" http://www.yahoo.co.jp/
のようなショートカットを作成すれば、Windows7側のスタートメニューに反映されるようです。
めんどくさい。

■まとめ

XPモードを搭載することで、企業ユーザーからの乗り換えが大量にあるかと思いましたが(というか、XPのサポートの関係でもうそうするしかない)実際にXPモードを常用するのは、ちょっと厳しいと思いました。
というか、一般のユーザーには仮想OSの意味すら分からない気がします。

一般的な業務アプリケーションで、「XPしか対応していません。」というタイプのローカルアプリケーションなら、普通にインストールしてもいいのでしょうが、ASPサービス等を使っていて、「Internet Explorer6、もしくは7しかだめです。」とううソフトは意外に多いのに、Windows7にはIE6はもちろん、IE7にダウングレードする術がありません。
そうなると、XPモードを使ってIEを立ち上げるしかない上、印刷関連はUSB機能を毎回ONにせねばならず非常に面倒です。
毎度の事ですが、個人的には、企業ユーザーは導入時期に関してもう少し様子を見るのが吉だと思います。

■最後に

問題点を強く書きましたが、個人的にはWindows7は非常に気に入っています。
起動速度に関してもユーザービリティに関しても、XPやVistaから比べると格段に良くなっている印象です。

しかし、繁栄しすぎた文化から切り替えるのは、大変な労力が必要なようです。

Akira Yoshimaru)

DreamweaverでDIVタグのショートカットを作る方法

先日の「お前らもっとDreamweaverの凄さを知るべき」の記事でDIVタグを一発で入れたいという要望を書きましたが、色々やってみると、実は出来ました。
DIVタグだけではなく、他にも好きなコードを登録可能です。

やり方は
1.スニペットにタグを登録
2.ショートカット割り当て
こんだけです。

登録すると便利そうなタグ
・DIV
・SPAN
・LABEL
・UL
・SCRIPT
・HTMLコメント
ほんと、LABELなんか面倒でたまりませんでした。


じゃあ、実際の登録方法を画像付きで紹介。

1)スニペットウインドウが出ているか確認

2)スニペットウインドウの余白部分で右クリック→新規フォルダ

3)フォルダに適当に名前を付けて、右下の新規スニペットのボタンをクリック

4)登録ウインドウが出てくるので、下記のように設定

5)作ったスニペットの上で右クリック→キーボードショートカットの編集

6)キーボードショートカットのウインドウが出るので、作ったショートカットをクリックあとは、下記の画像を参照。

7)実行してみる。


べんりーーーーーーーーーーーーーーーーー!
他のショートカットも登録しまくって、快適なDWライフです。

リンクをクリックしたときに横に伸びる点線を消す方法2

えー、ずいぶん長いこと放置です。

IDEA*IDEAさんで紹介されている、「リンクをクリックしたときに横に伸びる点線を消す方法(Firefox)」に対するフォローです。

リンクが張ってあるテキストのtext-indentを-9999pxにするという方法をとるとFirefox等で点線がでます。
それを消すために
overflow:hidden;
outline:none;
を設定しますが、例えば liタグの中のテキストにリンクを張る場合などは下記のようにHTMLをコーディングする必要があります。

===HTML===
<ul id="sample">
	<li><a href="#"><span>あいうえお</span></li>
	<li><a href="#"><span>かきくけこ</span></li>
</ul>
===CSS===
#sample li {
	background: url(sample.jpg);
	height:20px;
}
#sample li span{
	text-indent:-9999px;
	overflow:hidden;
	outline:none;
}

や、まあ良いんですけど、

<span>

がキモチワルイ!

で、どうしたらこの気持ち悪さをなくせるかというと、下記で実現できます。

===HTML===
<ul id="sample">
	<li><a href="#">あいうえお</li>
	<li><a href="#">かきくけこ</li>
</ul>
===CSS===
#sample li {
	background: url(sample.jpg);
	height:20px;
}
#sample li a{
	display: block;
	height:0pt;
	overflow:hidden;
	padding-top:20px;
}

ね?すっきりです。Appleのメニューバーでも使われていた方法です。
若干CSSが面倒なので、リンク無しのテキスト飛ばしは、私もtext-indent:-9999pxを使います。

いかがでしょうか?

3大検索エンジンへのsitemap.xmlの登録法のまとめ

サイトを作ったら、まずはSEO対策を行いますよね。
最初に出来る事は、内部要因でHTMLタグの最適化(内部SEO)を行いますが、
次にやるべきは、3大検索エンジンクローラーへのインデックス最適化です。
勝手に、SIO(Search engine Index Optimization)と名付けています。

SEO→SIO→SMO(→SEM)

今回は、SIOに必須な3大検索エンジンGoogle、Yahoo!、Live Search)にsitemap.xmlを登録する方法です。
sitemap.xmlって何?って人は意味が分からないと思いますので、必要になったときに読んでください。

ステップ1 sitemap.xmlを作る

1 まずは、http://www.xml-sitemaps.com/にアクセス
2 Starting URLに、ホームページのURLを入力する
3 Startボタンをクリックする
4 1〜2分ほど待ちます。(ページ数によって時間が変わります)
5 [Generated sitemap is ready]という画面になります。
6 以下ののリンクからファイルを、ダウンロードしましょう。
 Download un-compressed XML Sitemap

7 ダウンロードが終わったら、それぞれのファイルをテキストエディタで開き、足りないURLや要らないURL(/とindex.htmlを別に登録していたりします)を調整しましょう。

8 編集が終わったら、FTPでサイトのルートフォルダにファイルをアップロードします。


ステップ2 Googleに登録する

1 https://www.google.com/accounts/ServiceLogin?service=sitemapsにアクセス。
2 Googleアカウントを持っていない人は、アカウントを作ってください。
3 ログインしたら、「マイレポート」の画面が出てきます。
4 テキストボックスに、サイトのURLを入力して、サイトを追加してください。

5 ログインすると最初に「サマリー」が表示されています。
 その中に、「サイトを確認」というリンクがあるはずです。
 これは、Googlebotがサイトを診断するために使われます。
 下部のプルダウンをクリックすると、「メタ タグを追加」とあると思います。
 選択すると、HTMLのコードが表示されますので、これを内に追記しましょう。

6 終わったら、ファイルをアップロードして確認ボタンをクリックします。
 次回、Googlebotが巡回に来た時点でこれを元に情報の統計が取られます。

7 次に、sitemapを追加します。
 左のメニューの「サイトマップ」をクリックし、さらに、「サイトマップを追加」をクリック。

8 出てきたページのプルダウンから、一般的なウェブページのサイトマップを追加を選択し、サイトマップのURLを入力して、ボタンをクリックします。
 これで、完了です。


ステップ3 Yahooに登録する

Yahooへのサイトマップの登録は、米国のYahooSiteExoplorerから行います。
英語サイトですが、簡単なものですので問題ありません。

※現在は日本語バージョンが有ります。登録方法は下記とほぼ同じです。IDは通常のYahooIDで大丈夫です。

1 http://siteexplorer.search.yahoo.com/にアクセス

2 中右の「My Sites」に、サイトのURLを入力し、Add My Siteをクリック。
 YahooのIDが必要になります。
 これは、Yahoo!JapanのIDとは異なりますので、持っていない人は(通常持っていないと思いますが)Sing Upをクリックして新たに作ってください。

3 ログインすると、先ほど入力したURLが追加されていると思います。

4 右側の「Authenricate」をクリック。追加方法は2種類ありますが、手軽なMETAタグで行きましょう。

5 「To add a META tag to your home page,」の下に書いてある

<META name="y_key" content="f3de013c46******" >

 をサイトのインデックスファイルの内に書き、ファイルをアップロード。

6 「Ready to authenticate」をクリック
 Your site is pending authentication.が出れば完了です。

7 「My Sites」に移動し、サイトリストの左の「Manage」をクリック。

8 sitemap.xmlのURLをテキストボックスに入力し、Add Feedをクリック。(プルダウンはWeb Site Feedのまま)

9 Yahooはこれで完了です。あとはクローラーが回ってくるのを待ちます。


ステップ4 MSNに登録する

2008年3月になって、Live Searchに大幅な改変がされました。
新しい機能でWebmaster Centerというツールがβで公開されています。
1 http://webmaster.live.com/にアクセス

2 真ん中の、Sing in to use the toolsをクリックして、ログインをします。
これも、アカウントを持っていない場合は、新たに取得してください。

3 ログインすると、Add a Websiteというページが出てきますので、

Web address:に、サイトのURLを。
Sitemap address:に、sitemap.xmlのURLを入力してください。

サイトの認証には2種類ありますが、これも簡単なMETAタグタイプで行きます。
「Look for a META tag I'll add to the home page file.」にチェックが入っているのを確認
「Contact information」は案内メールの宛先です。入れなくても大丈夫。
チェックも外しておきましょう。

上記を確認したら、「Submit」をクリック

4 下記コードが表示されます

<meta name="msvalidate.01" content="A316772F378649CFBD************" />

サイトのインデックスファイルにMETAタグを追加して、アップロードします。

LiveSearchは以上で完了です。

まとめ

以上で3大検索エンジンへの登録は完了です。
少し前までは、YahooとLiveSearch(MSN)はror.xmlで登録する必要がありましたが、現在はGoogleタイプのsitemap.xml(サイトマップ プロトコル0.9)に対応しています。
また、ror.xmlrorのオフィシャルサイトでエラーが出ており、GoogleSitemapsに登録している人はSitemapエラーが出ている可能性がありますので、注意してください。(外す必要があります。)

検索エンジンとも本当の意味での最適化を目指しているのでsitemap.xmlの採用をしていますが、これは制作側にとっても有益な方法です。
クローラーに、きちんとしたクローリングをしてもらうためにも、活用してはいかがでしょうか。

はてなブックマーク総合ランキング

久しぶりのエントリーです。

私も含めて、最近はてなブックマークを使い始めた人がよく見るのは、人気のエントリーだと思いますが、今までのブックマーク数総合ランキングがありません。(あるんでしょうか?)

そこで、はてなブックマークがスタートした2004年2月10日〜現在までのブックマーク数総合ランキングを作りました。


はてなブックマーク総合ランキング http://vnq.jp/hatebu/


本当はここに書こうと思ったんですが、はてな記法でTABLEタグ書くのが面倒すぎ。
集計してみて思ったのですが、意外なものが意外な順位にあったりします。

今回は1位〜200位までですが、時間があったら200位以降も紹介しようと思います。

LWPモジュール入門 -WEBページを取得する-

WEBプログラムを書いていると、ネット上のデータを自動的に取得したい時が度々出てきます。
例えば、どこかのXML Feedを取得したいだとか、何かのリアルタイムデータを取得したいだとか。

いくつかの手法が考えられますが、私が良く使うのは、PerlのLWP(libwww-perl)モジュール。
手軽に使えるので、大好きです。いくつかの問題点は置いといて。

基本的な使い方は、下記のようにします。
[lwptest.cgi]


#!/usr/bin/perl

use LWP::UserAgent;
$ua = LWP::UserAgent->new;

$req = HTTP::Request->new(GET => 'http://www.yahoo.co.jp/');
$req->header('Accept' => 'text/html');

$res = $ua->request($req);

if ($res->is_success) {
	print "Content-type:text/html\n\n";
	print $res->content;
} 

テキストエディタに貼り付けて、FTPでアップ。パーミッションを755 or 705にして、アクセスしてみましょう。
YahooJAPANのTOPページが出たでしょうか。


サーバーにあるプログラムからネット上のデータが取得できるということは、色々な事が出来る可能性が考えられますね。
細かい説明よりも、実例を紹介します。
下記URLは、Yahoo!占いのページです。
http://fortune.yahoo.co.jp/fortune/12astro/

このページから、それぞれの星座の紹介に移動できるのですが、私はしし座なので、しし座をクリック。
下記のURLが出てきます。
http://fortune.yahoo.co.jp/fortune/12astro/20080131/leo.html
この中で、変化する可能性があるものは、[20080131]の部分。日付ですね。

ここを変化させれば、前後の占いを見ることが出来ます。
ちなみに、どの範囲までの占いがあるのかと調べてみたら、2007年1月1日〜2008年2月9日までのデータがあるようです。
今日が2008年1月31日ですので、今の所、10日くらい先までは、私の運命は決まっているようです。

さて、では、実際のスクリプトを書いてみます。

下記のスクリプトは、今日の占いを取得し、総合運のみを表示します。
[getastro.cgi]

#!/usr/bin/perl

use strict;

#エラーをブラウザに表示
use CGI::Carp qw(fatalsToBrowser);

#LWPモジュールの読み込み
use LWP::UserAgent;

#新しいインスタンスを作成
my $ua = LWP::UserAgent->new;

#自分の星座のファイル名を指定
my $astro = '/leo.html';

#ベースとなるURIを指定
my $base_uri = 'http://fortune.yahoo.co.jp/fortune/12astro/';

#今日の日付を sub get_timeから持ってくる
my $today = &get_time();

#取得するURIを繋げる。
my $req_uri = "$base_uri$today$astro";

my $req = HTTP::Request->new(GET => $req_uri);
$req->header('Accept' => 'text/html');
my $res = $ua->request($req);

#取得したページを新しい変数に入れる
my $result = $res->content;

#総合運の部分を正規表現で取得
$result =~ s|.+<b>(\d+?)点</b>/\d+?点</td>.+|$1|s;

#Contentタイプヘッダの出力
print "Content-type:text/html\n\n";

#結果の出力
print "$today$result点<br>\n";
exit();

sub get_time {
	$ENV{'TZ'} = "JST+9";my $times = time;
	my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($times);
	$mon = "0".$mon if ($mon < 11);
	$mday = "0".$mday if ($mday < 10);
	my $date = $year+1900 . $mon+1 . $mday;
	return $date;
}


FTPでアップして、アクセスすると、
20080130は70点
のように表示されれば成功です。
これを、少し改造すると、下記のようなものも作れます。

■1週間先占い
・フォームから自分の星座を選んで、ボタンを押せば、一週間後の占いが見れる

■2007年運勢バイオリズムグラフ
2007年1月1日から2007年12月31日までの運勢をバイオリズムで表示(365回Yahoo!占いにアクセスするので迷惑がかかりますが。。。)

■星座バトル
2007年1月1日から2007年12月31日までの全ての星座の全ての運勢で、ポイントを付け、平均点で順位を付ける(4380回Yahoo!占いにアクセスするので迷惑がかかりますが。これはブラウザがタイムアウトするであろうと思われます)


と、色々できちゃうので、迷惑がかからない程度にWEBサービスマッシュアップして遊んでみるのも面白いと思います。