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

7 8月, 2011 (16:42) | 旅行 | By: tkosuga

7月中旬に福島県郡山市の両親に会いに行ってきました。
そのときの鍾乳洞めぐりで取った写真です。
あぶくま洞
入水鍾乳洞にも入ってきました。
鍾乳洞には心をときめかせる神秘的な魅力がありますね。
旅行先の写真をflickerにアップしているので興味のある方はどうぞどうぞご覧下さい。
http://www.flickr.com/photos/tkosuga/

 

とりあえずraise

15 12月, 2010 (01:06) | その他 | By: tkosuga

おもいっきり久しぶりにブログを書くよ!

「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逆引きレシピをどうぞ。

Ruby 逆引きレシピ すぐに美味しいサンプル&テクニック 232 (PROGRAMMER’S RECIPE)

Ubuntuのskypeのフォントが極端に小さくなった

13 5月, 2010 (13:00) | その他 | By: tkosuga

急にスカイプのフォントが極小サイズになってしまいました。設定にあるのかなあと思ってちくちく探してみたのですが見つからず。

Googleで検索した所、それらしきものがあったので、その通りに「qt4-qtconfig」をインストールしてskypeを再起動したら解決しました。

sudo apt-get install qt4-qtconfig

これでスカイプのフォントが元のサイズに。良かった。

フォントのためし書きが出来るサイト一覧

11 5月, 2010 (10:03) | fonthack.jp, webservice | By: tkosuga

日本語フォントを試し書きできるサイトって意外とあるんですよ!

さわらびフォント
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/

他にも多数見かけたのですが、探すと見つからない…

日本語フォントをウェブから試す事が出来るサイトを知っている方、ぜひ紹介していただけないでしょうか?

狸小路で高知料理!

10 5月, 2010 (17:52) | その他, グルメ, 札幌 | By: tkosuga

去年の古い写真ですが、坂本竜馬が流行ってそういえば狸小路にある高知料理のお店で食べてきたのを思い出しました。

ご当地ビール?

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

札幌きてからはもう完全にグルメ充です。

vmwareで毎回やること

12 3月, 2010 (01:05) | その他 | By: tkosuga

カーネルの更新後にこれを実行。

/usr/bin/vmware-config-tools.pl

その後に、serviceを起動しなおす。

sudo /etc/init.d/wmware-tools restart

これで共有フォルダが使える状態に戻る。

Yahooインデックスアップデート後にSEOで検索した上位10。

26 1月, 2010 (14:54) | SEO | By: tkosuga

しかもフルアップデート。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位までゼロ円

もう変動した後かも知れないですがどこまで順位が変動するのか楽しみです。

Google adwords APIのKeywordTool#getKeywordVariationsが遅い人へ

13 1月, 2010 (18:46) | ruby, SEO | By: tkosuga

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%ぐらい速くなりました。

MeCab 0.96でSegment fault。

5 1月, 2010 (19:55) | mecab, programming | By: tkosuga

みんな、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を使って属性名の小文字大文字を無視する

5 1月, 2010 (18:18) | programming, ruby | By: tkosuga

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属性だけが全て小文字に揃います。