2010年1月22日 #other

この間Yahooアドパートナーを申請しました。
Yahooアドパートナーとはあなたのサイトに広告を掲載し、
閲覧もしくはクリックされたことで報酬がもらえるサービスです。
GoogleのAdSenseに相当するものです(しかし広告の質はまだまだ)。

申請してから一度も使った事なかったのですが、
今日広告のコードを貼りつけたら表示されませんでした。
いろいろ探してみたらサイトURLに"wwwあり"と"wwwなし"が問題となったようです。
Yahooに申請するときは"wwwあり"のwww.kinopyo.comで申請したのですが、
このブログでは今までずっと"wwwなし"のkinopyo.comで利用してました。
その違いで広告は表示されないのです。

解決策

  • Wordpressの一般設定でブログのURLを"wwwあり"に明確に設定
  • SEO対策の一環として"wwwなし"のURLを"wwwあり"にリダイレクト

SEO対策の具体的内容はまた今度まとめます。

2010年1月21日 #rails

セッションを使って、データを保存する時、
以下のエラーが表示されました。

Status: 500 Internal Server Error
ActionController::Session::CookieStore::CookieOverflow

原因:Railsのセッションに保存できるデータの長さは4KBしかないです。

保存するデータは4KBをオーバーした場合、CookieOverflowエラーが表示されてしまいます。

解決方法:

セッションデータをDBに保存します。

  • セッションデータを保存用テーブルを作成します。 以下のコマンドを実行します。
rake db:sessions:create
rake db:migrate
  • config/environment.rbで以下の行をコメントアウトします。
config.action_controller.session_store = :active_record_store
  • サーバーを再起動します。

これで、解決です。

2010年1月20日 #eclipse editor

EclipseにMavenのプラグインをインストールした後にEclipseを起動したら以下のエラーメッセージが出ました。

The Maven Integration required that Eclipse be running in a JDK,
because a number of Maven core plugins are using jars from the JDK.

Please make sure the -vm option in eclipse.ini is pointing to a JDK and
verify that Installed JREs are also using JDK installs.

使ってた環境は確かにJREのみがあってJDKはなかったんです。
回避策としては

  • JDKをインストール
  • eclipse.iniに-vmオプションでインストールしたJDKと関連付ける

JDKのインストール

JDKのダウンロードはこちら: Sun Java
インストール後JAVA_HOMEとPATH環境変数もあわせて編集
エクスプローラ→マイコンピュータ→右クリック→プロパティ→詳細設定タブ→環境変数ボタン

eclipse.iniの編集

jdkのパスはインストール先に合わせて下記内容を追記
vmの後に改行が必要

 -vm
C:\Java\jdk1.6.0_18\bin\javaw.exe

これで再起動したらエラーメッセージは出なくなりました。

2010年1月18日 #tool

Javaの.classから逆コンパイラしてもともとのソースコードが見れるツールです。
ずいぶん前一度使ったことがあります。
スタンドアロンのJD-GUIツールと、
Eclipseのプラグインとして使えるJD-Eclipseがあるらしいです。
スタンドアロンはJRE環境が必要とせずインストールだけで使えます。
jarファイルもサポートされているようです。

java-decompiler

公式サイト:JD | Java Decompiler

2010年1月17日 #wordpress

本文はWPテーマGlowing Amberに二番目のサイドバーを追加する方法を紹介します。

Glowing Amberは今現在このブログで使われているテーマです。
見た目がいいデザインがいいのですぐインストールしましたが、
簡単にカスタマイズするメニューがなくて少し不便を感じました。
マニュアルもなく、作者が提示したURLにも無効となっています。。。

二番目のサイドバーを追加する方法

  • Main Index Templateのindex.phpかSingle Postのsingle.phpを編集します。
    それぞれブログのトップページ、個々の記事ページのファイルです。

  • サイドバーを追加したい場所で下記コードを挿入します。

<div id="left">
<?php if (!function_exists('dynamic_sidebar') || !dynamic_sidebar('Sidebar Left')) : ?><?php endif; ?>
</div>

例えば左に追加したい場合は

の前に上記コードを挿入します。

  • に変更
    これはid=mainbody-lrにwidthが適切に設定されているからです。

  • Stylesheet (style.css)で幅を編集
    104行目近くにある#mainbody-lr と#left, #rightのwidth値を編集すればOKです。

これでWidgetsメニューでSidebar Leftが使えるようになります。

2010年1月15日 #java

