トップ 最新 追記

2012-01-04 [長年日記]

_ ActiveSupport::JSONは自動でunicode escape sequenceにしてくれる

以前、JSON gemが1.4系でescapeしなくなったじゃん、ひどい! みたいなことを言ったことがあって、その後 Rails を使うようになって、なんか JSON 出力したときに unicode escape sequence になってるような気がするなー、なんでだろー、JSON gem のポリシーがまた変わったのかなーとか思ってたけど、違った。

よく見たら Rails は JSON gem じゃなくて ActiveSupport の JSON ライブラリを使っていた。

ほーなるほどな。ということは ActiveSupport を使ってるんだったらこっちの JSON にした方がより安全な JSON を吐けるということか。

今度から Rails 使わないときも JavaScript に渡す JSON を作るときには ActiveSupport::JSON を使うようにしようかな。遅いかもしれないけど、その方が安心だし。


実はちょっと意地になってやってやろうと思って、ぐぐったら json/pure になんかあるっていうんで、json/pure の JSON.utf8_to_json_ascii っていうやつを試してみようと思ったらこれが String しか受け付けなくて、なんだそれと思って to_json した結果をこいつに渡せばいいのかと思ったら encode 壊れて decode できませんと言われて、なんだよそれ!って思った直後に Rails どうしてるんだろう、と読んだら解決したっつー話でした。

最初から Rails 読めばいいんだよ。

Tags: JSON Rails Ruby

2012-01-06 [長年日記]

_ gyunyuというRTMアプリを作りました

これは何か

wtnabe/gyunyu - GitHub

  • Ruby で書かれた
  • コマンドライン向け RTM アプリ

です。

出ました、またコマンドラインツールです。

gyunyu という名前は、

なんか日本語名の方がRubyっぽい

というのと、RTMなんとか、RTなんとか、でどう考えてもかっこいいのが浮かばなかったからです。

使い方

$ gem install gyunyu
$ gyunyu
(ヘルプ)
$ gyunyu -c today_yet -l 仕事 -d name,estimate
(今日まだ終わっていない仕事を見積もり時間とともに出力)

こんな感じです。

できること

  • 登録済みのタスクを検索して出力します
  • 出力フォーマットは CSV, YAML, JSON です(デフォルトは CSV)
  • 「期日」だけですが、日本時間でも正確に今日とか昨日とかを検索できるフィルタを用意しました。面倒な検索条件を自分で書く必要がありません。

今のところ ( 0.2.0 現在 )

  • CRuby 1.9.2 でしかテストしてません
  • いろいろ考えたんですが、まだ export コマンドしか作ってません

なんでこんなもの作ったか

個人的に以前から作業時間の記録などをもとに作業効率の自己評価とかやってるわけです。えぇまぁ積極的にやりたいわけじゃないですけど。で、そのためにすでに入力済みの RTM の情報が記録としても使えるじゃーんと思って完了済みタスクを開いてみてたんですが、

結局手作業で転記するしかない

というおよそプログラムの書ける人間としてはやってはいけない単純作業をくり返していたんです。半年くらい。でもまぁそれまではおおよそ分かればいいしと思っていたのと、転記の際に RTM には書き漏れていた情報を追記したりして回していたのです。

が、いよいよ時間の記録の方を重視することになったので、あーこれはやっとれんということで RTM API Key を取得してちょっとずつ動かしてみていたのでした。

苦労したところ

  • モダンな認証方法がよく分かってなかった
  • RTMの「見積もり時間」が「入力したまま」の状態で入っていて、数字としての意味を解釈するのに一手間必要だった。
  • API で返ってくるタスクは task を包む taskseries という謎の構造を持っていた
  • RTM API では日時の表記に UTC の ISO8601 フォーマットを要求するんだけど、どうも指定した期間の情報がちゃんと取れないと思ったら フォーマットとしては UTC の ISO8601 を要求するけど、実際の時間について timezone の変換は不要 という変な仕様になっているようだった。
    • たぶんアカウント情報の timezone の設定をいい具合に使ってくれてる。
    • ただし返ってくるデータは正しく UTC の timezone になってくるので変換が必要

Special Thanks to

@mootoh and mootoh/rtmilk - GitHub !

今後は

rails console みたいな gyunyu console が作れたら task の作成や更新も楽にできそうだなと思うんだけど、今のところそんなもんできそうな気がしないです。

