読者です 読者をやめる 読者になる 読者になる

argius note

プログラミング関連

Ruby

Mac OS X で Redmine

Tracに少々不満を感じてきたので、Redmineを使ってみることにしました。最初は通常のインストールを試してはみたものの、早々に断念し、All-In-Oneインストーラを使ったらあっさりインストール完了。 下記サイトからAll-In-Oneパッケージを入手し、unzipし、…

英単語の頻度を簡易集計する

なんとなく思いついたので、やってみました。入力に使ったページはhttp://en.wikipedia.org/wiki/Multiprocessing,http://en.wikipedia.org/wiki/Blogです。マルチバイト文字には対応してません。 shコマンドだけでやってみる 出現回数が多い順に、上位10件…

手動ソート

いくつかの候補を順位付けしたいんだけど、普通にやると上手くいかない。そこで、「AとBならどっち?」と言う風に聞かれたら答えやすいかな、と考え付いたのがこれ。 正確には比較を手動で行うので「手動比較ソート」となるのでしょうか。 PerlとRubyとJav…

ctimeを表示するone-liner

どこかに書いておいた気がするんですが、見当たらないので。 $ find . | ruby -ne 'print File.ctime($_.chomp).strftime("%Y/%m/%d %H:%M:%S "), $_'strftimeはお好みで、無くてもOK。 最近はPerlやRubyを触ってなかったので混乱していたのか、"chomp"を忘…

ポーカーの役判定

久々にどう書く?orgに挑戦。既に半月前のですが、何とか自分でもヒントとか無しで解けそうだったのでやってみました。こういうのをLispかHaskellで、すらすら書けようになりたい。 本体はpoker_hand。それより下はテスト実行用。本体はごちゃっとしたのをす…

簡易データベースの実装

配列の配列を、SQLを使って操作できるようにしたものを作ってみました。簡易なので、制限は山ほどありますが、一部は以下のようなものです。 SQLと言っても、限られたものしか使えない SELECT,UPDATE,INSERT,DELETE,WHEREと不完全な CREATE TABLE 内部値は全…

Ruby1.9

http://www.ruby-lang.org/ja/news/2007/12/25/ruby-1-9-0-release/ いわゆるクリスマスリリース。YARVが載るのって、てっきり2.0からだと思ってました。2.0からはRiteになるんだとか。 1.8と共存可能なのかな。Ruby版Javadocみたいなのも出来たみたいです。

ローカル用ブックマーク(今度はRubyで)

調子に乗って、Ruby版も作ってみました。やっぱりRubyのほうが楽に書ける半面、WEBrickとか使ったことなかったのでその辺で苦労してます。 起動は以下のような感じ。 ./bukma.rb ポート [(プロキシを使う場合にURLを指定)]今のところ、タイトルのところとか…

ruby_dev(ML)

開発者レベルの話なんて、「きっと私には縁の無い話ばかり飛び交っているに違いない」、と思い込んでいて敬遠していましたが、ちょっと読んでみたら意外と面白くて為になりました*1。 試しにひとつ→[提案]Array#tail。 *1:メールでパッチが飛んでるんです…

Rubyの標準ライブラリをPureJavaで書いてみる (2)

懲りずに続けてみます。 クラス名の衝突を先頭3文字にして回避してみましたが、ちょっと格好悪い。 Strクラス:Stringのwrapper。Enumerableを実装してる。 Numericクラス:数値のスーパークラス。自動変換(できるだけ)。 Intクラス:Integerのwrapper。当…

NetBeans IDE 6.0

Milestone7の時にちょっと触ったけど、前のバージョンよりは格段に良くなってます。 5.0のときも十分使えるようにはなってましたけどね。特にMatisseにはお世話になりましたし。だけどやっぱり、使い込んでる時間に差がありすぎることを考慮しても、エディタ…

Rubyの標準ライブラリをPureJavaで書いてみる (1)

