2010-01-01から1年間の記事一覧
Emacsで全角の数字を半角にしたい、というので、以下のように書いた。 (defun numerics-to-hankaku () (interactive) (tr '("0" "1" "2" "3" "4" "5" "6" "7" "8" "9") '("0" "1" "2" "3" "4" "5" "6" "7" "8" "9"))) (defun tr (before after) (g…
Railsの便利な認証プラグイン「Devise」は、ログイン後に、user_root、rootの順にリダイレクトを試みるけど、これらのnamed routesを、 # redirect when logged-in. namespace :user do root :to => user_show_path(current_user) end のように、ログイン後…
Railsの画像添付のためのプラグイン「Paperclip」を使った場合に、モデルで以下のように宣言する。 class User < ActiveRecord::Base has_attached_file :avatar, :styles => { :medium => "300x300>", :thumb => "100x100>" } end 何も難しいところはないけ…
Railsに詳しい人と話していて、ActiveRecordのバリデーションはいつ実行されるかというのを完全に誤解していたというか、基本を理解していなかったことに気づいた。Active Record Validations and Callbacksの説明によれば、create、create!、save、save!、u…
RailsのActiveRecordでは、バリデーションはデータベースへの書き出し、Model#saveのときに走るので、次のような場合に困る。open-uriを使ってフォームで渡されたURLを開き、このURLにアクセスした情報とフォームから入力された情報を使ってレコードを生成し…
Amazon S3やBit.lyのAPIを使うのに、ユーザー名やAPIキーをアプリごとに管理する必要がある。こうした情報はどこに書くのが正しいのだろうか。Ryan BatesのawesomenessなRailscastの第85回に、やり方があった。YAMLファイルで用意しておいて、よしなに読み込…
Rails3でUnobtrusiveなJavaScriptを使うには、rails.jsをHTMLに含める必要があって、これをレイアウトに書くには、「javascript_include_tag :defaults」を入れておくのが基本。で、これで動いたかなと思ったら、今度は ActionController::InvalidAuthentici…
DeviseとPaperclipを使ったUserモデルができつつあるのはいいけど、Userをdevise/registrations#destroyしようとしても、どうもアカウントが消せない。標準で、 rails g devise:viewとして吐き出したビューのeditには、 %h3 Cancel my account %p Unhappy? #…
Deviseを使ってみたら「user_signed_in?」とか「current_user」とかの基本的なヘルパーメソッドが全然動いている様子がないので、またあれこれググってしまった。どうもRails3リリースへ向けて動いていたころには、ヘルパーを定義する初期化ファイルの呼び出…
Rails 2.3で途中まで作ったWebアプリは長期放置モード。ブランチ間違いでごちゃっと壊れた感じがして、それをgitを使いこなして修復するのが面倒だなぁと思っているうちに月日は流れ、そのうち、これはぼくには完成させることはできそうもないという気になっ…
オイラープロジェクト32問目。a*b=cで、a、b、cをつなげた数字が123456789のすべてを1つずつ含む組み合わせを求める。 def pandigital? (n) n.split(//).sort.join.to_i == 123456789 end result = [] (1..10000).each do |i| (1..10000).each do |j| break …
CでTRIEを実装してみようと思って、ハッシュが使えると便利なのにと思った。で、ふとC++を調べてみた。ハッシュもイテレータもあるし、stringとか実はCより扱いやすいし、結構便利だなと思った。さらに、boostを見たら、ものすごい勢いでいろいろ拡張されて…
オイラープロジェクト230問目。数値の加算の代わりに、文字列の結合によるフィボナッチ文字列というような感じの問題。 (ns euler (:use clojure.contrib.str-utils)) (def str-a "1415926535") (def str-b "8979323846") ; (def str-a "1415926535897932384…
Project Euler Problem 36 は、10進数表現でも2進数表現でも回文になっている(585、1001001001)のよう数字を100万以下で求めるというもの。Clojureのマルチメソッドでやってみた。オブジェクト指向のポリフォーフィズムみたいなもので、もうちょっと柔軟なも…
オイラープロジェクト109問目は、ダーツの計算問題。むかし夜な夜な投げていたので懐かしい。100以下の残りスコアのとき、ダブル・アウトで上がれる得点の組み合わせはいくつあるか。Clojureで書いてみた。 (def all-shots (conj (for [r (range 1 4) t (ran…
素数判定をmemoizeしても、ちっとも速くなっていないような気がして変だなと思っていたけど、どうもClojureは関数の計算結果をデフォルトでキャッシュするような機構があるらしい。 % clj Clojure 1.1.0 (defn prime? [n] (cond (> 2 n) false (== 2 n) true…
プロジェクトオイラー35問目。123、231、312みたいにグルグル回した数字がすべて素数であるものを100万以下のものについて求めよ。 (defn prime? [n] (cond (> 2 n) false (== 2 n) true (even? n) false (not-any? zero? (map #(rem n %) (range 3 (inc (Ma…
Clojureでやってみるプロジェクトオイラーの29問目と27問目。29問目は「How many distinct terms are in the sequence generated by a^b for 2 ≤ a ≤ 100 and 2 ≤ b ≤ 100?」というもの。 (println (count (distinct (for [a (range 2 101) b (range 2 101)]…
プロジェクトオイラーの28問目。 21 22 23 24 25 20 7 8 9 10 19 6 1 2 11 18 5 4 3 12 17 16 15 14 13という5×5のスパイラルがあったとき、[1]、[3 5 7 9]、[13 17 21 25]という各サイズの正方形の角にある数字の合計は101。では、1001×1001のスパイラルの…
サインアップやログイン認証、忘れたパスワードの再発行なんかをMVCのフルスタックでやってくれるというイケてそうなRailsのプラグイン「Devise」を、すでにだいぶ作ったWebアプリで後からモデルに足そうと思ったら、どこにも既存モデルへの追加方法が書いて…
何となくClojureを入れてみた。『プログラミングClojure』(Stuart Halloway著・川合史朗訳) という本を読み始めた。 (defn greeting "Returns a greeting" ([] (greeting "World")) ([username] (str "Hello " username))) (println (greeting "Yarb")) (pri…
あるURLについて、ネット上で人々が何を言っているか、話題になっているかを知るのに、最近は、はてなブックマークよりもTwitterのほうがいい感じ。特にbit.lyがいい。bit.lyのAPIをRubyで叩いてみた。どのぐらいRTされているかを表示する。 #!/usr/bin/env …
Railsを細々と勉強している。Githubにはすごい世界が広がってるなぁという感想と同時に、なんというか全然楽しくないなぁ、やりたいことがなかなかできないなぁというもどかしさも感じる。ライブラリの使い方というのは、細かな動作や作法を試しながら覚える…
「UMLモデリングの本質」(児玉公信、2004)という本を読んだ。図書館の蔵書・貸出管理システムとか、航空券の発券システムごときで図を描いて議論するなんて話が大げさすぎるのんとちがうか、というのが第一印象。なんだろ、これはという。一方で、オブジェク…
Railsであれこれ試している。has_manyとかbelongs_toとかって何が嬉しいんだろうと思ったけど、実際にモデルを作ってみてようやく分かった。どうやってモデルを整理するかって自明じゃないということも何となく分かったような。画像のアップロードとかどうす…
RubyはBignumがあってIntegerクラスと勝手に変換してくれるのが便利だなと思っていたけど、多倍長演算(arbitrary precision arithmetic)のライブラリというのは結構ゴロゴロと存在していて、使うのも難しくないらしいことを発見した。きっとJavaにもいいライ…
52枚のトランプの山を半分に分け、26枚ずつにする。この2つの山を1枚1枚互い違いに挟み込むようにシャッフルする。つまり、 1,2,3,4,5,6....26 27,28,29,30....52という2つの山を 27,1,28,2,29,3....というふうにシャッフルする。これをパーフェクト・シャッ…
Project Euler 108問目。nが与えられたとき、 1/x + 1/y = 1/nを満たす、x、yのユニークな組み合わせ数を調べる。初めて組み合わせ数が1000を超えるnはいくつか?RubyのComparableみたいなものを使ってみたかったこともあって、分数クラスを作ってブルートフ…
ブログの間が空きすぎたときの、オイラープロジェクト。25問目。フィボナッチ数列で初めて1000桁を超えるのはいくつ目か、という問題。普通にクラスを作ってメモ化。 class Fib def initialize @memo = {} end def calc(n) @memo[n] ||= begin (n <= 2) ? 1:…
「Head First Rails」に続いて、「RailsによるアジャイルWebアプリケーション開発 第3版」をツラツラと読んでみた。ホビープログラマとしては、テストの話あたりが新鮮で面白かった。まずURLのラウティング(ディスパッチ?)処理をやってるActionController::R…