Ruby

Mechanize2.1リリース

Mechanize2.1がリリースされた。id:otn:20110924 や id:otn:20111107 で書いた、Cookie周りの不具合は直っているようだ。 ということで、それぞれに書いたパッチが不要になった。 今回増えた依存ライブラリは、domain_name, ntlm-http, unf, unf_ext。 domai…

続:Mechanize2.0 ではまる

今度は mixi にログインできない。ログを見ると同じくCookieが送られていない。Mechanize 1.0.0 を使うと問題ない。今回はドメインの問題では無いので、また別の原因があると思われる。Mechanize2ではCookieは鬼門か?! 2011-11-12 追記 原因は判明。Set-Co…

Excel列名変換問題

id:JunichiIto:20111102:1320253815 の「Excel列名変換問題で第2回社内プログラミングコンテストを開催してみた(前編)」を見て、やってみた。 Rubyで書くことにしたが、Ruby固有の機能は使わずCでも簡単に書き直せる程度で。Excelの列名は、A,B,…,Z,AA,AB,……

UTF-8で処理するがファイルにはShift_JISで書く

メモ。文字コード変換に限らず、ファイル書き出しの直前に、処理を挟み込む場合。 # encoding: utf-8 require "nkf" # 特異メソッドを定義する方法 open("output1.txt","w") do |f| def f.write(str) super(NKF.nkf("-W --windows",str)) end f.puts "あいう…

円周率の計算をしてみる