これは11/27に書いたものの続きです。Rubyの記述力の高さをJavaでも実現してみたいので、RubyのつもりでJavaのコードが書けるようなライブラリを作ってみます。既にどこかで同じかそれ以上のものが作られていたりするかもしれません*1が、JavaSE5.0から導入…

JavaでLL言語のようにリスト(配列)を操作したい

Lisp発祥かと思いますが、LL言語でリストor配列を扱う関数orメソッドのようなことを、Javaでやりたい場合はどうやるのが一般的なのでしょうか。 具体的にはRubyで例を挙げてみますが、 ia = [3, 2, 7] p( ia.select() do |item| item >= 3 end ) # => [3, 7]…

Zlibでアーカイビング

正直に言いますが、特にネタが無かったので。アーカイビングって言葉、なんか違和感がありますね。 require "zlib" path = ARGV.shift text = ARGV.shift if text.nil? or text.empty? Zlib::GzipReader.open(path) do |inp| print inp.read end else Zlib::…

"ubygems"って? CygwinのRubyが動かない

少し前に、Railsで遊ぼうと思ったときに色々とインストールしたりしたのですが、忙しくなってしまい途中で放置していました。 久しぶりに使い捨てスクリプトをRubyで書いたので動かしてみたら、何か変なエラーがでました。 $ wruby -v ruby 1.8.6 (2007-03-1…

REXML DOMの場合

RubyのXMLライブラリREXMLを使ってみました。 次のスクリプトは、XMLをタブ区切りテキストに変換します。コマンドラインから渡されたすべてのファイルを繰り返し処理します。 require "rexml/document" ARGV.each do |path| doc = REXML::Document.new File.…

長方形の交差判定 (2)

復習がてら、Ruby版。 class Rectangle attr_reader :left, :top, :right, :bottom def initialize(left, top, right, bottom) @left, @top, @right, @bottom = left, top, right, bottom end def valid? left < right and top < bottom end end def overlap…

JavaからRubyへ ―マネージャのための実践移行ガイド

3週間くらい前に読んだきり忘れていました..... Rubyに移行できれば開発効率の向上などの恩恵を受けられるかもしれないけど、やっぱり色々なリスクもあります。そこで、移行するにあたって注意すべき点、考慮すべき点などを示して、現実的な移行を提案してい…

正規表現の一例

久々のRuby。リファレンスマニュアルにまとめられているので敢えて書くこともないのですが、練習がてら書いておきます。 s = "ab12c345d" puts s[/\d{3}/] #=> 345 puts s.match(/\d/) #=> 1 re = /[^ab\d]/ puts re.match(s) #=> cこれ↓を書いていて、Ruby…

IDE:EclipseとNetBeans

今回は、フリーのJavaIDE、EclipseとNetBeansについての所感を述べてみたいと思います。 どっち派? そう問われたら、どちらかと言えばEclipse派、です。が、2.1〜3.2まで使ってみて、一番使い勝手が良いのが3.0なので、未だに3.0がメインです。性能は新しい…

サイトトップがリニューアル

http://www.ruby-lang.org/ja/ いつのまにかリニューアルしてました。すっきりしましたね。 さらっと見て回りましたが、これ↓、いままで知りませんでした。トップの"Try Ruby!"リンクから行けます。 http://tryruby.hobix.com/ インタラクティブモードのRuby…

簡易アクセスログ解析

# 月ごとにファイルが分かれる YYYY/MM/DD HH:MI:SS : ip-address [path] user-agentこんな感じのフォーマットで出力されたアクセスログを、FTPで取得して集計するスクリプトを書こうと思い、久しぶりにRubyを使ってみた。packとFTPとuniqがメインかな。同じ…

RDT 0.8.0

RDEが不安定なのと、Eclipseの重さが気にならなくなったので、RDTをセットアップ(Eclipse3.2)。以前書いたグラフとかを動かしてみた。

♪複雑な波形を作ってみる

これから「ディジタルフィルタ」の練習をするにあたって、グラフ書くぞうくん(そんな名前じゃないが)をちょっと進化させた。ファイルの最後に式を書けるようになった。組み込み定数DATAを使ってみた。 で、ただのサイン波からちょっと複雑な波形を作ってみ…

練習:任意のグラフを描く

ちょっとくどいですが、前回のグラフ描画クラスを使って、任意のグラフを描く処理。標準入力から入力された方程式をグラフ化する。 require "graph" include Math print "> " s = STDIN.gets.chomp # y = 2 * x のように入力 GraphScreen.new.loop() do |x| …

練習:グラフ描画クラス

グラフを書くとき、いちいち物理的な座標で描画すると面倒なので、論理座標で指定して、描くときに内部で物理座標に変換するような機能を持ったグラフ描画クラスを作ってみた。 新たな参考資料として、ここを見つけた。大いに役立った。感謝。 多少手直しが…

練習:サイン波グラフ

グラフ描画クラスを使って、サイン波のグラフを描いてみた。 require "graph" include GraphModule GraphScreen.new.loop(1/2.0) do |x| theta = x * 360 sin(theta) # y = sinθ end Tk.mainloopこれも、簡易お絵かきクラスを使った練習。Graphクラスを作っ…

練習:螺旋を描く

引き続き、簡易お絵かきクラスを使った練習。樹木曲線の流用で。 require "painter" include Math UNIT = 1 TURN = 5 INCR = 0.005 def to_radian(d) d * Math::PI / 180 end def curve(p, n, length, angle) x = length * sin(to_radian(angle)) * UNIT y =…

Tkお絵かきクラス

簡易お絵かきクラスを作ってみました。 # painter.rb require "tk" class Painter def initialize x = 200, y = 200 @c = TkCanvas.new("background" => "white") set(x, y) end def draw x, y xx, yy = @x + x, @y + y i = TkcLine.new(@c, @x, @y, xx, yy)…

Ruby/Tk 導入

アルゴリズムの模様を書くやつがやりたいので、Ruby/Tkを使うことにしました。幸いなことに、Cygwin版には最初から入ってるということなので、早速テストしてみました。ruby/tk FAQを参考にさせていただきました。 require "tk" c = TkCanvas.new i = TkcLin…

練習:樹木曲線

早速、お絵かきクラスで練習。 require "painter" include Math RATE = 6 TURN = 15 DECAY = 0.8 def to_radian(d) d * Math::PI / 180 end def tree(p, n, length, angle) x = length * sin(to_radian(angle)) * RATE y = length * cos(to_radian(angle)) *…

日本 Ruby カンファレンス 2006

こちらを参照。たまにはこういうのにも参加してみるかな。土日ってのがありがたいな。

練習:ユークリッドの互除法

最大公約数を求めるアルゴリズム。 def gcd x, y if y == 0 then x else gcd y, x % y end end def gcd2 x, y while y != 0 x, y = y, x % y end return x end puts gcd(50, 125) #=> 25 puts gcd2(50, 125) #=> 25 puts gcd(980, 1421) #=> 49 puts gcd2(98…

練習:クイックソート (実行状況付)

クイックソートも実行状況が出るようにしてみました。 def trace(a, f, t, i, j, x) print " " a.each_index do |p| s = if p == f then "[" else " " end s += if p == i || p == j then "T" else " " end s += if p == t then "]" else " " end printf "%-…

練習:挿入ソート

調子に乗って、今度は挿入ソートを。クイックソートで範囲が狭まってから使うと効果的。Javaで試したけど、ほぼ同じか気持ち速かったようでした。 クイックソートと同様に、モジュールとして定義。さらに、フラグを立てると実行状況が出力されるようにしてみ…

練習:クイックソート (続き)

頭の中の材料だけでやろうとしたんだけど...だめだ、理屈はわかっているんだけど、答えが合わない! というわけで、アルゴリズム事典に頼ってしまいました。ちょっと情けないですが、そこから自分流キレイ風にアレンジするのに頑張りました。 同時に、まだ使…

練習:クイックソート

クイックソートを書いてみる...が、思ったよりすっきり書けないなー。明日にしよう。

RAA

We retire raa.ruby-lang.org PerlのCPANのような存在。但しコマンドは無いか。どこから手をつけていいのか分かりませんが。時間があるときに潜ってみよう。

練習:フィボナッチ数列

各所で書かれていたので、そういえば自分で書いたこと無いな、と思いつつ、とりあえず見ないで書いてみよう。と数日前思ってたのを忘れてた。 class Fibonacci def initialize(n = 1) @array = [1, 1] and self[n] end def [](n) @array[n] ||= self[n - 2] …

lambdaで関数型っぽく

lambdaは関数型言語ではあたりまえの存在なわけですが、なぜなら、関数型言語では関数の定義がすべてラムダ式だからです。 以下はLispのサンプル*1。 (defun multiply(x y) (* x y)) (defun multiply5(x) (multiply x 5)) (message "%d" (multiply 3 5)) ; "…

λ

lambda関数は、Proc.new、proc関数と同じだが、よりλ式に指向している点で異なる、と思う。

lambdaキーワード

f = lambda do |x| x * x end puts f[5] #=> 25追記:proc関数をlambdaという「キーワード」にした、という意味。id:argius:20060420:1145533951

Date,DateTime,Time

ちょっとさぼったので。日付のようなものなら、好きな日付のカタチにできるはず。1.8ではまだ使えない。 # for ruby1.9 require 'date' a = [Date, DateTime, Time] a.each do |c| a.each do |m| puts c.new.send "to_" + m.to_s.downcase end end

Rubyはマイナー

なぜRailsがメインストリームにならないか() 誉め言葉ですよね。Rubyは、現実の嫌なシガラミから解放されているところが素敵だと思います。理想の体現。やりたくない仕事はやらなくて良い。何より、Rubyはかわいい。

Hex(16進文字列)

0から255までを16進で表示。 (0..255).each do |i| printf "%02X(%s) ", i, i.to_s(16) end

簡易HTMLパーサ

RubyにHTMLパーサは数有れど、どれが標準なのか良く分からない。調べるより作ったほうが楽そうなので、ちょっと作ってみました。 # htmlparser.rb class Tag attr_reader :token, :type, :name, :attr, :text def initialize token @token = token if token.…

キレイなコード (2)

id:argius:20060403:1144077441で、 > と < は「びみょうな記号」と書いたけど、複合の場合はちょっと変わる。 # 好き. << >> == # 配列のときとか、意味無く使いまくる。 a = [] << 1 << 2 << 3 << 4 << 5 # うーん... #{} *(単項) =~同じのが2つ並ぶと、好…

Enumerable使いこなしたい

Rubyリファレンスによると、Enumerableは「繰り返しを行なうクラスのための Mix-in。」とある。Arrayクラスなんかが代表的だが、Enumerableのメソッドはたくさんあって覚えるのがたいへんそう。実際、まだいくつか良く分からないものがある。 よく使うのは、…

winner is RDE

Rubyを書くのと実行するのに、Cygwin+Meadow、RDE、RDTを使っているのですが、私はもうコードアシストがないとダメな身体になってしまったので、アシストもできて起動も軽いRDEが優勝しました、自分の中で。

PrettyPrinter

オブジェクトをpで出力したときに、長いと見づらい。 PrettyPrinterを使うと、改行やインデントを施して、きれいに整形してくれる。 require 'pp' class Something def initialize @a = "aaaaaaaaaaaaaaaaaaaaaaaaaa" @b = "bbbbbbbbbbbbbbbbbbbbbbbbbb" @c …