2009/04/15

Ruby のシンボル

String#to_sym ちょっとはまったこと。

Stringクラスの文字列を to_sym してシンボル化しそれをハッシュのキーで利用している時、なにかの間違いで文字列に半角スペースが混入されてしまうとシンボルの中身は :"word " のように文字列がダブルクォートで囲まれたシンボルになる。このままハッシュのキーに登録してしまうと、 h[:word] で問い合わせても nil が返ってきてしまう。こう書くと当たり前のことなんだろうけども、しばらくの間なんで nil になっちゃうのか悩んでしまった。

スペースが混入する文字列をシンボルにすると...


# coding: utf-8
str = "word"
p str.to_sym
# 半角スペース含む文字
str = " word"
p str.to_sym
#=>
#:word
#:" word"

# :word のようにダブルクォートのないシンボルを得るには
# 半角スペース含む文字
str = " word"
p str.downcase.gsub(\s,'').to_sym
#=>
#:word

ダウンケース、ジーサブ、トゥーシム。とおもったけれども...


str = "%word"
p str.downcase.gsub(\s,'').to_sym
=>
:"%word"

記号が混入されている時もだめなのね。んじゃいっそ ダブルクォート含むシンボルがハッシュキーとして登録されてしまったとして、それを前提としてハッシュの取り出し方をかえればいいのか?


h = {:word=>"aaa", :"%word"=>"bbb"}
p h.each{|x| x.find("word")}
p h.select{|x| "word"}
#=>
#{:word=>"aaa", :"%word"=>"bbb"}
#{:word=>"aaa", :"%word"=>"bbb"}

でも、この後めんどうなことに。やっぱりふりだしに戻って


# :word のようにダブルクォートのないシンボルを得るには
# 半角スペースや記号含む文字列
str = " *%$#wor d"
p str.downcase.gsub(\s|[^\w],'').to_sym
#=>
#:word

これでダブルクォートなしのシンボルになるかな。数字があった場合どうしようかな。
--
#2009-05-12.文字化けとタイプミス修正

2009/04/12

from Ruby Forum's RSS

http://www.ruby-forum.com/topic/183806#803619

さよならRuby?ってどういうこと? 投稿者の方は環境問題に興味をうつしたようだ...。

http://en.wikipedia.org/wiki/Permaculture

infoseekの翻訳によると最初のセンテンスは

パーマカルチャーは、自然な生態環境で見つかる関係を模倣する人間の和解と永続的な農業システムを設計するアプローチです。それは、一連の出版物で1970年代の間にオーストラリア人ビルモリソンとデイビッドホルムグレンと彼らの同僚によって最初に開発されました。語パーマカルチャーは、永久の農業(永久の文化と同様に)の旅行かばんです。

と、翻訳されました。よくわからないけど環境に配慮する農業ってことかな。 portmanteau は「旅行かばん」と訳されてしまったけどブランチ(朝食と昼食をかねた食事)のような混成語だったのね。permalink みたいなものかな。

http://ja.wikipedia.org/wiki/かばん語

「Permaculture」or「パーマカルチャー」は日本の wikipedia には登録されていなかった。残念。

ポータブルデバイス

http://yebo-blog.blogspot.com/2009/04/blog-post_12.html

Jobsさんすごい。ポータブルデバイスほしいな。

# 2009-05-16 category 変更

2009/04/09

宇宙の果てを探る-誕生から地球外生命体まで

宇宙の果てを探る-誕生から地球外生命体まで (COLOR新書y) (新書y) / 二間瀬 敏史 / 洋泉社 / 978-48624-83485

小さい本なので読む時に腕が疲れないし持ち運びに便利。素晴らしい写真が多く収録されている。ほぉーと眺めてるだけで楽しい。
まだ科学的に明らかにされていない事がらについて簡潔に述べられている。
# 2009.04.10 テスト投稿改め
# 2009.05.10 category 変更
# 2009-05-16 category 変更

2009/04/02

Blogger API 再考

[2011-06-28]
# 最新
https://github.com/midore/mblogger
https://github.com/midore/xblogger
# 関連する記事
# "Blogger"ラベルがついた全ての記事
# 下記は動かないかもしれません


再考
Blogger API から Postしてみる
# Blogger API 紹介ペーージ
http://code.google.com/intl/ja/apis/blogger
# じっくり読んでみたガイド
Developer's Guide: Protocol
# Google 翻訳 以前にくらべてわかりやすくなったような気がする。
翻訳ページ

It can authenticate using either of two approaches: AuthSub proxy authentication or ClientLogin username/password authentication.

認証には2通りありひとつが AuthSubプロキシ認証、もうひとつが、ClientLogin。認証方法はどちらでもかまわないらしい。(authentication documentation.をみにいくとさらに他の種類の認証方法もあった。)
# 認証の詳細
http://code.google.com/intl/ja/apis/gdata/auth.html
# gdata-1.0.0
gdata-ruby-util
私がダウンロードした Ruby 用ライブラリ gdata-1.0.0 は clientLogin 方式なのだと思う。(lib/Blogger.rb をみると class Base を継承していて class Base は account, password を必要としている。)なので、このライブラリを使用して Blogger.new するってことは自動的に clientLogin 方式を採用したことになる。たぶん。