余談

これを作った時点での RTM の時間関係の filter の動作をメモしておきます。

  • due:today は JST だと today か yesterday のタスクが取れる
    • 単に9時間ずれたタスクのリストが取れるのではない
    • search 発行時点での UTC の today の日付を localtime に当てはめて 00:00:00 から 23:59:59 までのタスクが取れる
    • たまたま夜に実行すると今日の分が取得できる
  • dueAfter に正確な時刻を入れる場合は1秒前を基準にする。 >= ではなく > 相当。たぶん due 以外でも一緒。
Tags: GTD Ruby RTM

2012-01-07 [長年日記]

_ RTMのタグを集計用に再検討した

2年ちょい前にRTMでタグ付けするぜーって今さらな話をしていたんだけど、

RTMのタスクにタグ付けするようにしてみた - あーありがち(2009-09-07)

これをもうちょっと細分化することにした。具体的には「作業の種類」ではなく「プロジェクト」という単位をタグ上で表現するためのもの。

参考にしたのはこれ。

mitukiii.jp | RTMの使い方を自分用にカスタマイズ

prefix を使うのはうまいなぁと思いつつ、記号の意味を覚えられそうな気がしなかったのと、名前空間増やしたくなったらどうしようと思って、自分の場合は以下のようにしてみた。

  • 仕事のプロジェクトは pb_ を prefix にして pb_XXXXX
  • 仕事 biz じゃないプロジェクトが増えてきたときに pp ( project private ) みたいにして増やしやすい
  • プロジェクト以外が入ってきたらまた考える

また、作業の種類に

  • organize
  • report

を追加した。

organize は要するに RTM や milestone そのものについて悩んでいる時間と考えていいかな。

以下はこれらを考えていたときの tweet の転記。

tweet の埋め込み、楽になったなぁ。

上で言っている「作業の種類」は例えば reading とか develop など。reading はよほど難解なものでない限りは時間の見積もりがそれなりに正確になるはず。対して develop はある程度の揺れを見込んでおく、などの目安になる。

一方、集計の際には作業の種類だけでなく「何のための作業なのか」が大事になってきたりする。これが記録されていれば、例えば「案件A」に何時間、「案件B」に何時間掛かった、ということが完了済みタスクから分かるようになる。

今回のタグの追加はこの集計のために考えたもの。実際には先日の gyunyu を使って抽出して集計していくつもり。

Tags: GTD RTM

2012-01-12 [長年日記]

_ 今さら RHEL(クローン) 5.x + PHP 5.1.6 環境作ったら PEAR でハマった

RHEL 5 系の PEAR の問題

$ yum list php-pear
php-pear.noarch                     1:1.4.9-8.el5

で、あまりに古い。

pear 自身がアップデートを重ねており、1.4.9 では入れられない package がいくつかある。そうなると

yum install php-pear はオワコン

なんだけど、

go-pear の最新版は PHP 5.1.6 がオワコンすぎて入れられない

ということで八方ふさがり。

go-pear

以前は

http://pear.php.net/go-pear

を使ってインストールできた。このインストーラは PHP 4.3.0 以降で使えるものだったはずだが、現在は

  • PHP 4.3.x だと「古すぎるよ!」
  • PHP 5.1.6 以降だと「新しすぎるよ!」

と言って死ぬ。

go-pear.phar

現在は

http://pear.php.net/go-pear.phar

を使ってインストールすることになっている。.phar となっているが中身は圧縮も何もされていないただの PHP ファイル。なのだが、

php go-pear.phar

してもうんともすんとも言わない。

もしかしたら Web ベースで動かしたら使えたかもしれないけど、意味がよく分からないので諦めた。

http://stackoverflow.com/questions/5428778/installing-pear

によれば PHP 5.3 以降でないと使えないっぽいので、そういうことなのかな。

upgrade --force

Twitterで教えてもらった。

http://d.hatena.ne.jp/solitary_shell/20090716/1247726269

2012-01-12 時点では

  • Archive_Tar
  • Console_Getopts

を upgrade --force したら

pear upgrade pear

が通った。

もうこれでいい。

例え

$ yum list php-pear
php-pear.noarch                     1:1.4.9-8.el5                      installed

でもどうでもいい。だってこれただの実験環境だもん。

まー 5.3 でテストして 5.3 に移行しろってことですね、分かります。

Tags: PHP Linux