ふと、円周率の計算をしてみる。Wikipediaの記事 wikipedia:円周率 を参考にした。簡単な式は、だが、これは見るからに収束が遅いので、次の式を使った。高速化を目指すと大変そうなので、安易にRationalに頼って、少数化は、倍するだけ。 def fact(n) (1..n…

Mechanize2.0 ではまる

Mechanizeをver1からver2に上げたら、社内で使っていたスクリプトが動かなくなった。ログオン部分で引っかかり先に進めない。とりあえず、バージョン指定で旧バージョンを指定してしのいでいたのだが、「そんなに難しいことは無いだろう」と調べてみた。 定…

Rubyは参照渡しか値渡しか?

「http://blog.udzura.jp/2011/07/30/what-i-thought-when-i-start-ruby/」を見て、「Rubyは参照渡しか値渡しか?」という議論があるらしいことを知る。id:iox:20070203:1170506166 とか。 そもそも、そういうのは、変数に値の入る言語での区別の話で、変数…

JSONのキーは文字列

id:bluegale:20100610 で、 さて、では、この Hash を JSON形式に変換してあげるとどうなるでしょうか? require "rubygems" if(RUBY_VERSION < '1.9.1') require "json" test4hash = {nil => "nil!", "" => "empty!"} p test4hash.to_json # => "{\"\":\"nil…

Windows用 Ruby1.8 で json 1.5.1 を使う場合のエラーダイアログについて

「ActiveScriptRuby 1.8.7 を利用している環境で json 1.5.1-mswin32 を使うと、msvcrt-ruby191.dll を呼びに行こうとして失敗する問題」g:fragile:id:ferricks:20110130 「Ruby 1.8.7とjson1.5.1 x86-mswin32で、「msvcrt-ruby191.dllが見つからない」エラ…

Rubyでcall by nameっぽいこと

Algol60の引数機構であるcall by nameは今ではすっかり廃れて若い人には知られていないと思われるが、一言で言うと「クロージャを引数に渡す」ということで、クロージャの表記が非常にコンパクト。変数や式がそのままクロージャになる。 Algol60のサンプルプ…

RubyInstallerのreadlineライブラリ差し替え

RubyInstaller http://rubyinstaller.org/ で、インストールしたRuby1.8.7でirbを使うと、行編集がちょっと我慢できないくらい遅い。どうもRubyで書かれたreadline.rb/rbreadline.rbが使われているみたい。 しょうがないので、mswin32版からライブラリをコピ…

行末のセミコロン省略の違い

知らなかった! JavaScript は, 安全にセミコロンの存在が推測できる場合を除いて, 文の最後にセミコロンを要求します. 上記の例では関数宣言やオブジェクトや配列リテラルが文の中にあります. 閉じ括弧は文の終わりを表現するものではありません. 次のトー…

Ruby1.8.6から1.8.7にした

id:otn:20091205 の「[Ruby][Win] Ruby1.9.1にするのを延期」で1.9.1へのバージョンアップはまだ待つことにしたのだが、1.8.7にしても良いだろうと思い、上げてみた。順調。 Rumix まずは、最近出てきたRumixパッケージを試してみた。http://ruby.morphball.…

文字列リテラルの連結

1.8.6リファレンスに、 空白を間に挟んだ文字列リテラルは、コンパイル時に1つの文字列リテラルと見倣されます。 と書いてあり、確かに、 puts "abc" "def" #=> abcdef となり、今までも何回か使った。こんなケース。 str = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa…

Ruby1.9.1にするのを延期

Windows用のRuby One-Click-Installer http://rubyforge.org/projects/rubyinstaller/ に、1.9.1版が出てたので、バージョンアップしてみた。インストール自体は問題なし。Gemsのインストールを始めるが、win32-api のインストールで、1.9用バイナリがないの…

irbで便利そうなメソッド

.irbrcに書いておくと便利そうなメソッド。 オブジェクトに対して、使えるメソッドを取得する。methodsメソッドだと、Objectなど祖先クラスのメソッドが全部出るので見にくい。そのクラスのオブジェクトに特有のメソッドだけが出るといいなと思って書いた。…

Mechanize + Nokogiri の非JIS文字対応

id:otn:20090429 と id:otn:20090630 と id:otn:20090823 の続き。 一旦解決したかに思った、MechanizeのUTF8以外のページの処理ですが、昨日、「mixiの各コミュニティーの最新トピック一覧作成」処理がこけたので調べてみると、№ (1文字の"No.")の文字の所…

if/unless 修飾子の使い所

if/unless 修飾子って、break とか next 以外の一般の文では使わないようにしようと、時々思う。でも、つい使っちゃうんだけど。なんで使わない方が良いと思うかというと、「ふん、ふん」と読んで右を見て、if とか書いてあると、「なんだ。めったに実行しな…

やっぱりおかしいMechanize0.9.3の文字コード認識

id:otn:20090429 と id:otn:20090630 の続き。 一旦解決したかに思った、MechanizeのUTF8以外のページの処理ですが、昨日、「mixiの各コミュニティーの最新トピック一覧作成」処理がこけたので調べてみると、№ (1文字の"No.")の文字の所でページが終わったか…

SONY ELIOカードの利用明細取得

見てみると、三井住友VISAとほとんど同じ。同じパッケージですね。 もしかすると az=z1 の部分は時期で変わるのかもしれない。ちゃんと取得したいけど、JavaScriptで動的に作られる部分なので無理。さすがにJavaScriptの解析までRubyでかくのはしんどいので…

三井住友VISAカードの利用明細取得

VPassのページにログインして、月間利用明細のcsvファイルを取得する。 とりあえず取得してファイルに書くだけ。他のカードや銀行のも作ったらもうちょっと周りを考える。 #! ruby -Ku # 文字コードはutf8 require "rubygems" require "mechanize" USER="***…

Windowsでshbangを使って拡張子無しのファイルを実行する方法

ふとPATHEXEに.だけを追加するのを思いついてやってみたら意外なことにうまくいきました。 まず、システムのプロパティから、環境変数 PATHEXT の最後に ;. (セミコロンとピリオド)を追加します 次に、もしRubyがインストールされていなければインストール…

joinの話

RubyistとPythonistaの間で、“ary.join(sep)”と“sep.join(list)”とどっちがいいかという論争をしているのを見かける。 まあ、どっちも、その言語らしければいいんじゃないの?と思っていたのだが、ふと、Rubyに、 File.join(path,filename) というメソッドが…

Mechanize 0.9.3不調

Fedora11にしたら Mechanizeが0.9.3になって派生クラスが使えなくなった。 require "rubygems" require "mechanize" class MyMechanize < WWW::Mechanize end agent = MyMechanize.new page = agent.get("http://www.google.com") p page # p でpretty print…

ruby 0.95 - the object-oriented script language

ふと、「あるかなー?」と思って、Google Groupでfj.lang.miscを検索してみたらありました。http://groups.google.co.jp/group/fj.comp.oops/browse_frm/thread/fa71db62ce4b9c5/ab535315595a8e6f?hl=ja&tvc=1&q=matsumoto#ab535315595a8e6f ニュースグルー…

スクレイピングのためのNokogiri利用メモ

スクレイピングのチュートリアルを書いてみた。 参考:http://nokogiri.rubyforge.org/nokogiri/Nokogiri.html まだまだたくさんのクラスやメソッドがあるが(読んでない)、HTMLのスクレイピングに限定すれば多分これくらいで十分。 2014-02-16追記 なんかた…

Mechanizeの文字コード問題を何とかやっつけた

MechanizeがEUCのページ(mixiとか)をうまく解析してくれない件で、ずっと試行錯誤していたけど、思い立ってそのあたりのソースを追ってなんとか解決した。hookが用意してあるんだけど、そのhookにメソッドを追加する方法がわからないので、むりやり押し込む…

UCS-2の奥は深い

一昨日、id:otn:20090324 で、「[Ruby] 文字セットとエンコーディングの混同??」というのを書いたらすぐさま元記事を書いた方id:nurseさんに、解説いただけた。http://d.hatena.ne.jp/nurse/20090325#1237964260 色々とご教示いただきありがとうございます…

文字セットとエンコーディングの混同??

Ruby1.9のEncodingにちょっとおかしな点がある。どうしてなんだろうと思っていたんだけど、下記の記事を読むと本気でおかしいのかもという疑惑が。。。「Ruby Freaks Lounge - 第4回 Ruby M17N 事始め:文字コード編」http://gihyo.jp/dev/serial/01/ruby/00…

Ruby1.9とか

Open Source Conference 2009 Tokyo/Spring で、Ruby 1.9の話を聞く。いままでリリース作業をしていたまつもとさんに代わって、Yuguiさんがリリースマネージャをするようになり、 ・リリース前の凍結期間が設けられた ・Redmineでちゃんとチケット管理をして…