Ruby

小槌へ移行

経緯 今まで使っていた家計簿ソフト「みんなの家計簿」が OS を Snow Leopard にしてからすごく重くなり、とても使用できる状態ではなくなってしまった。使っていたバージョンは PPC 版だったので Intel Mac の上では Rosetta を使うのだが、それが重くなる…

Sinatra で Logger

ロガーを使おうと思い use Rack::CommonLogger という行を追加すると、アクセスログが 2 つ出力された。Sinatra 内で Rack::CommonLogger が use されているようだ。 use Rack::CommonLogger, Logger.new('myapp.log') こんな風にすると myapp.log というフ…

続 Sinatra の MVC の M に Sequel を使ってみる

前回は DB の検索しか行わなかったので、登録、更新、削除機能を追加した。 コントローラ require 'rubygems' require 'sinatra' require 'sequel' Sequel::Model.plugin(:schema) Sequel.connect('sqlite://myapp.db') class Items < Sequel::Model unless …

Sinatra の MVC の M に Sequel を使ってみる

ライブラリの選択 Sinatra は MVC のモデルに関してのサポートはないので、DB を使ったアプリケーションを作成する場合は既存のO/Rマッピングライブラリを組み込むのがよさそう。サポートされていないことのメリットって、DBを使用しない場合は組み込まなく…

Sinatra を使って Haml で作成したテンプレートに変数を埋め込む

テンプレートに変数を埋め込む方法を調べてみた。 バージョン (2012/09/26 追記) Hamlのバージョンは 2.2.2 を使っています。 コントローラ require 'rubygems' require 'sinatra' get '/:id' do @id = params[:id] @items = ['red', 'green', 'yellow'] ham…

Sinatra の View に Haml を使ってみる

Haml というのを Sinatra を利用するようになってから始めて知った。Rails でも使えるんだね、知らなかった。考えもなしに erb を使ってた。 今回なぜ使おうかと思ったかというと、Sinatra の公式ページのテンプレートに関しての説明でまず始めに Haml が書…

shotgunで自動再読み込み

Sinatra でアプリを開発をしているときにソースを更新する度に アプリ終了→アプリ起動 を行っていて面倒だった。それを解決するのが shotgun。shotgun はソースを更新すると自動的に再読込みしてくれる。これでわざわざ手動でアプリを再起動させる手間がなく…

Sinatraのポート番号変更

Sinatra は特に何も指定しなければ 4567 番ポートを使用する。別のポートを使用するには起動時に p オプションに続けてポート番号を入力すればOK。 起動時に指定できるオプションは他にもあるようだ。 % ruby myapp.rb [-h] [-x] [-e ENVIRONMENT] [-p PORT]…

Sinatra

Ruby のWebフレームワーク Sinatra が気になったので試してみた。 環境構築 他の方が書かれているブログ等を見ると、コマンド一発でインストールできるようだ。実際私もコマンド一発でインストールできたので、テストコードを動かしてみた。ぁらら、エラーが…

オブジェクトID

先日の日記で、Fixnum のオブジェクトのオブジェクトIDと String のオブジェクトのオブジェクトIDを調べた。そのとき気になったことがあったので、少し調べてみた。気になったことというのは、Fixnum と String のオブジェクトIDがあまりにも違いすぎる、と…

Ruby練習6 (Red and Black)

前回に引き続きACM/ICPC国内予選突破の手引きより問題を選んでみる。今回は難易度を一つ挙げて☆2つ。選んだのはRed and Blackという問題。 def walk(tiles, x, y, count) if x < 0 || y < 0 || x >= tiles[0].size || y >= tiles.size return count end if …

Ruby練習五日目(Hanafuda Shuffle)

ACM/ICPC国内予選突破の手引きより問題を選んで実装してみることに。まずは最初ということもあり、一番上に書かれている難易度の低そうなHanahuda Shuffleから挑戦してみることにした。 while true n, r = ARGF.gets.chomp.split(/ /).map { |n| n.to_i } if…

Ruby練習四日目(離散ボロノイ図)

離散ボロノイ図を全探索法を使って作成してみる。全探索法とは、すべての離散点においてどの母点にもっとも近いかを計算する方法。一番単純な方法かつ、計算量の多い方法。 require "digest/md5" require "cairo" # # ボロノイ図を描画する(全探索法) # cl…

Ruby練習三日目(最小包含円?)

先日コッホ雪片を描くプログラムを書いて、雪片が画像の中心に描かれていないので次はその部分を作り込みたい、と日記に書いたのでその方法を考えてみた(ま、その問題はここに書く方法とは別の方法で解決しているんだけど)。考えとしては、コッホ雪片を構…

Ruby練習二.五日目

昨日の続き。コッホ雪片を描く場合に、画像の中心に雪片がこない云々と書いていたけど、あれは考え方が悪かった。先に画像の中心点を求めて、その点を中心にコッホ曲線の端点を回転させていけばよかった。昨日の考え方では、始点を手動で決めてその点がどこ…

Ruby練習二日目(コッホ曲線)

今日は、コッホ曲線を描くプログラムを作ってみようと思います。理由は特にありません、思いつきです。はじめは曲がる点を求めるだけのプログラムを考えていましたが、どうせなら目に見えるようにしようと思い、描いたコッホ曲線を画像に出力する処理まで作…

Ruby練習初日

きっかけ Rubyを覚えようと思い、簡単なプログラムを作ってみた。以前受けた試験の問題に、単純なんだけど基本的(っぽい)アルゴリズムの問題があったのでそれをネタにしてみた。こういうアルゴリズムは自分で一から考えて作れといわれても、すぐには作れない…