2007年9月 のアーカイブ

タコライスをつくったよ!

タコライスをつくったよ!をはてなブックマークに追加 タコライスをつくったよ!をdel.icio.usに追加 Yahoo!ブックマークに登録 タコライスをつくったよ!をGoogle Bookmarksに追加

2007年9月30日 日曜日
DSCF6975.jpg

タコライスを作ったよ。沖縄に行ったときに食べたのがとても美味しかったです。うちのタコライスは、レタスの代わりにキャベツの千切りを使って、さらに卵を1個載せます。うめぇ
注意点としては、ひき肉を炒めると、予想以上に油が出ますので、ニンニクを炒めるときに使う油はごく少量で炒めるといいと思います。

<材料>

  • チリペッパー
  • 牛豚ひき肉
  • トマト
  • 粉チーズ
  • とろけるチーズ
  • 玉ねぎ
  • ニンニク
  • キャベツ
  • 付け合せ野菜(ブロッコリー)

DSCF6978.jpg

<作り方>

作り方も何も無いんですけど、一応メモ程度菜ものを残しておきます。

  • ニンニクを炒めてから、ひき肉を投入。さらに細かく賽の目状に切り刻んだ玉ねぎを投入
    • 玉ねぎは生でも使うので全部炒めないようにします。
  • チリペッパーを加えて、塩で味を調えて醤油を隠し味に使います
  • ご飯が熱いうちにチーズ、ひき肉、レタス~(後は自由)の順で重ねます
    • 要は、ご飯とひき肉の間にチーズを入れてちょっと溶かしておきたいんですね。
  • 最後にタマゴの黄身を乗せて、粉チーズ、胡椒を振って出来上がりです。

いかがでしょうか。彩が鮮やかなので、なぜか、より一層美味しく感じてしまいます。ビールとあわせるのが難しい白米。休日のうま飯→ビールのコンボはこれで決まりです!

ウェブサービス3発目の計画

ウェブサービス3発目の計画をはてなブックマークに追加 ウェブサービス3発目の計画をdel.icio.usに追加 Yahoo!ブックマークに登録 ウェブサービス3発目の計画をGoogle Bookmarksに追加

2007年9月28日 金曜日

最近、ソフトウェア技術関係のエントリばかりです。
みんなのフィードビューア
→絶望的に人気が無いw

リファラ分割ウェブサービス
使い方がちょっと難しいかも

なんか暗い地下室のダメダメな研究者の気分になってきております。へへへ

ということで、第3弾は、
・お手軽で(ユーザがボタン押すだけとか)
・便利な(それなりに価値のある情報を提供する)
というコンセプトで考えています。

で、どういうものかといいますと、ちょっと変わったブログ検索をやろうかと。
「ちょっと変わっている」というのは、
ご自身が作ったエントリをフォームに入力して送信すると、エントリの関連語句を拾って、ブログを検索してURLを返します。
名付けて「お隣さんとの関連エントリ検索サービス!」
ってのはどうでしょうか?どうでしょうかっていわれてもね。

使うAPIはyahooの形態素解析エンジンkizapiです。
形態素解析エンジンについてはこのエントリでちょっと触れています
yahooもkizapiも、そのあるがままを使っちゃうんですけど。へへへ。

archivemovies.JPG

あとオリジナルムービーをアーカイブページにまとめておきました。

SEOと検索ワードの有効利用

SEOと検索ワードの有効利用をはてなブックマークに追加 SEOと検索ワードの有効利用をdel.icio.usに追加 Yahoo!ブックマークに登録 SEOと検索ワードの有効利用をGoogle Bookmarksに追加

2007年9月27日 木曜日

SEO.png

本エントリについての訂正記事

サーチエンジンの検索結果を上位に表示されるように工夫することをSEOとかって言いますが、mojalogもgoogleやyahooなどに対してのSEO対策を行っています。

<検索ワードの有効利用>

例えばgoogleでhtml tag removerという複数のキーワードで検索すると現在(20070927)、検索結果TOPページにmojalogが表示されています。
ですが、ユーザが探している情報が飛んできたそのページには無くて、「サイト内の他のページにあった場合」これがユーザによって見つけられる可能性は極めて低いと考えます。ワタシの場合は欲しい情報が無いとわかると、キーワードを変えてみたり、ヒットしたほかのサイトを見に行くことがほとんどです。

seo_google.PNG

例えば、html tag removerの3つのワードの内、removerだけで「サイト内を検索」すればユーザに必要なその情報があったとします。つまり、「site:mojalog.com removerという検索を行った場合」と言い換えられるのですが、ユーザはこういう検索を行うことはまずありません。あるとすれば、そのサイトに探している情報があると判っているときだけでしょう。
そして、googleで普通にremoverという検索を行ってもmojalogが上位ヒットすることは当然のことながらありません。
ですので、ユーザに提供できる情報があったとしてもこれが発見されることはほとんど無いとだろう考えました。

そこで、1つ前のエントリでもちょこっと紹介いたしました、ウェブサービスを作ってブログパーツとして紹介させて頂きました。
このパーツは、ホームページを作る人のネタ帳さん(※SEOの記事を参考にさせていただきました)などのように、コンテンツの内容とその量が充実していればいるほど、その効果を発揮するのではないかと思います。

このブログパーツのオススメできる点は以下のとおりです。

  • サイト内の検索フォームに改めてタイプする必要が無い
  • 非同期で検索結果を読み込むため、ページ全体のリロードの必要が無い
  • ウェブ検索・ブログ検索・ビデオ検索のほか、ローカルサーチ、ブックサーチ、イメージサーチ、ニュースサーチなどあらゆる検索結果が1度に得られる