2012-01-14 [長年日記]

_ Twitterのfollowerのgithubアカウント引っこ抜いてみた

今さらだけど今年は

  • Twitter 以外の follow を増やす
  • 具体的にまずは github と slideshare で増やす

ということをなんかどこかで思ったような気がしていて、その流れでなんとなく Twitter の API を眺めていたのが 1/4 の話。

18:13:38 followeeが持ってる他のサービスのアカウントを効率的に集める方法
         ないかな
18:29:51 Streaming API と User Streams ってベツモノなのか。そんなことす
         ら知らない。
21:14:54 昔と違ってfollowerを200ずつしか取得できないとかないんだな
21:16:08 でもidしか取れないし、これ全部screen_nameと照合させようとする
         とひどいことになるな
21:36:53 対応表作るには認証は要らないのか。鍵垢でもアカウント情報だけな
         ら取得できる。あとはこれを保存しつつ適当なタイミングで動かすと
         diffも出せるな。そこまでやるかどうか分かんないけど。

この時点で followee で考えていたものを認証が面倒くさいので follower に変更したらしい。

で、実際に書いたのが昨日。よく考えると金曜の夜のタリーズで何してるんだろう、おれ。

wtnabe/twitter2github - GitHub

github の方の API の確認はたぶん前日に小一時間やって、ざっと調査で1〜2時間くらい。で、コード書くのに2時間半くらい、なんだかんだ整えて github に上げるのに 2時間くらい、かなぁ。README 書くのって時間掛かる。もっとなんでも速く書けるようになりたい。

これ使って手動で github で follow しまくったので、github の dashboard がオレだらけになったみなさんごめんなさい。follow 返しお待ちしております。(引くくらい反響ないっす。ははは。)

特徴

  • Twitter も github も認証を要求しない
  • github のアカウントを一つ一つ確認するので結構時間掛かる

使い方

$ git clone git://github.com/wtnabe/twitter2github.git
$ cd twitter2github
$ bundle install
$ bundle exec ./bin/twitter2github -u TWITTER_USER > TWITTER_USER.csv

考えてないこと

  • follower が多すぎていっぺんに取得できなかった場合
    • 自分のアカウントでテストして ok だったけど 1000 くらいに壁がありそうな気がする
  • follower が多すぎて github の 5000 reqs/hour の制限を超えてしまった場合
Tags: Ruby

2012-01-21 [長年日記]

_ 今度からrvmでruby入れるときはdocument忘れないであげたい

ri 使ってないよ chm で決まりでしょという人には無関係な、ものすごく今さらな話。

RVM: Ruby Version Manager - 'rvm docs' - Working with rdoc / yard.

手で作業するときは rvm*1 で入れた 1.9.2 を常用してる*2んだけど、実は「1.8 のときに超お世話になってた ri で全然ドキュメント見れなくてすげー不便」と思っていた。いろいろ調べて

yri + yard-doc-core gem

にしてたんだけど、実は

rvm docs generate するだけでよかった

ことが発覚。

なんてこった。これで ri の補完も活かせて嬉しい。

以下はこれを調べるきっかけになった Twitter timeline の抜粋。

19:27:23 <shinji_kono> ruby って、perldoc みたいな offline document な
いの?
19:27:47 <_ko1> @shinji_kono rdoc ってやつが(使ったことないですが)
19:30:46 <_ko1> @shinji_kono 私は windows 使ってるので chm ファイルで
見てます
19:39:17 <shinji_kono> 5分で学ぶRubyは書きました。が、Perl の方には
perldoc 使えって書けるんだけど、Ruby は rdoc ってわけにはいかないらし
い。
19:43:17 <nalsh> @shinji_kono 英語でよろしければ rdoc で、これはCソー
スないドキュメントが由来。「るりま」という日本語マニュアルプロジェクト
はそれとは別ってのが日本人にはちょっと複雑ですかね
19:56:08 <shinji_kono> どうも、Core なライブラリのドキュメントは ri で
引っ掛からないみたいだね。
20:01:18 <nalsh> @shinji_kono Ruby をインストールした時に rdoc を入れ
ていないのではないでしょうか
20:16:32 <shinji_kono> 僕の希望としては、ri File.open でなんか出て欲し
いです。
21:15:00 <wtnabe> @shinji_kono 自分もよく分からないんですが ri は 1.9
からあんまり役に立たなくて yri と yard-doc-core gem を使うとよさげな気
がします。この辺、コアな人たちの話題にあまりのぼらない印象。
21:24:11 <noplans> @wtnabe riで困ってないんですが、なんか問題ありまし
たか?
21:25:00 <wtnabe> @noplans うーんrvmで入れた1.9だとriで特にコアのドキュ
メント全然出ないんですよね。だから以前よりだいぶ不便を感じています。
21:27:09 <noplans> @wtnabe ri --list-doc-dirsにないとか、インストール
時にドキュメント入ってないとかですかねい
21:36:01 <wtnabe> rvmでの入れ方を間違ってるのかな
21:38:16 <wtnabe> 正しい方法が分かっていないということか
21:39:12 <wtnabe> http://beginrescueend.com/rubies/docs/ お。
21:40:20 <wtnabe> take a *long* time って言われた。bingo っぽい。
21:40:45 <wtnabe> まぁすでに yard-doc-core gem 使ってるんだけど。
22:14:29 <noplans> @wtnabe rvm でのインストール時に
--enable-install-doc つけるとドキュメント込みでインストールされないで
すかねい
22:23:47 <wtnabe> できてた。なるほど。

