迷路作ってみた
アルゴリズムは自動生成迷路にのってる棒倒し法。
ソースはあんまりキレイじゃないかも。。
ネストが多いと見づらいね( ´・ω・`) リファクタすべき?
明日ちょっとやってみようかな。
CGIバージョンはここ。
#!/usr/local/bin/ruby #print "Content-Type: text/html\n\n" # 棒倒し法によって迷路を作成する # 迷路は英語で Maze class Maze def initialize(height = 21, width = 21) @height = height @width = width @wall = '■' @enp = '□' # 0..n は n を含む # 0...n は n を含まない @map = (0...@height).map{ Array.new(@width, @enp) } @direction = %w(up down right left) make_outside make_inside make_rand end def make_outside @height.times do |h| @width.times do |w| if h == 0 or h == @height-1 or w == 0 or w == @width-1 @map[h][w] = @wall end end end end def make_inside @height.times do |h| next if h % 2 == 1 or h == 0 or h == @height -1 @width.times do |w| next if w == 0 or w == @width - 1 @map[h][w] = @wall if w % 2 == 0 end end end def make_rand @height.times do |h| next if h % 2 == 1 or h == 0 or h == @height -1 @width.times do |w| next if w == 0 or w == @width - 1 # 1行目かどうかの判定 if w % 2 == 0 d = @direction[rand(4)] case d when 'up' # 上方向へ棒をつくれるのは1行目のときだけ if @map[h-1][w] == @enp and h == 2 @map[h-1][w] = @wall else redo end when 'down' if @map[h+1][w] == @enp @map[h+1][w] = @wall else redo end when 'right' if @map[h][w-1] == @enp @map[h][w-1] = @wall else redo end when 'left' if @map[h][w+1] == @enp @map[h][w+1] = @wall else redo end end end end end end def disp @map.each do |m| m.each do |n| print n end puts end end end height = ARGV[0] || 21 # ARGV[0].to_i だとダメ width = ARGV[1] || 21 height = heigth.to_i width = width.to_i maze = Maze.new(height, width) maze.disp
□(しかく)と口(くち)だと、くちの方が大きい?
Firemacs を改造したい
firemacsを自分用に改造してみた - とりあえず暇だったし何となくはじめたブログを見て、僕もFiremacsを改造したくなったんだけど、
chrome/content/firemacs.js ってどこ?
Program Files/Mozilla Firefox の中を見てみたけど、
それらしいファイルが全然見つからない・゚・(つД`)・゚・
C-/ でアンドゥとか、C-k で改行ごと消すとか、
ぜひできるようにしたい!
追記
Redirectに置かれている非公式のバージョン2.1をインストールしたら、
アドオンの設定からバインドの設定が簡単に行えた。
JavaScriptをいじらなくてもよかったので、これは嬉しい!
とりあえず、1.0ではできなかった C-d が使えることを確認し、
C-/ でアンドゥできるように設定する。
C-k で改行ごと消すのは、この設定画面からでは無理みたい。
ただし、バージョン2.1のxpiは、
マウスでクリックするだけではなぜか自動インストールが始まらない。
解決策は、一旦デスクトップなどに保存してから、
ドラッグ&ドロップでFirefoxの窓に投げ込むこと。
これでインストールが始まる。
インストールの仕方が分からなかったので、
xpiについて調べていたら、xpiがただのzipなんだということが分かった。
拡張子をzipに変更すれば解凍ソフトで解凍できちゃうんだね。
追記2
Firefoxのアドオンがどこに保存されているか分かった。
「C:\Documents and Settings\gan2\Application Data\Mozilla\Firefox」(gan2はユーザ名)にあったよ。
僕はMDIEというタブ型ファイラーを使っているんだけど、
それを使っていると Application Data ってフォルダが表示されないみたい。
でもパスを直接打ち込むか、標準のエクスプローラを使えばアクセスできる。
このパス以下を辿っていった「extensions\{e98b7313-167d-48c6-89be-bc514d6de8d9}」
がFiremacsがインストールされているフォルダみたい。
ここのchromeにあるfiremacs.jarを解凍したら、その中にfiremacs.jsがあった。
でもfiremacsを自分用に改造してみた - とりあえず暇だったし何となくはじめたブログが書かれた時と、大分中身が変わっているみたい。
ざっと見た感じだと、keybinding2.jsをいじればよさそう?
改造後は、firemacsフォルダをまとめてjarに圧縮すればいいんだろうね。
アクセス解析ツールの設置
はてなダイアリーへのアクセス解析ツールの組み込み方について具… - 人力検索はてなを参考に、
忍者Toolsのアクセス解析ツールを設置した。
サイドバーの右上の方にちょこんとある黒いのがそう。
ほんとは白いのにしたくて、そう設定したつもりなんだけど、
なぜか黒い方が出る。まあいっか。
Meadow から Ruby のデバッガを起動する
rubydb3x.elをsite-lisp以下に置き、.emacsに以下を追加する。
rubydb3x.elはRubyのアーカイブの中にあるmisc以下から入手できる。
;;; Ruby のデバッガを Emacs から使うための設定 ;; M-x rubydb (autoload 'rubydb "rubydb3x" "run rubydb on program file in buffer *gud-file*. the directory containing file becomes the initial working directory and source-file directory for your debugger." t)
起動方法は、M-x rubydb RET した後に、
デバッガを走らせたいRubyスクリプトを指定すればOK。
ただし、Rubyスクリプトの名前の保管はやってくれないので、
そこがちょっと使いづらいかなと思う。
ディレクトリの指定もしなきゃいけないのでけっこうめんどい('A`)
ソースを一緒に表示してくれるのはすごいありがたいんだけどねー。
結局は、eshell を立ち上げて ruby -rdebug test.rb するのと、
どっちがいいかって話になっちゃう。
ファイル名の補完ができるなら、迷うことなく rubydb なのにっ。
インスタンス変数を外部から参照できない
なんでこれでnilが出力されるのー?
なんで'A'が出力されないんだうわー。
class A attr_reader :var @var = "A" end a = A.new puts a.var #=> nil
ほんとに分からない。何で??
ちなみに、これだと意図した通りに'A'と表示される。
class A attr_reader :var def initialize @var = "A" end end a = A.new puts a.var #=> A
Ruby のデバッガの使い方まとめ
以下の3つが参考になる。
いやなブログさんのがコンパクトにまとまっていて分かりやすかった。