You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert
ruby-gmailを使ってRubyからGmailのメールを受信して本文を取得 - Shoken OpenSource Society これの続きです。 前回に引き続き、ruby-gmailを使ってRubyからGmailからメールを取得します。 今回は添付ファイルの扱いです。 環境 OS CentOS 5.4 ruby 1.9.3 gem 1.8.21 ruby-gmail 0.2.1 mail 2.4.4 実装 ruby-gmailはmikel/mailのラッパーなので、mikel/mailのドキュメントを読みます。 mikel/mail · GitHub Testing and extracting attachmentsという項目にサンプルコードが書いてあります。 mail.attachments.each do | attachment | # Attachments is an
Rubyのメール操作ライブラリにはmikel/mailがありますが、それをGmailで使いやすいように薄くラップしたruby-gmailというものがあります。今回はこれを使ってRubyからGmailからメール本文を取得します。 環境 OS CentOS 5.4 ruby 1.9.3 gem 1.8.21 ruby-gmail 0.2.1 mail 2.4.4 インストール ruby-gmailをgemからインストール [root@xxx xxx]# gem install ruby-gmail LoadError: cannot load such file -- mime/message うーん、早速トラブル。 [root@xxx xxx]# irb irb(main):001:0> require 'gmail' LoadError: cannot load such file --
cles::blog 平常心是道 blogs: cles::blog NP_cles() « .docx, .xlsx, .pptx の MIME type :: CentOS を 5.8 にアップデート » 2012/03/09 mikel/mail を使ってメールから添付ファイルを切り離す ruby programming 47 1へぇ 久しぶりに Ruby でマルチパートメールの処理をしようと思っていろいろ調べてみたら mikel/mail というライブラリを見つけたのでちょっとおためし。 Mail: An All New Ruby E-mail Library To date, the main ways to send e-mails from Ruby have been Net::SMTP, TMail, and Rails' ActionMailer (which us
Ruby 1.9 から文字列や正規表現オブジェクトはそれぞれエンコーディング(いわゆる文字コード)を保持するようになりました。 たとえば 0xB1 0xB2 という2バイトは EUC-JP エンコーディングでは「渦」、SHIFT_JIS エンコーディングでは「アイ」という文字になります。つまり同じバイト列でもエンコーディングが異なれば異なる文字として解釈されます。 1.8 では文字列はただのバイト列でした。なので、それがどのような文字を表しているのか、つまりエンコーディングが何なのかはプログラムが知っている必要がありました。 1.9 では文字列オブジェクト自身が自分が何のエンコーディングかを知っています。同じ 0xB1 0xB2 というバイト列でも、それが EUC-JP の「渦」なのか SHIFT_JIS の「アイ」なのかは、文字列自身が知っています。 スクリプトエンコーディング スクリプ
_ flat_map、非決定性計算、リスト内包表記 Ruby 1.9では、Enumerable#flat_mapというメソッドが追加されている。 %w(ruby perl python).flat_map {|i| i.chars.to_a} #=> ["r", "u", "b", "y", "p", "e", "r", "l", "p", "y", "t", "h", "o", "n"] といった動作をするもので、要はブロックが返す配列を連結した配列を返す。 %w(ruby perl python).map {|i| i.chars.to_a}.flatten(1) とすれば同じことができるのにどうしてわざわざ追加したのか疑問に思われるかもしれないが、 実はflat_mapが追加されたということは、Rubyの配列がHaskellのリストモナドのように使えることを意味している。 以前の日記
Jay Fields' Thoughts: Alternatives for redefining methods メソッドの再定義の技法はいろいろあるが、どれも欠点があるというお話。状況に応じて使い分けるべき。 aliasで再定義 メソッドを再定義するときにこんな感じでaliasで元のメソッドをコピーするのは常套手段だ。 class Gateway def process(document) p "gateway processed document: #{document}" end end class Gateway alias old_process process def process(document) p "do something else" old_process(document) end end Gateway.new.process("hello world")
世の中 map reduce 大流行。 Ruby では map は頻繁に使うけど reduce って使ったことない。 と思って調べたら reduce って inject のことか。なーんだ。 そう言えば map も collect って名前持ってたね。 Ruby 的な名前 一般的な名前 collect map inject reduce rubyist には map 派と collect 派がいるらしいが、reduce 派というのは聞いたことないなぁ。 昔 matz さんが「Enumerable は -ect って名前のメソッドで揃えてある」って言ってたような気がする。*1 (0..9).to_a # => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] # -ect (0..9).collect{|i|i*2} # => [0, 2, 4, 6, 8, 10, 12, 14
(追記:2013-08-16) 本記事のトリビアを含む55のトリビアを以下の記事にまとめました。 知って得する!55のRubyのトリビアな記法 なぜかトリビア人気が再燃しているよ。 知って得する21のRubyのトリビアな記法 第2弾!知って得する12のRubyのトリビアな記法 これでみんながトリビア好きだということが分かったので、何とか絞り出して第3弾を書いたよ。ここでは第1弾、第2弾で使ったテクニックも使ってるから、知らないテクニックがあったら先に見てもらえるいいかもね。 1. Enumerable#each_with_object Enumerable#mapではブロックの代わりに&付きのシンボルを渡す技が知られているよ。 langs = ["ruby", "python", "lisp", "haskell"] langs.map(&:capitalize) # => ["Ruby"
What is mruby mruby is the lightweight implementation of the Ruby language complying to (part of) the ISO standard with more recent features provided by Ruby 3.x. Also, its syntax is Ruby 3.x compatible except for pattern matching. You can link and embed mruby within your application. The "mruby" interpreter program and the interactive "mirb" shell are provided as examples. You can also compile Ru
(追記:2012-12-03) 本記事を電子書籍化しました。「Gumroad」を通して100円にて販売しています。詳細は文末に追記しましたので、購入ご検討のほどよろしくお願いしますm(__)m 電子書籍「これからRubyを始める人たちへ」EPUB版 Rubyの特徴 Rubyは、まつもとゆきひろ氏(通称Matz)により設計されたオブジェクト指向プログラミング言語です。Rubyの特徴を一言で言うならば、それは「間口が広くて奥が深い言語」ということになります。 「間口が広い」というのは、インタフェースがシンプルで誰でもが簡単に使い始められることを意味します。「奥が深い」というのは、プロフェッショナルによる長期使用に耐えうる本物の言語であるということを意味します。「間口が広い」ということと「奥が深い」ということは本来競合する概念ではありませんが、その両方をバランスよく組み合わせるには、対象に対する
たとえば整数の配列から、条件に合う要素のうち、最初に現れる 10 個だけ拾いたいとき、どうしますか? ary.select {|x| x.even? }.take(10) ↑これは非常に明瞭なプログラムです。しかし select は、最初の 10 個だけでなく全要素をチェックしてしまうため、ary が大きいと無駄にループします。また、select の戻り値となる中間配列も無駄です。 ret = [] ary.each do |x| ret << x if x.even? break if ret.size == 10 end ↑これなら 10 個見つかった時点で終了してくれるし、無駄な配列確保もありません。しかし非常に強引で原始的で煩雑なプログラムであり、Ruby 1.9 の時代を迎えた新人類である我々には、可読性やメンテナンス性に問題があると言わざるを得ない。一言で言うと品がないのです。
釈迦に説法シリーズ :-p Thu, 21 Nov 2002 14:20:32 +0900 , 初稿 UnboundMethod とは Module#instance_method は、Module に定義されている instance_method を、UnboundMethod として返します。って、マニュアルに書いてあります。 要するに、Proc オブジェクトみたいなものを、instance_method から生成するわけです。まぁ、「みたい」であって、Proc オブジェクトではなく、Proc オブジェクトと違って実行コンテキストがくっついてこない。要するに純粋な「手続きの集合」と言っていいのだと思います。 わけがわからんような気がするけれど、Cの関数ポインタに似ている。C++で言うところのメンバ関数ポインタ。 Proc オブジェクトは、Lisp 系の closure だよね。というか
先日「ブログ書きが不調」と書いたが、言語のアウトプットが不調なときは、それ以外のことをするに限る...たとえば黙々とプログラムを書く、音楽に浸る、身体を酷使する、などだ。というわけで月曜日、天気は晴れなかったものの、研究のデータ処理に使うRubyスクリプトを書きまくって鬱憤を晴らしていた。 ところがそのプログラム脳のまま夜にはVimM#4に行こうとした時、そういえば内定者3人によるSkype会議が予定されていた(つまりダブルブッキング)ことを思い出し、自分の阿呆さに呆れ、本当にすみません、でもって結局気分は晴れず。 前置き(ただの日記)終わり。 本題。 Rubyの配列でいろいろいじる時に、for i in ...と array.each でだいたいできるんだけど、もちっとスマートにやりたいなぁと思って調べていたらこれ使えるんじゃね?と気がついたことがいくつかある。zipとinjectとev
ここ以前から分からなかったので調べてみました。 基本 class_eval Module で定義されている なので、クラスやモジュールにしか使えない irb(main):009:0> String.respond_to?(:class_eval) true irb(main):011:0> Enumerable.respond_to?(:module_eval) true irb(main):012:0> 'xxx'.respond_to?(:class_eval) false instance_eval Object で定義されている なので、クラス(Class クラスのオブジェクト)にもオブジェクトにも使える irb(main):003:0> String.respond_to?(:instance_eval) true irb(main):004:0> 'a'.respond_to?
CSVって、RFC4180とかに仕様がまとまってるんだとマイルドに驚きつつ、RubyのCSVクラスをのぞいてみた。FasterCSVと呼ばれていたものが正式にRubyに入り、1.9系のRubyではインターフェースが変わっているという話。CSVライブラリのソースコードには、冗長といっていいほどコメントが豊富にあるし、Rubyでライブラリを実装するお手本のような感じもある気がする。つらつら読んでいて気になったのは、CSV::Row#to_hashにある、次のようなコード。 def to_hash # flatten just one level of the internal Array Hash[*@arr.inject(Array.new) { |ary, pair| ary.push(*pair) }] end # CSV.new([["a", 2], ["b", 3], ["c", 5
SpreadsheetはRubyからExecelファイルを操作するライブラリです。 MS-Officeには依存していないので、MS-Officeのインストールされていない環境(要はLinux環境)でも動作します。 Office2007形式(拡張子がxlsxのもの)には対応していないようです。(0.6.4現在) 以前は、 ParseExcel xlsファイルをパースしてruby objectにする Spreadsheet/Excel Excelのワークブックの書き出し(パース機能は無い) に分かれていたライブラリが統合されたことになっていますが、Spreadsheet/Excel側のAPIが変更されているので、 Spreadsheet/Excel前提のプログラムには修正が必要です。 ちなみに、作者はParseExcel側の Hannes Wyss氏です。 インストール 例によって gem i
DateTimeに時差を設定したいときは第7引数に時差を与えます。 # DateTime.new([year[, mon[, mday[, hour[, min[, sec[, offset[, start]]]]]]]]) # offsetが時差 DateTime.new(2000, 10, 1, 0, 0, 0, 'GMT+09') # => Sun, 01 Oct 2000 00:00:00 +0900 このときoffsetに与える形式は、他にもいろいろ。 DateTime.new(2000, 10, 1, 0, 0, 0, '+09') DateTime.new(2000, 10, 1, 0, 0, 0, '+9') DateTime.new(2000, 10, 1, 0, 0, 0, '+09:00') DateTime.new(2000, 10, 1, 0, 0, 0, '+9
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く