# gem を通して使わないので gem を解凍
% gem19 unpack gdata-1.0.0.gem
% vi  gdata-1.0.0/lib/gdata.rb
# ここをはずすことで Ruby 1.9.1 でも動くようになる。
# require 'jcode'
# $KCODE = 'UTF8'
# 新しく作る起動用ファイルの冒頭。
# パスに gdata のパスを加える(Ruby 1.9.1 のgem をつかってないので)
% more myapp.rb
# coding: utf-8
$LOAD_PATH.push('/path/to/gdata-1.0.0/lib')
# gdata-1.0.0/lib/gdata.rb
require 'gdata'
require "rexml/document"
require 'time'
############# New 
# インスタンス生成 ダウンロードした gdata-1.0.0 ライブラリの
# Blogger クラスを呼び出す。
bl = GData::Client::Blogger.new
# bl.source には自分のプログラムの名前とバージョン名をいれる。
# いれなくても動くと思う。
bl.source = 'myapp_v1'
# 認証されたかの確認 。
# 認証に失敗した場合は エラーメッセージが表示される。
p token = bl.clientlogin(account, pass)
print "---------- Start\n"
############# Get 1
# 宛先URL : http://www.blogger.com/feeds/profileID/blogs
# profileID と blogID は異なるので注意。私も間違えた。
# profileID の部分は自分のブログの meta タグ内の
# link rel='me' href="http: で始まる url に含まれるID
# 以下を実行すると自分のブログに関連する URL  など
# xmlデータが返ってくる。最初の確認に必要な情報をうるための操作。
# url = 'http://www.blogger.com/feeds/xxxxx/blogs'
# p feed = bl.get(url).to_xml
# puts feed
############# Get 2
# 宛先URL : 
# http://www.blogger.com/feeds/blogID/posts/default?\
# published-min=2008-03-16T00:00:00&published-max=2008-03-24T23:59:59
# blogID は、Get 1で得られた xml に記載されている URL を使う。
# 日付を範囲指定するとその日付範囲内に投稿されたエントリー
#(下書きを含む)の xml がかえってくる。
# min と max で指定
# url = 'http://www.blogger.com/feeds/xxxxx/posts/default?\
published-min=2009-04-01T00:00:00&published-max=2008-04-03T00:00:00'
# res = bl.get(url).to_xml
# puts res
############# Get 3
# 宛先URL : http://www.blogger.com/feeds/blogID/posts/default
# 最新のエントリが[0] その一つ前が[1] (下書き含む)
# feed = bl.get(url).to_xml
# puts feed.get_elements('entry')[0]
############# Post
# 宛先URL : http://www.blogger.com/feeds/blogID/posts/default
#  <app:control xmlns:app='http://www.w3.org/2007/app'>
#    <app:draft>yes</app:draft>
#  </app:control>
# を含めると下書きとして保存される。
# 投稿と同時に公開したい場合はこの要素を削除。
# category ... term="Blogger"/> の 
# attribute term=''  の部分がラベルとなる。複数可。
# str = 上記ガイドの POST 参照 
url = 'http://www.blogger.com/feeds/xxxxx/posts/default'
p res = bl.post(url, str)
p res.status_code
# =>
#<GData::HTTP::Response:...........@status_code=201>
# 201
############# PUTS
# 宛先URL : http://www.blogger.com/feeds/blogID/posts/default/postID
# edit_uri は 宛先URL。Get で獲得したエントリー XMLの 
# entry エレメントにふくまれる link href ... rel='edit' /> の href=''の部分。 
# entry要素は、
# entry xmlns='http://www.w3.org/2005/Atom' gd='http://schemas.google.com/g/2005'
# POST で使用した entry のネームスペースのままだとうまくいかない。
# attribute gd='' が必要のようだ。よくわからないけど。
# edit_uri = 'http://www.blogger.com/feeds/xxxxx/posts/default/xxxxxxx'
# response = bl.put(edit_uri, entry)
# puts response.status_code

# 2009-05-16 category 変更. 改行修正

Mac お絵書きソフト

2009/04/01

daybook_index

下記は
www.midore.nete/daybook/daybook_index.html で公開していたものです。

--

これまでここを訪れてくださった全ての皆様、ありがとうございました。
midore. 2009-04-11

About MidoreDayBook
Archives (2006.10 - 2009.02) Daybook Archives
履歴 rireki.html (import 予定)
派生 ReadBook

MidoreDayBook はわりと気軽に作り始めました。2006年のことです。それを可能にしたのは、第一に「たのしいRuby」の初版がありとても分かりやすく解説されていたこと、第二に Web で様々な情報を得られたおかげです。
その頃 Rubyist Magazine でとある企画の告知を目にしました。次回が最後の添削とあったのでダメモトで応募しました。ruby-list で質問する勇気もなければ IRC とかそういったものに参加する勇気もなかった(今もない)私にとっては相当なことでした。ふりかえってみて添削していただいてよかったと心から感謝しています。

MidoreDayBook のソースコードは良くないやり方のオンパレードですが、趣味プログラミングを愛する人に少しの苦笑いと微笑みをもたらすかもしれません。そうであればいいなと思っています。

出張版 正しいRubyコードの書き方講座―RubyistのRubyistによる、Rubyistとそうでない人のための
images-amazon

ISBN:9784839923204
Author:青木 峰郎
Publisher:毎日コミュニケーションズ
Price: ¥ 2,730
この本の著者で添削者であられる青木峰郎氏の文章の面白さは絶妙です。コラムも素晴らしい内容です。

追記
圧縮ファイル内に Mac 特有のゴミが内包されてしまい申し訳なかったと反省しています。
このようなゴミを削除してくれる Ruby ライブラリ
http://raa.ruby-lang.org/project/unmac

--imported_from
http://www.midore.net/daybook/daybook_index.html

+++ 追記 +++
2010-02-06

関連する記事
"daybook"ラベルがついた全ての記事