2008-01-01から1年間の記事一覧

テストの共通ロジックをわかりやすく呼び出す手法

巷ではOne assertion per testなどと言われてますが、流石にアサーションを1回にするのは難しいところ。ならば共通部分を抜き出してテストを分離し、なるべくアサーションを減らす方向を取るのが現実的だと考えられます。 その際、なるべくロジックを共通化…

Ruby,Python,PHP,Perl,JavaのCodeReposコミット回数を比較してみた。

突発的に思いついたので実装してみようと思ったらRuby/SVNがバインディングだったのでPure Rubyで書いて、はてなグラフで視覚化してみた。 Perlすげえ! 説明不要ッ!ちなみにPerlを抜いたらこんな感じ。 どっこいどっこいかなー。ついでにそのsvn部分だけ抜…

StarRuby用フレームワークStarFrameをCodeReposに移動

こっそり(というか外部でも開発できるように)Google Codeに入れてたStarRuby用フレームワークStarFrameを、CodeReposに移しました。 http://svn.coderepos.org/share/lang/ruby/starframe ついでに必要性を突っ込まれてた部分をザックリ削除。サンプルはそ…

はてブのタグにスラッシュ入れたらアクセスできなくなった。

「klass」というタグだったのを、「Ruby/klass」にしてみたら http://b.hatena.ne.jp/isaisstillalive/Ruby%2Fklass/ となりアクセス不能に。スラッシュのURLエンコードをはずしてみると http://b.hatena.ne.jp/isaisstillalive/Ruby/klass/ なんとパンくず…

プレゼントの抽選をするスクリプトを添削してみた

F's Garage:プレゼントの抽選をするプログラムをrubyで書いてみた。で書かれているコードが面白そうだったので添削してみました。 配列のシャッフル class Array def shuffle arr = dup collect{arr.slice!(rand(arr.length))} end end F's Garage:プレゼ…

Java標準クラスライブラリの設計者はセンスが悪いという話

Java が使いにくいのは単に Java の設計者のセンスが悪かっただけであり、静的言語のせいではない。 Java が使いにくいのは静的だからではない そう思います。 最近仕事でJavaを使うようになって「Javaって想像してたほど悪くないね」という結論に達しつつあ…

SMToolsをCodeReposにコミットしてみた

StepManiaの譜面データを操作するライブラリ、SMToolsをコミットしてみました。 「RipSynchronizer更新+「えれくとりっく・えんじぇぅ」歌詞・リップデータ公開 - こげこげ堂はてな支舗」等で公開したRipSynchronizer、「ビートで記述された歌詞ファイルを…

MemoizeモジュールをCodeReposにコミットしてみた

CodeReposへのコミッタ登録が完了しました! Yappoさん、お忙しい中ありがとうございます。 そこで、折角なので「http://d.hatena.ne.jp/isaisstillalive/20081211/1229014509」で作成したモジュールをコミットしてみました。 http://svn.coderepos.org/shar…

流れるようなインターフェースって結局ビルダなのね

