2018年5月 9日 (水)

Rubyの拡張ライブラリWin32OLEの昔話をしてみた

社内の勉強会で急遽、喋らなくてはならなくなり、前日にプレゼンテーション資料をでっちあげて、Win32OLEの昔話をしてみた。

| | コメント (0) | トラックバック (0)

2016年9月19日 (月)

[Ruby][Rails][Book] Agile Web Development with Rails 5

Agile Web Development with Rails 5 の Part II まで写経した。

でもって、何か動かないコードがあったりしたら、せっせと errata に投稿していた。 そしたら、電子書籍版の Acknowledgments に名前を載せてもらった。( 紙の本は未確認 )

写経してみて感じたことは、サンプルコードはスクラッチから書かれておらず、Rails 4 で書いていたものを Rails 5に移植したのではないかということ。

Task J:Internationalization の章は多少の手抜きが感じられる。 Task K: Deployment and Production の章はちょっとわかりにくかった。 Task K は、写経というより、適当にdeploy 用の環境を作ってcapistranoを使ってdeployできることを確認する程度で終わってしまった。 まあ、何にせよ、自分も少しは、Railsが少しだけわかるようになってきたという手応えを感じることができたのが、今回の写経の収穫である。

余談だが、Acknowledgements が正しい綴りだと思ってたんだけど、Acknowledgments も正しいことを初めて知った。

電子書籍は今だにβ版のままだな。

| | コメント (0) | トラックバック (0)

2016年7月24日 (日)

[Ruby][Rails] ActionCable in Agile Web Development with Rails 5

Agile Web Development with Rails 5 には、ActionCable を使う例が登場するのだけど、これが動作しない。の続き。


結局、errata を良く読み返してみて、app/channels 直下に products_channel.rb を配置すれば動くことがわかった。


更に、


class ProductsChannel < ActionCable::Channel::Base

よりも


class ProductsChannel < ApplicationCable::Channel

とした方が良さそう。


$ rails g channel products 

と実行して生成されるファイルでは、そうなっている。

| | コメント (0) | トラックバック (0)

2016年7月17日 (日)

[Ruby][Rails] ActionCable in Agile Web Development with Rails 5

Agile Web Development with Rails 5 には、ActionCable を使う例が登場するのだけど、これが動作しない。


Subscription class not found: "ProductsChannel"

写経している自分のコードが間違っているのかと思い、書籍のページからダウンロードしたソースを試してみたが、やっぱり同じエラー。
Vagrant 環境で試しているせいかと思って、ローカル環境で試してみても同じエラー。
errata を見てみたら、同じ現象が既に報告されていたので、自分の環境固有の問題ではなさそう。


ところで、ActionCable のサンプルをWebで眺めていると大概、redis をインストールしているのだが、この本ではインストールしていないし、config/cable.yml には


development:
adapter: async

となっていて、redis を使うようになっていない。開発環境では、redis がなくても、ActionCableが動作するのだろうか?


... githubを読むとどうもそうらしい。

| | コメント (0) | トラックバック (0)

[Ruby] Rails の render

Agile Web Development with Rails 5 を読んでいて初めて知った(ちゃんと認識した)こと。


View の中で


render @cart

とやると _cart.html.erb の中では、 cart を使って @cart にアクセスできる。

| | コメント (0) | トラックバック (0)

2016年7月 9日 (土)

[Ruby] Ruby or Rails

Ruby の機能か Rails の機能かを選択するクイズを10問出題するサイト。

Ruby or Rails

10問中9問しか正解できんかった。

| | コメント (0) | トラックバック (0)

2016年2月29日 (月)

[Rails] Rails というか ActiveRecord というか Arel で SQL の case

いろいろ調べてみたが、Rails 5 beta3 でもまだ駄目だった。

<https://github.com/rails/arel/pull/400>

が arel にマージされているので近い将来には、arel を使えば、SQL の case に相当するものを arel を使って書けると思われる。

Rails 5 beta3 でインストールされるのは、arel-7.0.0 だったが、これには 残念ながら、含まれていなかった。

なので、普通に case を文字列で渡してやるしかない。

scope :sel_case_col1, -> { select( "case when col1 = 'AAA' then 'aaa' else col1 end as col1" ) }

| | コメント (0) | トラックバック (0)

2016年1月 9日 (土)

ssh の known_hosts

このknown_hostsの話が何か唐突で、何のことだろうかと思っていたのだが、そういうことだったのかとようやくわかった。 正月明けから風邪で体調が悪くて、ci.ruby-lang.org は、ずっとアクセスしていなかった(他のRuby関連の情報もちゃんと見てなかった)ので気づかなかった。 私は、素直に、-R オプションを使った。

| | コメント (0) | トラックバック (0)

2015年12月26日 (土)

[Ruby] Ruby 2.3.0

Ruby 2.3.0 がリリース。[ruby-list:50266]

毎回、感心するのだが、このリリースにすぐに追随してくれるrbenv(ruby-build)がすごい。

$ rbenv install -l | grep \ 2.[234]
2.2.0-dev
2.2.0-preview1
2.2.0-preview2
2.2.0-rc1
2.2.0
2.2.1
2.2.2
2.2.3
2.2.4
2.3.0-dev
2.3.0-preview1
2.3.0-preview2
2.3.0
2.4.0-dev

