2012-02-18(土) [長年日記]
■ T-POINTを取得するスクリプトをGistから移動
かれこれ2年も前に書いたT-POINTを取得するスクリプト、さくらのレンタルサーバ上のcronで毎朝動かしていて、調子のいいときはちゃんとKayac経由で毎朝Gmailにメッセージが飛んきてるんだけど、なければないで困らないこともあり、何かトラブルがあって届かなくなっても気づかないんだな、これが。今日も、poppenさんがパッチを送ってくれてはじめて「そういえば最近見なかったなぁ」と気がつくしまつ。
で、ちゃんと継続的に使ってくれてメンテもできる人がいるならいっしょにやりやすくすればよかろう。スクレイピングのスクリプトは継続的にメンテできないとすぐに陳腐化するからな。ということで、他のポイントサービスのデータも合わせてスクレイピングできるように元のGistからpoints-scraperリポジトリに移動、ついでにGem化した:
% gem install points-scraper
まだpoints-tpointスクリプトしかないけど、たぶん今後、楽天やANA用のをpoppenさんが実装してくれるはず(笑)。なお、自前の環境(さくらのレンタルサーバ)では、どうしたことかOpenSSL::SSL::SSLErrorが出て動かないのであった。あそこはFreeBSDなのでよくわからん。Herokuに移植するかなぁ。
それにしても、こうしてGistから正式なプロジェクトに昇格させたい場面でいい感じに引っ越せるようにならんかな、GitHubは。というか本当に断片的なもの以外は最初からプロジェクト化しておけってことだよなぁ。
■ Bundlerを使ったGem作成メモ (自分用)
↑のgemを作るにあたって、(ほんの数カ月前にやったにもかかわらず)またgemの作り方をググって、「ああ、そういえばそうだった」みたいなことをやって馬鹿馬鹿しいので自分用にメモっておく。とにかくgemの作り方はここ数年でさまざまなツールが出ては消えていき、はっきりいってホビープログラマとしてはいちいち追いかけてなんていられない状況だったのだけど、最近はBundler一択っぽいのでこれでしばらく固定でいいやもうという感じ。
テンプレートの作成
Gitのリポジトリ作成からgemspecファイルの生成まで、ひととおりのテンプレートを作ってくれるbundle gemコマンドを使う:
% bundle gem hoge create hoge/Gemfile create hoge/Rakefile create hoge/.gitignore create hoge/hoge.gemspec create hoge/lib/hoge.rb create hoge/lib/hoge/version.rb Initializating git repo in /home/sho/src/hoge % cd hoge
もし既存のリポジトリを使う場合は……上で生成されたファイルをコピればいいのかな。ところで.gitignoreに「Gemfile.lock」が含まれている(つまりリポジトリには含めない)んだけど、これをリポジトリに含める場合と含めない場合の判断基準がよくわからん。tDiaryは含めてるようだが。
version.rb、gemspecなどの書き換え
ライブラリの場合はもう、libの下に必要なファイルが生成されているので、好きなように書き換えればよろしい。重要なのはlib/hoge/version.rbで、この中身がgemのバージョンになるので、アップデートのたびに適切なバージョン番号に書き換える:
% cat lib/hoge/version.rb module Hoge VERSION = "0.0.1" end
なお、コマンドの場合はbinの下に入れるが、それがそのまま実行されるわけではなく、gem installするとそのファイルへのruby的なラッパーが生成される点に注意が必要。つまり、バイナリのコマンドやシェルスクリプトを入れてもうまく実行されない。
それから*.gemspecを書き換え。最低限「TODO」と書かれているところは要修正。あと、同時にインストールさせたい依存gemなんかもs.add_runtime_dependencyを使って指定しておく。依存gemはGemfileに書くのも忘れずに。
あとはテストも書くといいですね(棒)。
gitへコミット
必要なものが揃ったら、commitできる:
% git commit -a -m 'first commit.' [master (root-commit) 8a106b1] first commit. 6 files changed, 41 insertions(+), 0 deletions(-) create mode 100644 .gitignore create mode 100644 Gemfile create mode 100644 Rakefile create mode 100644 hoge.gemspec create mode 100644 lib/hoge.rb create mode 100644 lib/hoge/version.rb
また、Bundlerがリモートリポジトリの扱いもうまくやってくれるので、GitHub上にリモートリポジトリも追加しておくべきである:
% git remote add origin git@github.com:tdtds/hoge.git
gemのビルド、インストール、リリース
BundlerがRakefileを生成してくれているので、それを使えばgemのビルド、インストール、リリースまでが行える。まずはビルド:
% rake build hoge 0.0.1 built to pkg/hoge-0.0.1.gem
それからインストール:
% rake install hoge 0.0.1 built to pkg/hoge-0.0.1.gem hoge (0.0.1) installed
ちゃんとインストールできて使えるかどうか確認したら、リリース:
% rake release : :
バージョン番号でタグを打ち、リモートリポジトリへpushをし、rubygems.orgへの公開まで一気にやってくれる(ので、利用する側はもう「gem install hoge」を実行するだけで良い)。以降、メンテのたびにversion.rbを書き換え、rake releaseをすれば更新作業はおわりである。楽チンになったもんだねぇ。
2012-02-14(火) [長年日記]
■ ひさしぶりに「赤毛のアン」を読み返したら止まらなくなった
昨年末に「赤毛のアン」の新訳が出たそうなので、村岡版を自炊して(←新訳ぜんぜん関係ない)読み返し始めたら、これがもう、面白くて止まらないの。いやぁ、やっぱり好きな本は10年に1度くらいは読み返さないといかんなー。
読んでいて面白かったのが、若いときには感情移入先が(とうぜん)アンだったのに、この年齢になるとそれがマリラになっていたということだ。アンに振り回される役どころというのはじつにいい感じ。たぶん10年か20年後にまた読み返したら、こんどはマシュウに感情移入することになるのだろう。
ところで上で述べた「新訳」はこれなんだけど:
赤毛のアン (ヴィレッジブックス)
ヴィレッジブックス
¥2,000
実はいま、講談社の掛川版がとんでもないことになっていて、なんと表紙が「NEWラブプラス」の愛花(笑)。これがけっこう似合っているという:
赤毛のアン (講談社文庫―完訳クラシック赤毛のアン 1)
講談社
¥880
3DSNEWラブプラス 【オリジナル特典:特製描き下ろしマウスパッド付き】
コナミデジタルエンタテインメント
¥6,000
これは記念(?)に買わねばなるまいか。ちなみに今回読み返したのは元祖・村岡版(の新装版):
赤毛のアン 赤毛のアン・シリーズ 1 (新潮文庫)
新潮社
¥825
あと、書庫には松本版もあるけどハードカバーなので自炊は躊躇している。文庫を買っておくべきか:
2012-02-13(月) [長年日記]
■ Gumroadで写真を売ってみた(けどまだ売上ゼロ)
TechCrunchに紹介されたせいか、今日は朝から新しいデジタルデータのマイクロペイメントサービスであるGumroadの話題がやたらとよく登場していたので、試しに使ってみたのだった。
仕掛けとしては極めて単純で、売りたいコンテンツのURLを登録すると対応するGumroadの購入画面へのリンクが生成される。サムネとか説明とかも入れられるけど、基本これだけ。このURLを踏むと上のような購入を促す画面になり、あとはPayPalなどで支払えば最初に指定したページに通される(んだと思う。買う側には回ったことがないのでわかりません[笑])。
FacebookとTwitterにつぶやく以外のプロモーションはコンテンツオーナー任せだし(いわゆる「ブログパーツ」すらない)、お金を扱う部分はPayPalなので、実際のところBitlyに毛が生えたようなサービスと言えなくもないけど、ここまでシンプルにしちゃうのはまぁ、たしかにすごい割り切り。あまりに割り切りすぎているので他人のコンテンツに勝手に値段をつけて売りさばく輩を抑止する方法がない(笑)。絶対トラブルになるだろうなー、これは。
で、さっそく猫写真とパラボラアンテナ写真を登録してみた。すべてPicasaにCCで公開してあるものなので、投げ銭というかおひねりというか、そういう感じ。本来なら1枚1枚に値札をつけるべきなんだろうけど、APIもないのにそんなかったるいことしてられないから、まずはPicasaの検索結果ページをターゲットにしてみた(ここで苦労するわけだが後述)。今なら100円で取り放題ですよ!
もっとも、公開した直後からGumroadがほぼずーっとダウンしっぱなしだったこともあって、初日の売上はゼロである。夕飯浮かした人もいるのになー。ちなみにもしそこそこの売上があがったら、東北の犬猫たちを保護している人たちへの寄付になると思いまする*1。
ところで蛇足だが、Picasaの検索結果ページをPermalinkにしようとしてえらく苦労したのだった。猫写真には「cat」、パラボラアンテナ写真には「parabola」のタグをつけてあるので、まずはそれで絞り込むっしょ?:
https://picasaweb.google.com/lh/view?uname=[ユーザID]&isOwner=true&tags=cat
これだと同じタグをつけている人の写真まで出てきてしまうので、「マイ フォト」でさらに絞り込むと自分が掲載した写真だけになる:
https://picasaweb.google.com/lh/view?uname=[ユーザID]&isOwner=true&tags=cat&psc=S
ところがこのURLを他人が開こうとすると「400 BAD_REQUEST」と言われる。検索結果ページにある「共有」を使えばいいのかと思えば、メールで送られてきたURLは「マイ フォト」で絞り込む前、つまり他人の写真とごちゃまぜの検索結果。送った人と送られた人が見ている内容が違うってひどくね?
で、正解(?)は、最後のpscパラメタを「S」から「F」に変える、らしい。Facebookで教えてもらいました:
https://picasaweb.google.com/lh/view?uname=[ユーザID]&isOwner=true&tags=cat&psc=F
はー、いらん苦労をした。これなら最初から「これ!」という1枚に値札をつければよかった。
*1 たいした金額にもならなければ猫たちの夕飯になる。「飼い主の」ではなく。
Before...
◆ hsbt [>開発はLinuxで運用がWindowsとかさ。 で >依存するライブラリが異なる場合 な場合は Gemfile で..]
◆ さく [gem依存はGemfileに gemspec とだけ書くと、specから拾ってくれます。]
◆ ただただし [> hsbt ようするに「lock」という名前が本質にふさわしくないからこういう話になるんだと自分の中では結論づけた..]
◆ naruse [> OpenSSL::SSL::SSLError Rubyが古くてSNI対応してないとかかな。http://bugs..]
◆ ただただし [> naruse いちおうこないだ出たばかりの1.9.3p125なんですよね。でも野良ビルドなので、たぶんOpenS..]
◆ naruse [> いちおうこないだ出たばかりの1.9.3p125なんですよね config は関係無いのでー、openssl のバ..]