rvm install --enable-install-doc でもいいみたいだ。なるほど、いろいろ参考になりました。

※ ふと思ったけどここに出てるの、自分以外みんな大学の人?

Windows の場合

installer - ruby 1.9 ri problem - Stack Overflow

ちなみに Windows には ri 付かないっぽいけど、まぁ Windows なら chm でいいんじゃないすかね。自分は Mac だけど ichm - iChm is a CHM reader for Mac OS X - Google Project Hosting で便利に使ってます。これは複数タブ開けるので、以前ほど chm きらいじゃなくなりました。

myrurema という別解

yhara/myrurema - GitHub

るりまプロジェクトですね。コード内のコメントからの生成ではないのでラグがある代わりに日本語で読めます。

Tags: Ruby

*1 まだ rvm なの? ぷぎゃーとか言わないの。

*2 待つのが面倒でまだ 1.9.3 にしてない。


2012-01-28 [長年日記]

_ Ruby Gold Programmer になりました

ただしもう一回受けて合格する自信がありません(笑

実は12月に無理矢理時間を作って受けに行って落ちてます。準備は1週間程度。Ruby技術者認定試験 公式ガイド (ITpro BOOKs)(伊藤忠テクノソリューションズ)*1メタプログラミングRuby(Paolo Perrotta)の第1章と @IT の模擬試験。結果、72点で不合格。

このときの感想としては

  • へー、プロメトリックの試験てこんなんなんだ(初めて受けた)
    • 15分前集合を守らないと受験できないのでとにかく行きの時間には余裕を持って!
    • 「あとで見直す」機能使いこなせなかった
    • 時計、筆記用具、携帯、すべて持ち込み不可。ハンカチ、ティッシュは可。パソコンの画面上で残り時間は確認できるし、メモ用のペンと薄いボードがあるので特に問題はない。
    • 確認画面を持参しろとプロメトリックのサイトには書いてあるんだけど、2回とも不要と言われた。
  • Silver の公式ガイドはよくできてる。これとリファレンスマニュアルだけで Silver は合格できるんじゃないかな。
  • メタプログラミングRubyはスバラシイ
  • @IT の模擬試験はやや簡単なものばかり出ている気がする(試したら90%以上は正解できていたので変に自信を持ってしまった。)
  • そんなに頻繁に起きないはらいたが直撃して超つらかった

プロメトリック試験は高いから避けていたのですが、あの方式の試験には慣れておいた方がいいと思いました。ちょっとビビる。それともイマドキの若い人はああいう試験慣れてるのかな。すべてパソコンで、隣の人は違う試験受けてて、ヘッドホンで遮音して、みたいな。1回目に受けたところはヘッドホンとは別に耳栓も用意してあったけど、2回目のところにはなかったので、試験会場としてはヘッドホンが必須要件なのかな? 頭がでかいのでああいうところのヘッドホンは苦手です><

勉強に使ったものでは、他の合格した方々も推しているメタプログラミングRubyが素晴らしいです。これでだいぶ上乗せできたし、今までなんとなく書いてた部分がすごく明確になりました。本当は「メタプログラミング」っていう言葉がなんとなくイヤで避けていたのですが、これは完全に損してましたね。今では特にテストのときにこの本の知識が役に立ってます。

ただ、1回目のまとめをすぐやらなかったのは完全に失敗でした。合格するつもりで受けるのは当然なのですが、終わった後にまとめる時間を用意できるようにしておくといいです。平日半休で受けるとまとめる時間がなくなって忘れちゃいます。

2回目の今回もけっきょく準備期間は1週間程度になってしまいました。リファレンスマニュアル中心に改めて基礎をまとめ直してたんですけど、結果はほとんど変わらなかったのでこれはあまりいい方法ではなかったみたい。むしろ Silver 向きの勉強方法だったかも。でもここでまたいくつも発見があったし、結果だけみれば合格だから、まぁいいかなぁ。本当はもっとライブラリ周り見た方がいいんだよなと思いながら基礎の Array や Hash をまとめ直していたら、案の定使っていないライブラリが出題されてしまいました。いやでも Array や Hash をどう使うとどういう例外が発生するとかも忘れてたし、やり直したことには意味はあります。きっと。

ちなみにピッケル本を読んでないので、それが敗因かもしれないし、そもそもコンパイラ作った経験とかあればそこから広げて類推できた部分もたくさんあったのかもしれません。*2

正直、受かったはいいけど達成感が全然ないです。まだ全然 Ruby 分かってなさすぎる。まだまだだな!

認定試験を受けようと思った人へ

自分が今回の経験を通じて気づいたことをまとめておきます。何かの参考になれば。

  • Rubyインタプリタを自分の頭の中に作り上げられれば合格する
  • 使ってる時間と言語の習得レベルはまったく関係ない
  • なんとなく書けちゃう人、アプリや API などに強い関心を持っている人よりも真面目に Ruby を勉強する人の方がたぶんこの試験に向いてる
  • 常にググったり ri を引いていると基本的な文法やライブラリのメソッドをあまり覚えていない
  • 常に irb などでコードを動かして確認するクセがついていると細かい記述を覚えられない
  • なんとなくエラーの出る書き方を避けていると「ここではこういうエラーが起きる」ことを知る機会を失う
  • 使っていないライブラリのことなんかさっぱり知らない
  • ちゃんと勉強する時間を確保しよう。眠い頭で無理にやっても入らない。でもこれがいちばん難しいかも。
  • 準備の時間だけでなく振り返る時間も用意しておこう。もし落ちたらこの振り返りこそが次へのステップになる。

うーん、全然参考にならないな。

少なくとも自分は言語そのものにはあまり関心がないなーという自覚があったのですが、見事にそれがこの試験を受けるうえでは阻害要因になりました。すでに使えている人こそ一度気持ちをリセットして勉強し直すのがいいんじゃないかと思います。ただ、いろいろ合格した人のブログを見て回っていたのですが、Ruby を書いたことないけど合格してる人もいるんですよね…。どういう頭の構造をしているんだろう。不思議。

プロメトリックの試験会場はこの辺だと富山がよい

Ruby に限らずプロメトリックの試験は全部同じ会場で受けられます。ただし、当然ですが地域によって試験会場の揃い方にバラツキはあります。

金沢には2012-01時点で受験可能なところは一つしかなく、しかも交通の便は悪いです。*3金沢市内に住んでいて車で移動できるならいいけど、能登から電車で来ますとかいう場合はなかなか大変。

その点、富山は駅から徒歩圏内に試験会場がありますし、何より土曜受験ができます。そうなんです。金沢の試験会場は土曜受験できないんです。これものすごく困ります。みんながみんな業務で受験できるわけじゃないんだぞ。

というわけで富山に近い方は富山での受験も考えてみていいと思います。

ただし、冬の試験はトイレが近くなってつらいです。

Tags: Ruby

*1 だいぶ前に買うだけ買ってあった

*2 本当はそういうことを勉強できる道に進んでたはずだったなぁ、そういえば(遠い目)

*3 そもそも金沢で交通の便のよい施設ってほぼ皆無ですけど

本日のツッコミ(全2件) [ツッコミを入れる]

_ pico1a [なぜか全然勉強しないで2回落ちた者です(笑) 「使ってる時間と言語の習得レベルはまったく関係ない」の点、まったく同..]

_ wtnabe [普通エラー出ると分かってる書き方はしませんからね。何回も模擬試験を解いたり一つ一つ自分で書いて動かしてメモしたりして..]