鍾乳洞いってきました in 福島


魚が旨い、肉が美味い、野菜もうまい、お酒もウマイ


おもいっきり久しぶりにブログを書くよ!
「Ruby逆引きレシピAdvent Calendar:165例外を発生させたい」から。
もっともお手軽に例外を利用するときはどんな時かと言うと、assertionとして利用する時でしょうきっと。raiseはクラスを指定せずに呼び出すとRuntimeErrorを発生させます。
以下のコードは到達しないはずコードが実行されたタイミングでメッセージを付けてraiseしています。
if (pattern_a) ... elsif(pattern_b) ... else raise "pattern_aかpattern_b以外は存在しません!" end
本当にRuntimeError?rescueして確かめてみます。
begin raise "例外クラスは何になるのかな?" rescue => e puts e.class puts e.message end
結果は
C:\tmp>ruby hoge.rb RuntimeError 例外クラスは何になるのかな? C:\tmp>
おお!RuntimeErrorですね。
何かしらの処理を中断させたい場合にも「とりあえずraiseする」時はありますよね。
ごにょごにょ処理をした結果が...
result = {:status => false, :message => "An Unknown Error Occurred"}
raise result.to_s if result[:status] == false
エラーが起こっていた場合に、とりあえずその情報をto_sして画面に表示させたりログに出力させたりしませんか?この実行結果は、
C:\tmp>ruby hoge.rb hoge.rb:2: statusfalsemessageAn Unknown Error Occurred (RuntimeError)
おお!文字が繋がってしまいましたがエラーが表示されました。Hash#to_sは文字が繋がってしまうのでpメソッドさんが使ってくれるinspectを呼び出しましょうか。
ごにょごにょ処理をした結果が...
result = {:status => false, :message => "An Unknown Error Occurred"}
raise result.inspect if result[:status] == false
この実行結果は、
C:\tmp>ruby hoge.rb
hoge.rb:2: {:status=>false, :message=>"An Unknown Error Occurred"} (RuntimeError)
C:\tmp>
おお!見やすく表示されましたね。
気軽にエラーメッセージを表示させたい場合や、ぱっとassertionを行う場合には「とりあえずraiseする」のも乙なものだと思います。
興味をもたれた方はAmazonからRuby逆引きレシピをどうぞ。
急にスカイプのフォントが極小サイズになってしまいました。設定にあるのかなあと思ってちくちく探してみたのですが見つからず。
Googleで検索した所、それらしきものがあったので、その通りに「qt4-qtconfig」をインストールしてskypeを再起動したら解決しました。
sudo apt-get install qt4-qtconfig
これでスカイプのフォントが元のサイズに。良かった。
日本語フォントを試し書きできるサイトって意外とあるんですよ!
さわらびフォント
http://sawarabi-fonts.sourceforge.jp/sampler/sawarabi-sampler.html
デコモジ
http://decomoji.jp/
白舟書体。左メニューの[書体見本]->[xxxxシリーズ]->[WebTypeViewer]のバナーをクリックで試し書きが出来ます。
http://www.hakusyu.com/
fonthack.jp
http://fonthack.jp/
秀英体。少し違いますが、フォントの骨格比較が出来ます。
http://www.dnp.co.jp/shueitai/
他にも多数見かけたのですが、探すと見つからない…
日本語フォントをウェブから試す事が出来るサイトを知っている方、ぜひ紹介していただけないでしょうか?
去年の古い写真ですが、坂本竜馬が流行ってそういえば狸小路にある高知料理のお店で食べてきたのを思い出しました。

ご当地ビール?

各地の鶏料理は本当に美味しい!