今更感溢れる話題だけど、Ruby でキーワード引数的な Fluent Interface の実装 - 8時40分が超えられない - subtechの違和感が非常に気になったのでちょっと考えてみた。 まず、違和感のないものを考える TimeInterval meetingTime = fiveOClock.until(sixOCl…

基数を保持した数値クラスとかどうだろう

発想元:http://d.hatena.ne.jp/tilfin/20081215/1229310421 Ruby M17Nのencodeを保持したStringみたいに、基数を保持したNumericがあれば面白いかなと思いついてやってみた。 class Integer attr_accessor :base def self.[] n, base = 10 n ensure n.insta…

Primeクラスの動作を調べてみた

Ruby1.9のPrimeクラス(素数列クラス)は以下のような面白い特徴を持っています。 「素数列」は複数存在しないのでSingletonである。 クラス自体が唯一のインスタンスと同じように振舞う。 旧Prime互換クラスのインスタンスを作成できる。 以下で個別に解説…

Memoize(メモ化)モジュールを作ってみた

素数列とかフィボナッチ数列、ルーカス数列をクラス化して遊んでたら、「メモ化部分ってモジュール化できね?」と思いついた。 色々調べてみると、(Rubyで既に実装されたものも見つかったが、)PythonのMemoizeデコレータが便利そうなのでそれを意識してみ…

Float#integer?とRational#integer?って変じゃね?

self が整数の時、真を返します。そうでない場合に false を返します。 Numeric のサブクラスは、このメソッドを適切に再定義しなければなりません。 Numeric#integer? 「クラスが整数の時」ではなく「整数の時」に真を返すなら、 require "rational" p 1.0.…

LazyArray作ってみた

ヽ( ・∀・)ノくまくまー(2008-12-02) 優しいMerbの育て方にて紹介されているLazyArrayクラス。 ソースを見たところ何故かArrayのサブクラスじゃないで、もしArrayのサブクラスとして実装してみたらどうなるかというのをやってみた。 まず初期値はブロックで…

メソッド定義でのensureは値を返せるのか!

以下のように、ensure内でreturnされた2が帰ります。 Rubyのensureはreturnを撤回できる なんと。ensureの結果が無視されるのは知ってたけど、明示的にreturnを返した場合はその値が返るんですね。これは便利! メソッドの戻り値は return に渡した値です。r…

Rubyにgotoがない理由

大域脱出としてのgotoはcatch+throwで置き換えるようになっているから。 maxnum = 9 for x in 3..maxnum do catch :not_prime do for y in 2..x - 1 handan = x.modulo(y) if handan == 0 print x puts ":素数ではありません" throw :not_prime end end pr…

どうぶつの森PROデザインで色々作ってみた ひだまりスケッチ制服篇

ひだまりスケッチの制服を作ってみました。原作カラーです。 デザイン ※拡大してご利用ください。 試着イメージ パレット 13番 ベースが紫列下。縦線などが紫列中で、ボタンなどの一番濃いところが紫列上。 肩紐のアンチエイリアスに使ってるのが三列目上。

算数にチャレンジしてみた

算数にチャレンジ! 第624回問題(11月20日〜 11月26日) 1〜512の数の書かれたカードが1枚ずつ、左から小さい順に、「1,2,3,4,・・・,511,512」と並んでいます。いま、次のような作業を行うことにします。ア. 前から奇数番目のカー…

アイマスの服をどうぶつの森PROデザインで作ってみた 真私服篇

早速の第二段です。 スカート状にしないといけないので、キュロットみたいにできないかと思ったけど難しいですね。 上着だけにして男の子向けにしたほうが自然かもしれません。 デザイン ※拡大してご利用ください。 試着イメージ パレット 4番 ライン部分が…

アイマスの服をどうぶつの森PROデザインで作ってみた やよい私服篇

街へいこうよ どうぶつの森を買ったので、折角だからPROデザインで何か作ってみたいなと思った第一弾。 自分的No.1は真なんですが、森の服のデザイン上スカートじゃないと難しいのでまずは練習がてら自分的No.2のやよいの私服を行ってみました。 デザイン ※…

アイマスの服をどうぶつの森PROデザインで作ってみた ラフタイムスクール篇

今度は私服ではなく衣装から。 チェックはやはり大変ですね。いい感じを見つけるまでも時間がかかるし、なってからも人力コピーで時間と体力が奪われる。 デザイン公開するのはいいけどこれ誰が手打ちするんだよという感じ。 デザイン ※拡大してご利用くださ…

ゴルフってみた

いまさらながらるびまゴルフ 【第 4 回】に挑戦してみた。 [1][n] とかしちゃうと、1 or nilしか取れないのに文字数減らないしなぁとかいろいろいじってるうちに、Integer#[nth]なんてメソッド見つけた! nth 番目のビット(最下位ビット(LSB)が 0 番目)が立…

最大値で値を制限できる数値クラスの作成

久々の日記です。最大値を制限できる数値クラスが作りたいなと思ってたらものっそいキモイのが出来上がったので公開。 値を直接変更できないのでvalue=というメソッドを使用することにしましたが、それ以外は普通の数値として扱えるはず。 require "delegate…

自分のつけたはてなスターを簡単に識別するためのuserContent.css

span.hatena-star-star-container > a > img.hatena-star-star[alt="ユーザID"] { background-color: red !important; } ハイクで悩むことが多かったので作ってみた。Fxすげえ、ちょうかんたん。

雨ニモマケズ

2ch

改変だけどちょっと感動したのでメモっておく 258 :以下、名無しにかわりましてVIPがお送りします:2008/08/19(火) 19:43:25.21 id:oNTeJfZy0 雨にも負けず 風にも負けず 雪にも夏の暑さにも負けぬ丈夫な体を持ち 情欲はなく 決して手を出さず いつも静かに…

トレーディングカードゲームのお話

まさかはてなハイク上でTCGの議論ができるなんて思いもよらなかったので、ここでちょっと紹介してみる。 http://blogs.yahoo.co.jp/tonnura392000/35098733.html まさか長期旅行に行ってる間にこんな風にまとめてもらってるなんて思いもよらなかったので、ち…

Rubyのsetterの戻り値がキモい件

※正確には、setterじゃなくて、代入でsetterが使用される場合の戻り値がキモい。というお話。 class Test def value= value "value" end end t = Test.new p (t.value = 10) #=> 10 p (t.value=(10)) #=> 10 p (t.__send__ :value=, 10) #=> "value" うん、…

to_iとInteger

こうすれば、 "foo".to_i2 => [0,false] "0".to_i2 => [0,true] となってくれます。 http://d.hatena.ne.jp/ytakenaka/20080802/p1 何か微妙に違和感が。 多値とは関係ない話で恐縮ですが、数値に変換できるかどうかで処理を分けたいならキャストして例外を…

なんでretryがブロックかrescue節の中でしか使えないんだろう。

RPG*1でよくありそうな「2D6を振る。ただし12の場合は振りなおし」という行動をメソッド化する場合、だいたい以下のようになると思います。 def roll begin dice = (1+rand(6))+(1+rand(6)) raise if dice == 12 rescue retry end return dice end ですが、…

引数にメソッド追加してリテラル風にするんだったら(追記)

id:takkawさんから返信を頂きました。 コメントしようかと思ったんですが長くなってしまったので、追記にしようと思ったらさらに長くなったので独立したエントリで。 特に実装側がinstance_variable_set だけで良いし。 http://d.hatena.ne.jp/takkaw/200807…