ということで、

$ rbenv install 2.3.0; rbenv install 2.3.0-dev; rbenv install 2.4.0-dev

| | コメント (0) | トラックバック (0)

2015年12月12日 (土)

[Ruby] RubyKaigi 2015(2日目)

今日も参加するかどうか迷ったのだけど、少しは体力が回復していたのと、 Sutouさんの話 が聞きたかったのと 全く参加しないのも寂しいので、ちょっとだけでも参加しようと思って会場に向かった。

完全に1コマ目には遅刻したのだが、Sutouさんの話を聞くことができた。やっぱり面白い。後で、Sutouさんを掴まえてRSpecについてどう思っているか質問してみたかったのだが、結局掴まえることができなかった。

続けてTurbo Rails with Rustの話を聞いたのだけど、驚くほどに完璧に英語が頭に入ってこないのが衝撃だった。やっぱり疲れていたらしい。

午後をそのまま聞き続ける自信がなかったので、お昼のタイミングで退散した。

自宅に戻って休んだあと、Youtubeで Pragmatic Testing of Ruby Coreを視聴。ということでテストで始まりテストに終わった1日だった。

以下、ちょっと個人的に懐しく、いろいろ思い出したので記憶を頼りに書いてみる(残念ながら当時のメールも記録も残っていないので記憶違いがあるかも知れない)。思い出すきっかけをくださったSutouさんに感謝。

RubyUnitが初登場したのは、多分 [ruby-list:17335]。

で、この投稿にあるURLはどちらも既に存在しない。現存するのは、RubyUnitのページ 、 私の友人が書いたTesting Frameworkの解説というのは、石井君が書いたKent Beck Testing Framework 入門 のことである。

当時、RubyUnit は、このTesting Frameworkの解説にあるJUnitのソースコードを参考にしながら実装した。 ただし、そっくりそのまま移植した訳ではなく、Rubyのメタプログラミングの機能も使って、より簡潔にテストを書けるようにした。 そのRubyUnitのコードを石井君に見せたときにRubyってこんなこと(メタプログラミング)ができるのかと驚かれたのを覚えている(もっとも、当時のJavaにもReflection の機能があったはずで、同じようなことはJavaでも実装しようとすればできたはず)。

また、メソッド名などもJUnitそのままではなくRubyっぽく修正した。 Unit Testing Framework のコンセプトの1つにプログラミング言語を使ってテストコードも書けるというのがあった。なので、Sutouさんの話に、RubyUnitを使ったテストのコードがRubyっぽいのも当たり前といえば当たり前である。

石井君とは、その後、京都のPerl/Ruby Conferenceで一緒に講演することになった。 今では到底考えられないことであるが、まつもとさんのRuby Keynoteの真裏のコマになっていた。 観客が数人だったら喋るのをやめて、まつもとさんのキーノートを聞きに行きましょうと観客に交渉しようかと冗談半分で石井君と話したりした。

幸いなことに講演には、それなりに人数が集まってくれ、その中の一人、ごとけんさんにRuby自身のテストをRubyUnitで書くというのはどうでしょう?と聞かれた。 既にDave Thomas と Andy Hunt がRubyの本(後に「ピッケル本」と呼ばれるようになる本)を執筆中で、Rubyの挙動が執筆中に変わっていないか確認するためにRubyUnitを使ってRubyをテストしていると返事をした。 RubyUnit には、実行した assertion の数と成功したassertionの数を表示するという機能があった。これは、元々のJUnitにはなかった機能で、Rubyの本を執筆中のDaveとAndyからのリクエストによって実装した機能だった。

RubyUnitを作ったのは私だけど、最初のきっかけをくれたのは石井君だし、RubyUnitならではの機能が実装されたのは、Andy や Dave のおかげである。RubyUnitをネタにして本を書くこともできたし、その後、それをネタにして日本初のLigtning Talksに登壇する機会も与えてもらった。

Sutouさんの話に Lapidary は、Rubyっぽくないという話があったが、あれは、Lapidary が SUnit(元祖xUnit であるSmallTalkのTesting Framework)をベースに実装されていたからである。 内部の実装もAPIもSUnitを意識したものになっていたと思う。 実は、Lapidary の作者には、RubyUnit が Testing Framework っぽくないと喧嘩を売られ指摘されたことがある。JUnitをベースにしているので、SUnitとは違っていたのは当然なのだけど。あと、Shibataさんの話にもあったけどRubyUnit自身のテストがないことも指摘された。

Lapidary の作者がRuby標準のTesting Framework を実装するという話になったときに、やりたい人にやってもらうのが一番なので、Lapidaryの作者にすべてお任せすることにした。 ただし、1つだけ私が主張したのは、RubyUnitで書かれたテストが既にあるから、必ず既存のテストも動作するように互換性は保ってくれということだった。 私の拙い英語が本当に伝わったのかどうか良くわからないが、互換性は保たれていたようだった。

なんか取りとめのない話になってしまった。まあ、RubyUnitそのものは使われなくなったけれど、私にとっては、いろいろ思い出深いライブラリなのだった。

| | コメント (0) | トラックバック (0)

より以前の記事一覧