他人のブログを読んだり、勉強会等のLTを聴いて感じることこんにちは。他人のブログを読んでいたり、勉強会や某ABCに参加してLTとか聴いていて感じたことを書きます。お前のブログはオリジナリティがあるのか?既知の内容なのに、そういった内容をブログに書いている人をよく見かけます。参考サイトのリンクを張っていればまだ許せますが、そういったものがないブログもあります。本に載っていることを書いているブログも見かけます。最近見かけたのでは、iOSでのUITableViewの使い方とか。これはひどいと思いました。お前のブログは、どこかのサイトのページの翻訳ではないか?Androidに関して、キーワードで日本語サイトをググると、Googleのドキュメントリファレンスのページをほぼ翻訳したページを見かけることがあります。ブログを書いている本人は、日本人のために翻訳してあげているんだとか言いそうですが、ブログ中に出てくるサンプルコードも、元のドキュメントリファレンスのページと同じことが多々あります。真っ先に日本語に訳して、日本で最先端を行っているとでも思っているのでしょうか。技術的にとんがりたいなら、自分で作ったサンプルアプリのコードでも載せて欲しいですね。最近見かけたブログでは、英語圏のブログのほぼ翻訳で、コード断片もコピペで、元のコードの、作者独自定義の定数を、定義もせずに(定義を引用もせずに)使用している例がありました。元の英語圏のブログでは、githubにサンプルコードがあったので、定数の定義を見ることができましたが、翻訳サイトでは、githubへのリンクは張られていませんでした。勉強会や某ABCのLTで笑いを取ることしかしない勉強会や某ABCに参加してLTを聞いていると、次のようなことがあります。アニメの画像をスライドに入れる。奇声を上げて笑いをとろうとする勉強会では見かけないですが、某ABCのLTではよく見かけます。ビジネス、技術アピールで注目を浴びるようにして下さい。某ABCのLTで、当時流行っていた某ゲームアプリを、某テストツールで動かすことをやったLTがありました。言って、技術的に面白くないです。自分のプロダクトをテストツールで動かすのならいいですが、そうでないなら、単に笑いを取るだけの内容ですね。3.0.x編モリジュン(@zyunnosuke)氏が、RailsでオリジナルRakeタスク作成からRSpecテストまでの記事において、Rakeタスクの作り方、RSpecによるテストの仕方を解説してます。その記事では、RSpecは2.x系で、テストコードで、shouldを使っています。3.0.xで、expectを使いたいので、挑戦してみました。ReportGeneratorを作成する。ReportGeneratorには、次の内容を記述。endend&#91;/ruby&#93;クラスメソッドで、ダミーな処理を記述している。reports&#91;/bash&#93;生成されたlib/tasks/repots.rakeに次の内容を記述。3.0.xではサポートされなくなりました。rspec-itsを導入すると、itsが使えるとのことです。gemと共に、Gemfileに以下を追加。installを実行。RakeタスクのRSpecの作成rspecによるテストが出来るように次のコマンドを実行します。rspec:install元記事では、spec/lib/tasks/reports_rake_spec.rbファイルは、次の内容でした。2.x向けの記述なので、次のように書き換えます。3の重要な変更を参考にしました。.rspecファイルで、–warningsの行を削除しておきます。(ArgumentError)というエラーが出ますが、spec/spec_helper.rbの冒頭に次の記述をします。Railsを参考にしました。failuresテストが通りました。2.14.6では書き換える必要があります。Rubyにおけるモック、スタブについては自分は初心者なので、試行錯誤して、書き換えてみました。最後のテストの部分は、本によると、失敗するはずなのですが、なぜか通ってしまいます。この点は理解不足なので、保留にします。コードは、GitHubにおいてあります。4向けの記事を読んでいます。installでエラーになります。うまくいくGemfileを示します。RSpecによるRailsテスト入門という電子書籍を読んで、RSpecでテストコードを書くことに取り組んでいます。Rails改訂新板のサンプルアプリにRSpecでテストコードを書きました。Memberクラスは、次のようなバリデーションがあります。gemを使って、テストデータを生成しました。endendこの場合、テストコードを書くと、英語環境ではテストは失敗しません。ところが、i18nで国際化して、日本語環境でテストすると、fakerは国際化に対応しているようで、nameが日本語になったり、emailが不正な表現になって失敗するようになります。バリデーションでは、nameは英字で始まり、英数字からならないとダメだからです。full_nameについては、日本語のデータが生成されるようにしたいです。ロケールをスイッチできるようです。そこで、次のファイルを使ってテストデータを生成するようにしました。ロケールをスイッチすると、その後は設定したロケールのままになると期待したのですが、そのようにはならないようで、各フィールドごとにロケールをスイッチしないとダメでした。このテストデータを使用すると、テストが通るようになりました。part2以前、「OminiAuthを使ってtwitterで認証をする」の記事を書いたのですが、理解が足りないようで、最近、twitterでのOmniAuthを使った実装をやっているんですが、うまくいっていません。このドキュメントでは、はじめにブログシステムが与えれているものと想定して、omniauthを使って認証の実装をやっています。ソースコードをダウンロードできるので、ダウンロードして、ソースコードを見ながら、omniauthを使って認証の実装をする前のブログシステムを再現しました。ドキュメントに従って、認証を実装しました。いくつか、サンプルで変更した点があるので列挙します。Userクラスでcreate_with_omniauthメソッドを実装するとき、request.env[oamniauth.auth]が、user_infoではなくinfo属性を持っていることを考慮する必要がある。current_userをapp/hcontrollers/application_conroller.rbで定義しているが、app/helpers/sessions_helper.rbで定義して、それを前者のファイルでincludeした。ブログシステムに記事がない状態で、twitterでアプリ認証後遷移する画面でtrueの単語が表示されてしまうが、原因を探っていない。:-)ソースコードをrevised-241-simple-omniauthに公開します。Railsで、パスワードを非可逆暗号化する場合、has_secure_passwordを使うと便利です。私は、twilogサービスのように、メールアドレスを入力しない場合、暗号化したバスワードをシステムに保存しないようなRailsアプリを作りたく思っています。4では、validationsというオプションを持っていて、値falseを渡すと、has_secure_passwordがスキップされます。3.2では、そのようなオプションがなく、スキップが可能ではありません。validationsというスレッドがあり、それを試してみたのですが、コードが足りないようで、動作しませんでした。Scratchで、スクラッチから認証を実装しているサンプルを見つけました。3.2で動かそうとすると、問題にぶつかりました。3.2では使用を推奨されていません。使用すべきですが、それが定義された属性は、データベーステーブルのカラムにならなければいけません(後記、ここの記述は間違いかもしれません。ググっていて、そういう情報に触れたのですが、そのurlを失念しました。カラムにならなくても、問題無いようです)。平文のpasswordやpassword_confirmationは、データベースに保存すべきではないので、attr_accessibleを使用できないということになります。そこで、Usersクラスでは、emailのみ、attr_accessibleを使用し、passwordとpassword_confirmationに対しては、アクセサをあらわに書きました。endのように書き、Userクラスを生成するとき、emailの値のみを渡すようにしました。このようにすることで、パスワードが平文でデータベースに保存されることはなくなりました。改良したサンプルを、GitHubに置きました。andropenguin/auth_from_scratchあとは、メールアドレス、パスワードの入力がない場合、パスワードの保存を行わず、入力がある場合、暗号化したパスワードをシステムに保存するようにしたいですが、それは多分、そんなに難しくはないでしょう。2013年11月30日OmniAuthを使ってtwitterで認証するOmniAuthを使ってtwitterで認証する認証、ツイート機能実装ログイン、ログアウトはわりと、すぐにできたのですが、ツイートできるようになるのに時間がかかりました。ソースコードをomniauthTwitterSample2に公開します。omniauth-twitter備考2の記事で、ツイートするupdateメソッドのレシーバーを、Twitter::Client.newで作っているが、それだと、updateがundefinedメソッドになってしまって、ツイートできない。“YOUR_ACCESS_SECRET”endとしている。このclientを使うと、client.updateでツイートできる。2013年4月7日マーチン・ファウラー著リファクタリングの第1章のテストコードを作ったマーチン・ファウラー著のリファクタリングを読んでいるんだけど、第1章のサンプルコードに対するテストコードを作成したので公開する。この本では、リファクタリングの前に、リファクタリング対象コードに対するテストコードを書けと書いてあるのに、ユニットテストの紹介は第4章で手短にしか説明していない。第1章のビデオレンタルシステムのサンプルコードのリファクタリングでは、テストコードが掲載されていなくて、テストコードなしでリファクタリングするのは怖いし、できない。そこで、第1章のサンプルコードに対するテストファイルを作成した。テスト項目をグループ分けしていなかったり、同じような記述をメソッド抽出していないけど、テストコードだからいいかと思う。テストコードはGitHubに上げたので、使いたい人がいたら、どうぞ。テスト対象コードを本の記述の通りに入力したつもりだが、ascii、html両フォーマットでのフッター行の期待する文字列が正しくなく、テストコードが動作しない場合があるかもしれない。Requestを送って欲しい。JUnitは4を使用し、Eclipseでmavenプロジェクトを作成し、サンプルコードを写経、テストコードを作成、テスト、リファクタリングを行った。pom.xmlファイルも同梱した。https://github.com/andropenguin/testfiles_refactoring_chap01.gitリファクタリングRubyエディションの第1章のサンプルに対するテストコードは、以前、リファクタリングRubyエディションの第1章のテストコードを作ったで記事を書いた。6.17のテストコード今、リファクタリングRubyエディションを読んでいます。テストコードが載っていないし、コードを補わないと動かなかったり、擬似コードで動かないコードが載っていたりして、ストレスマッハです。Definition)のテストコードが書けたので、記事にします。:successendとなっていますが、stateはクラス変数で、アクセサを定義する必要があります。クラス変数のゲッタによると、クラス変数に対しては、attrなんとかでアクセサを定義することはできないそうなので、コードを書いて定義しました。リファクタリング対象コードは、次のようになります。:successendendこれに対するテストコードは次のようになります。あと、この節のサンプル:def_eachを使って類似メソッドを定義するで、def_eachメソッドを定義するClassクラスは記述されているんですが、プロダクションコードでどう使うのか書かれていないので、補います。これは、Module#define_methodを抽象化する話を参考にさせていただきました。