@kyanny's blog

My thoughts, my life. Views/opinions are my own.

Ruby

「メタプログラミングRuby」を買った

どうしてもすぐに読みたくなったので「メタプログラミングRuby」を買った。Metaprogramming Ruby: Program Like the Ruby Pros by Paolo Perrotta | The Pragmatic Bookshelf で原著の電子書籍版が買えるので mobi を Kindle で読もうか迷ったけど (値段は電…

Ruby で動画を扱うライブラリについて (RVideo, RTranscoder, FLVTool2)

Ruby で動画を扱うライブラリについて少し調べたので書いておく。ざっと探したところ、 RVideo, RTranscoder がそこそこ有名なようだった。あと変わり種で FLVTool2 というのがあった。他に良いのがあったら教えてください。ちなみにこれらのライブラリで動…

Rails勉強会@東京第52回に参加した

Rails' Wiki - Rails勉強会@東京第52回前回に引き続き二回目の参加でした。所用のため途中から。 bundler のソースをばりばり読んでるところでした。みんなでソースコードリーディングってのもためになりますね。読んでるところに追いついていくので精一杯で…

日本Ruby会議2010に参加します

日本Ruby会議 2010, 8月27日〜29日日本Ruby会議2010に参加します。さっきチケットを買った(懇親会のは売り切れ)一度参加してみたいと思っていたイベントなので、楽しみです。予定がかぶりませんように。http://rubykaigi.org/rubyists/kyannyさて、交通手…

FactoryGirl で has_many/belongs_to な association を書くときハマった

Rails のテストを書いていて、フィクスチャはのちのちメンテナンスに苦労しそうだから FactoryGirl を使ってみた。FactoryGirl についてはここが詳しい http://www.func09.com/wordpress/archives/532上のページの例にあるとおり、中間テーブルを使うような…

閑話休題: 俺のかわいい depot が動かなくなった...

二週間ばかり停滞していたけど、今日の午後に二時間ほど時間が作れたので続きをやろうとしたら、 Rails 環境が動かなくなってしまっていた。たぶん、 /usr/local 以下に入れた ruby1.8.7-p249 で動かしていたのに、それを消しちゃって MacPorts から入れた R…

8章 オブジェクトとクラス

9章は外部ライブラリや、やや特殊な機能に言及した内容なので、8章が実質的な最終章。 Ruby はクラスベースのオブジェクト指向 クラスは class ClassName ; end で定義する クラス名は大文字ではじめる (クラス名は定数なので クラスの宣言のなかには任意の…

Mocha でスタブ/モックを使ったテストを書く

Mocha という Ruby のスタブ/モック用ライブラリを使ってテストを書いてみた。 Ruby もテストもスタブ/モックもよくわかってないので色々間違ってるかもしれないです。 スタブとモック スタブとモックはちょっと違う物らしい。スタブは関数的というか、状態…

TMail でメールから添付ファイルの画像を取り出しす

#!/usr/bin/env ruby require 'rubygems' gem 'tmail' require 'tmail' mail = TMail::Mail.parse(STDIN.read) mail.parts.each do |m| nexf unless m.content_type != 'image/jpeg' m.base64_decode File.open('xxx_new.jpg', 'w'){ |f| f.write m.body } e…

TMail で画像の添付ファイルつきメールを作成する

#!/usr/bin/env ruby require 'rubygems' gem 'tmail' require 'tmail' require 'base64' mail = TMail::Mail.new mail.to = 'yyyyyy@example.com' mail.from = 'xxxxxx@example.com' mail.subject = 'test' mail.date = Time.now mail.mime_version = '1.0'…

RMagick で画像にタイムスタンプのテキストを合成する

#!/usr/bin/env ruby # -*- coding: utf-8 -*- require 'rubygems' require 'RMagick' require 'exifr' img = Magick::ImageList.new('xxx_orig.jpg') draw = Magick::Draw.new draw.annotate(img, 50, 50, 50, 50, Time.now.strftime('%F %T').to_s) { self…

exifr で EXIF 情報から日付情報を取得する

#!/usr/bin/env ruby require 'rubygems' gem 'exifr' require 'exifr' exif = EXIFR::JPEG.new('xxx_orig.jpg') p exif.date_time p exif.date_time_original p exif.date_time_digitized xxx_orig.jpg がカレントディレクトリにあるものとする。Ruby RMagi…

インスタンス変数を使うべきときと使うべきでないとき

今日教わったことが、とても腑に落ちる説明で勉強になったのでメモっとく。Rails なアプリのコントローラでアクションを書いてて、 def hoge @hoge = Hoge.find_by_xxx response.headers['X-Hoge-Moe'] = @hoge.moe render :text => 'OK' end こんなコードを…

OpenURI::Meta

>> require 'open-uri' >> open("http://ruby-lang.org/") { |f| f.meta } meta メソッドで、ヘッダ情報とかのハッシュオブジェクトがとれる。あと Ruby のインデントは2スペ。これ大事らしい。インデントは2スペ。

第11章 タスクF: ユーザ管理

管理画面と管理者ユーザの追加、アクセス制限などの実装。モデルの仮想属性、セッションによる認証、トランザクションとフックなど。 モデルの仮想属性 attr_accessor などで定義する データベースのテーブルのカラムと関連付かないがモデルオブジェクトが保…

第10章 タスクE: チェックアウト!

注文する機能の実装。モデル間のリレーションが出てきた。 has_many, belongs_to など。 データベースの外部キー制約 データベースの種類に依存する (汎用性はない) モデル間のリレーションシップ モデルと連動したフォーム 空のモデルオブジェクト (まだデ…

第9章 タスクD: Ajaxの追加

Ajax。部分テンプレート、 RJS など。 RJS はなんかむずかしそう。 部分テンプレート ビューの一部を専用のファイルにおさめたもの ふつうは one action => one view template となる 「一つのテンプレートにロジックが入りすぎていないか」 部分テンプレー…

第8章 タスクC: カートの作成

ショッピングカート機能を実装する。セッションを使う。フラッシュも。 セッション ステートレスな HTTP プロトコルの上位でステートフルトランザクションの仕組みを擬似的に実現するもの Rails では cookie ベースのものがデフォルト => 他のストレージを使…

第7章 タスクB: カタログの表示

カスタマーがアクセスする商品一覧ページを作る。 抽象度を持たせてプログラムを作成する コントローラのアクション内にモデルべったりの実装をしない レイアウトを利用してテンプレートを warp する yield :layout, @content_for_layout button_to ヘルパー…

第6章 タスクA: 商品の管理

商品管理機能を実装する。 データベース接続情報 config/database.yml scaffold と migration migration ファイルの中で self.up, self.down メソッドを定義する 検証 (validation) はモデルで行う モデルはコードの世界とデータベースの間に立つ門番 モデル…

第5章 Depotアプリケーション

第5章はこれから作る Depot についての概要説明のみ。実作業はないのでパス。 RailsによるアジャイルWebアプリケーション開発 第3版 RailsによるアジャイルWebアプリケーション開発 第3版 (見だし一覧) GitHub - kyanny/agile_web_development_with_rails: M…

第4章 Hello, Rails!

4章からは実践編なのでひたすらサンプルコードを打ち込んだ。なのであんまり拾ってメモすることがない。いくつかマーカーをひいたところもあるので、そこを書きつつ、 github のコミットへの permalink を並べておく。 URL /path/to/app/controller/action E…

第3章 Railsのインストール

インストールの方法だけなので軽く流す。 特定のバージョンの Rails をインストールする # gem install rails --versioin 2.2.2 新しい Rails アプリケーションを作るときに特定のバージョンの Rails を使うように指定する $ rails _2.2.2_ --version Rails …

7章 メソッド

メソッドはサブルーチンのようなもの オブジェクトにメッセージを送り、内部状態を変化させる 内部状態を変化させない関数的メソッドもある メソッド呼び出し、括弧の省略、メソッド連鎖 引数とメソッドの結合は弱い レシーバ (オブジェクト) の省略 private…

my_ruby_select というプログラムを書いた => rvm 使うとイイらしい

MacPorts には python_select というプログラムがあって、これは MacPorts でインストールした複数の python 実行ファイルのバージョンを切り替える便利スクリプトです。それを真似た感じのを Ruby で書いてみました。ただし、 MacPorts 用ではなくて、自分…

6章 変数と式

キーワード拾いメモは明日。変数と式についてはマインドマップを書いてみたのでアップ。演算子はかけなかった。 変数 オブジェクトへの参照 複数の変数が同じオブジェクトを参照していることがある cattle = "yahoo" p cattle.length #=> 5 animal = cattle …

第2章 Railsアプリケーションのアーキテクチャ

MVC Model (How, どのように実行すべきか) モデルは門番 ビジネスルール、データ検証、データストア ActiveRecord ORM (Object Relational Mapping) テーブル => クラス, 行 => オブジェクト, 列 => オブジェクトの属性 View ユーザーインターフェース 商品…

第1章 はじめに

トニー・ブザン「頭がよくなる本」をだいたい読み終えつつあるので、読み終えた章のマインドマップを書いていくことにした。読みながら重要だと思ったキーワードにマークをつけているので、そのマークを中心に拾い読みしてマインドマップを書く => キーワー…

5章 入出力

ARGV は配列。組み込み定数。 Array#inject は List::Util reduce とか Gauche の fold のようなもの。 expression = ARGV.join(' + ') total = ARGV.inject(0){ |subtotal, arg| subtotal + arg.to_i } puts "#{expression} = #{total}" Rubyではコードブロ…

「RailsによるアジャイルWebアプリケーション開発 第3版」を読み始めた

一日に2章ずつ読んでコードを実際に入力していくのを目標に。飽きとさぼり防止のために git で管理して一ステップずつコミットしていく。きりがいいところ(章が終わった)で github に push する。一回目の読みとコードの入力を同時にやると視線が動きすぎ…