@ComponentアノテーションはJavaのクラスにつけるもので
このクラスをコンテナが管理するBeanとして登録する機能です。
@Serviceアノテーションも現状では@Componentと違いはありませんが、
通常サービス層のコンポネントは@Serviceアノテーションをつけます。

その理由は主に以下の二つです。

  • コンポーネントがサービス層のコンポーネントを明確にする意味で
  • @Serviceアノテーションを付与したBeanには自動的にトランザクション管理の機能が付与されるなどの機能拡張も期待される

Spring3.0のリリースノートを見たところ特に@Serviceに関する変更はないみたいです。
なのでサービス層のクラスに対して@Componentか@Serviceか悩んでるんだっだら
@Serviceをつけた方がいいでしょう。

参考サイト:
Spring 2.5の新機能を使ってアプリケーションを作る(その1)

2010年1月15日 #jquery

$.inArray(value, array)

指定した値が配列中にあれば、そのインデックスを返します。
配列に存在しなければ戻り値は-1になりますので注意してください。

var array = ["a", "b", "c"];

if ($.inArray("d", array) == -1) {
    // d is not in array
}

下記のコードは間違いですよ。。。

if ($.inArray("d", array)) {}

$.isArray(obj)

パラメータで渡された値が配列であるかどうかを判別します。
戻り値はtrueかfalseです。

2010年1月 9日 #chrome

本日Mac ChromeのDev版が更新されエクステンションが使えるようになりました。
Chrome Dev版をダウンロード
不安定とは言ってるものの、やはり使いたいです!


早速ですが、以下のエクステンションを入れました。
Chromeの再起動が必要なく、インストールするだけで使えます。

とりあえずこんなエクステンションを入れた

2010年1月 7日 #ruby

ブロックとは?

Rubyでは、メソッドにデータを渡すだけではなく、処理も渡せます。
メソッドに渡された処理はブロックといいます。

ブロックを渡すには?

ブロックを渡すには、二つの方法があります。

  • ①メソッドの最後に{}で囲んだコードを渡す。
test_block {puts 'In the block'}
  • ②メソッドの最後にdo..endで囲んだコードを渡す。
test_block do
  puts 'In the block'
end

ブロックの使い方?

ブロックは使ってもらわないと、意味がありません。
使ってもらうということは、相手のメソッドが、ブロックの処理を実行することです。
メソッドの中で、渡されたブロックの処理を実行するには、yieldを使います。

def test_block
  # test_blockメソッドを定義する
  puts 'Start of method'
  yield
  puts 'End of method'
end

test_block {puts 'In the block'}

実行結果:

Start of method
In the block
End of method

ブロックにはパラメータを渡す?

ブロックにはパラメータを渡せますか?もちろんです。
パラメータの定義はブロックで、
yieldでブロックを実行する際には、パラメータを渡します。
ブロックは渡されたパラメータを受け取って、処理します。
文字の説明だけで、わからないかもしれません。
実はメソッドの定義とほとんど変わらないです。
サンプルを見てみましょう。

def test_block_pramater
  yield('helloworld')
end
call_block {|str, num| puts 'Ruby sample:'+str }

※注意点:ブロックでは、||でパラメータを受け取っています。

渡されたブロックをさらに別のメソッドを渡すには?

渡されたブロックをさらに内部で使っているメソッドに渡すことができます。
引数の最後に&付きの引数を指定してブロックを受け取リます。

def test_block(&block)
  # test_blockメソッドを定義する
  puts 'Start of test_block'
  test_block_paramater(&block)
  puts 'End of test_block'
end

def test_block_paramater(&block)
  puts 'Start of test_block_paramater'
  yield
  puts'End of test_block_paramater'
end

test_block {puts 'In the block'}

実行結果:

Start of test_block
Start of test_block_paramater
In the block
End of test_block_paramater
End of test_block

※One Point:ブロック引数を渡す時、&がつければ、引数名は何でも大丈夫です。

ブロックが渡されたか調べるには?

yieldを実行する時、ブロックが渡されるかどうかを確認することができます。
block_given?を使って、ブロックがあるかどうかを確認できます。

def test_block
  # test_blockメソッドを定義する
  puts 'Start of method'
  yield if block_given?
  puts 'End of method'
end

test_block {puts 'In the block'}
2010年1月 7日 #jquery

jQueryでマウス右クリックを無効にする方法です。
"contextmenu"のイベントはjQueryのドキュメントには乗ってませんが、
それのハンドラでreturn falseすることで簡単に実現できます。


$("document").bind("contextmenu", function(){
    return false;
});