<リファラ分割ウェブサービス>

リファラっていうのは、あるWebページのリンクをクリックして別のページに移動したときのリンク元のページのことで、リファラ分割ウェブサービスはこのリファラを判定して、検索ワードを抽出してxmlで返します。
返却したxmlの例はこんな感じで、itemlist->elem下に、インデックス(何番目の検索ワードか?)を示すタグであるidxと実際の検索ワードを示すタグitemを持ちます。
アクセス解析などのサービスは大抵このようなリファラを解析する実装がなされていますが、この機能だけを抽出してウェブサービス化してみました。
このサービスを呼び出す際は以下のようにリファラをエスケープしてから呼び出すようにしてください。
‘http://mojalog.com/mojascript/gsajax/refrxml.php?refr=’ + escape( top.document.referrer )

<分割したリファラを取得するajax>

私はリファラ分割ウェブサービスをjavascriptで呼び出して、返ってきたxmlの要素を

<実装例>

<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=UTF-8">
<title>example</title>
<!--
http://code.google.com/apis/ajaxsearch/signup.html
上記URLよりAPI-KEYを取得して、以下のAPI-KEYに設定ください
//-->
<script src="http://www.google.com/jsapi?key=API-KEY" type="text/javascript"></script>
<script language="Javascript" type="text/javascript">
//<![CDATA[
google.load( "search", "1" );
function OnLoad() {
var searchControl = new google.search.SearchControl();
searchControl.addSearcher( new google.search.WebSearch() );
searchControl.addSearcher( new google.search.BlogSearch() );
searchControl.addSearcher( new google.search.VideoSearch() );
searchControl.draw( document.getElementById( "searchcontrol" ) );
// サイト内検索を行うため、site:ご自身のサイトトップレベルを検索条件に入れておきます。
// and検索を行うため、サイト名の末尾に半角スペースを最後に入力してあげるのを忘れないでください。
searchControl.execute( "site:mojalog.com " + form.sender.value );
}
//]]>
</script>
<script type="text/javascript">
<!--
function createXMLHttpRequest( funcPtr ){
var xmlHttpInst = null;
try{
xmlHttpInst = new XMLHttpRequest();
}
catch( e ){
try{
xmlHttpInst = new ActiveXObject( "Msxml2.XMLHTTP" );
}
catch( e ){
try{
xmlHttpInst = new ActiveXObject( "Microsoft.XMLHTTP" );
}
catch( e ){
return null;
}
}
}
if ( xmlHttpInst ) xmlHttpInst.onreadystatechange = funcPtr;
return xmlHttpInst;
}
// タグのid名をもらって、該当のタグオブジェクトを返却する
function $( tagId ){
return document.getElementById( tagId );
}
// XMLHttpRequest / ActiveXObjectインスタンスでウェブサービスを呼び出します。
function loadXMLFile( xmlPath )
{
reqInst = createXMLHttpRequest( displayData );
if ( reqInst ){
reqInst.open( "GET", xmlPath, true );
reqInst.send( null );
}
}
function displayData()
{
if ( ( reqInst.readyState == 4 ) && ( reqInst.status == 200 ) ){
xmlData = reqInst.responseXML;
elemTags = xmlData.getElementsByTagName( "elem" );
idxTags = xmlData.getElementsByTagName( "idx" );
itemTags = xmlData.getElementsByTagName( "item" );
elemSize = elemTags.length;
resultText = "<form action=\"\" method=\"post\" name=\"form\">\n<select name=\"sender\" onchange=\"OnLoad()\"><option value=\"\">サイト内検索</option>";
// 取得したxmlをパースします。
for( i = 0; i < elemSize; i++ ){
// idxは今回使用してません。
idx = idxTags[ i ].childNodes[ 0 ].nodeValue;
item = itemTags[ i ].childNodes[ 0 ].nodeValue;
resultText = resultText + "<option value=\"" + item + "\">" + item + "</option>";
}
resultText = resultText + "</select></form>";
// resultをid属性にもつタグオブジェクトにform~タグを設定しています。
$("result").innerHTML = resultText;
}
else {
$("result").innerHTML = "<form action=\"\" method=\"post\" name=\"form\"><select name=\"sender\" onchange=\"OnLoad()\"><option value=\"\">サイト内検索</option></select></form>";
}
}
// -->
</script>
<style type="text/css">
/* google search ajax apiのサーチボックスを非表示にしています。*/
#searchcontrol form.gsc-search-box { display : none; }
/* 検索結果のスタイルです。 */
.gsc-control { width : 400px; }
</style>
</head>
<!--
onload時にリファラ分割ウェブサービスを呼んでからgoogle search ajaxのOnLoadメソッドを呼び出します。
ウェブサービスを呼び出す際に渡すリファラはescapeしないと正しい結果が得られません。
//-->
<body onload="loadXMLFile( 'http://mojalog.com/mojascript/gsajax/refrxml.php?refr=' + escape( document.referrer ) );google.setOnLoadCallback( OnLoad );">
<!-- プルダウンフォームを表示します //-->
<div id="result"></div>
<!-- 検索結果を表示します //-->
<div id="searchcontrol"></div>
</body>
</html>


※(もちろん、欲しい情報について専門的な情報を扱っているサイトでしたらタグクラウドをみてみたり、カテゴリから見てみたりします。)