札幌きてからはもう完全にグルメ充です。
カーネルの更新後にこれを実行。
/usr/bin/vmware-config-tools.pl
その後に、serviceを起動しなおす。
sudo /etc/init.d/wmware-tools restart
これで共有フォルダが使える状態に戻る。
しかもフルアップデート。Yahooの検索順位が大きく変わりますねー。
Yahoo!検索 Index Update
http://searchblog.yahoo.co.jp/2010/01/yahoo_index_update_10.html
TDPと呼ばれている現象が解決するのか?加速するのか?
たまたまインデックスのされ方が悪かっただけなのか?
とりあえず2010年1月26日14時51分時点でYahooでSEOを検索した結果。
1. SEO対策、検索エンジン最適化はグラソフトへ
2. SEO対策|GMO SEOテクノロジー株式会社
3. 検索エンジン最適化 – Wikipedia
4. 長年の研究をもとにしたSEO対策「YES-SEO」-bing対策も始めました-
5. SEO対策 – 検索エンジンで上位表示(10位以内)できた場合のみ報酬を下さい。
6. SEO – Wikipedia
7. SEO対策:完全成果報酬型SEOサービス 旅行情報株式会社
8. SEO対策・・・。 – Yahoo!知恵袋
9. SEO対策|確かな技術と実績のスマートシステム
10. SEO – SEO対策 | 若葉なら10位までゼロ円
もう変動した後かも知れないですがどこまで順位が変動するのか楽しみです。
V200909のTargetingIdea#getを使うと速くなりますよ!
adwords4rを利用したサンプルコード。
service = @adwords.service("TargetingIdea", 200909)
kw = service.module::Keyword.new
kw.text = keyword
kw.matchType = "BROAD"
parameter1 = service.module::RelatedToKeywordSearchParameter.new
parameter1.keywords = [kw]
parameter2 = service.module::AverageTargetedMonthlySearchesSearchParameter.new
parameter2.operation = service.module::LongComparisonOperation.new
parameter2.operation.minimum = 0
parameter2.operation.maximum = 100_000_000_000
selector = service.module::TargetingIdeaSelector.new
selector.searchParameters = [parameter1, parameter2]
selector.requestedAttributeTypes = ["AVERAGE_TARGETED_MONTHLY_SEARCHES"]
selector.ideaType = "KEYWORD"
selector.requestType = "STATS"
selector.localeCode = "ja_JP"
selector.currencyCode = "JPY"
selector.paging = service.module::Paging.new
selector.paging.startIndex = 0
selector.paging.numberResults = 1
service.get(selector)
このサンプルでは月の平均検索ボリューム(AVERAGE_TARGETED_MONTHLY_SEARCHES)を1件のみ取得となっています。もしかすると自分の探し方が悪かったかもしれませんが、KeywordTool#getKeywordVariationsでは1件のみの取得が出来ませんでした。
V200909のTargetingIdea#getを使うと細かい設定ができるため、性能を良く出来ます。体感で70%ぐらい速くなりました。
みんな、Taggerにはnilとか”"(空文字)とかを引数に渡しちゃだめですよ!
>> MeCab::Tagger.new.parseToNode(nil) (irb):1: [BUG] Segmentation fault ruby 1.8.7 (2009-04-08 patchlevel 160) [x86_64-linux]
単体で動かしていればすぐに気が付いたんだろうけど、デプロイした後で起こっていたのでなかなか気付きませんでした。
HpricotのXPATHではlower-caseとupper-caseは使えなかったんですね。アイター。
ということでさっくりとコードいじりました。
例えばmetaタグのdescriptionを取り出すときに、以下のように大文字になっていると
<meta NAME="DESCRIPTION" ...>
次のようなxpathでは取り出せません。
//head/meta[@name=description]
これを解決するには以下のようにxpathの関数を使うのが理想なのですが
//head/meta[lower-case(@name)=description]
Hpricotでの実現方法が分からなかったのでElem::Travを直でいじるという乱暴な方法で解決しました。
#
# 属性へのアクセスは全て小文字に揃えます。
#
module Hpricot
module Elem::Trav
def has_attribute?(name)
self.raw_attributes && self.raw_attributes.has_key?(name.to_s.downcase)
end
def get_attribute(name)
a = self.raw_attributes && self.raw_attributes[name.to_s.downcase]
a = Hpricot.uxs(a) if a
a = a.downcase if (a && self.name.downcase == "meta" && name == "name")
a
end
alias_method :[], :get_attribute
def set_attribute(name, val)
altered!
self.raw_attributes ||= {}
self.raw_attributes[name.to_s.downcase] = val.fast_xs
end
alias_method :[]=, :set_attribute
def remove_attribute(name)
name = name.to_s.downcase
if has_attribute? name
altered!
self.raw_attributes.delete(name)
end
end
end
end
これでmetaタグのname属性だけが全て小文字に揃います。