2010年12月31日金曜日

本日の将棋・桂馬に追われる夢を見た

やぷー。

最近はプログラムのことばっかりで、すっかり将棋から離れてしまったのかと思いきや、実は携帯を実に7年ぶりに機種変更しまして、アプリやら通信やら、いろいろとハマっていた部分もありまして、ハイ。もちろん将棋もやりましたよ。やりましたけど、切断が多い印象でまともに対局できないような気が…。まだ数局しか指してないので本当のところがどうだかはわかりませぬ。

えーさて、今回は久々の将棋更新です。が、いつものJava盤ではありません、フラ盤です。

みなさんボクが「棋譜こめったー」なるものをシコシコ書いていたのをご存知でしょうか。あれがちょっとできあがってきて、「ブログに貼る」機能なんかもできちゃったんですね、流れで。で、それをテストしてみようと思いまして、そういう理由で今回はフラ盤なのでございます。

リンク先では「○○手目にコメントする」なんてこともできて、棋譜にも反映されるので、バグが怖くない人はぜひ活用してみてくだし。



2010年12月30日木曜日

Rubyで棋譜ファイルをうんたらかんたらその2

ちょっと長いので追記にしますが、Rubyで柿木形式の棋譜をやりくりするライブラリ作ってみました。前回のものがひどい出来だったので、今回はやや気合成分を多めに取り入れてあります。

ソースが読み辛いのでドキュメントが整備してあるべきなんですが、そんなに使う人いないだろうという理由と、簡易READMEとRSpecファイルが用意してあるので、そういうところを参照してもらえればいいかな、という勝手な立ち位置であります。ちなみにカレントディレクトリで rake するとテストが発動します。

GitHubの「こちら」にてメンテされてますが、Rubyライセンスですよということと、 fork などはご自由に、というお知らせでした。



require 'enumrator'

require 'enumerator' しておくといろいろ便利らしい。
特に map_with_index とか定義しなくても使えていい感じ。

require 'enumerator'


$array1 = [1,2,3,4,5]
$array2 = [6,7,8,9,10]


$array1.enum_with_index.map{ |n, i| n + $array2[i] } # => [7, 9, 11, 13, 15]

2010年12月21日火曜日

Rails3 で Exception Notification

Rails 0.9.x のときに Exception Notifier (エラーをメールで通知するやつ)が便利だなーと思っていて、最近の事情はどうなのかしらと思っていたら、やっぱり例によってプラグインになっていたのね。プラグイン形式は便利かも知れないけど、メンテナが…フォーク数が…という事態になりがちで、活発なのはいいことなんだけれど、Rails3がリリースされた今「デファクトスタンダード」が無いのも辛いなと思う今日この頃。

今回のプラグインには https://github.com/michallo/exception_notification こちらを採用させてもらいました。とりあえず railsmaster から fork を辿って行って、一番新しいところにいたので、という安直な理由。でもしっかり動いてくれました。

ただ、いくつか躓くところがあったので付記。



auto completion for rails3 using prototype.js as backend 訂正!

前回の記事「auto completion for rails3 using prototype.js as backend」であまりにもアホなミスをやらかしていたので改訂版です…。

まず、前回の記事ではせっかくダウンロードしたライブラリを有効にしていませんでした。別の部分のデバッグをしようと思ってFirefoxのFireBugを起動したところ「Autocomplete?なにそれ?」と言われて初めて気が付いたという生き恥です…。

真のAutocompleteはこちら!><



auto completion for rails3 using prototype.js as backend

戦型を追加するときにオートコンプリートを有効にしようとして、 auto_complete_for なんてマクロがあるのか!とググって感動していたら、かなり前にプラグインとして分離されていたみたいで、しかもDHHさん(Railsの作者)によるメンテナンスが2007年止まり…。

代替策はないのかとGoogle先生を酷使するも、 rails3-autocomplete-jquery とかそんなんばっか。

時代はjQueryなのか…Rails3という(地雷かもしれない)最新版を使っておきながらJavaScriptのバックエンドはprototype.jsのほうがいいという保守的な考えのボクには道はないのか…そう思っていたところが!

あまりにも検索トップで荒ぶっているので見逃していた「このサイト」で配布されている autocomplete という、一見Railsとは何の関係も無さそうなライブラリが大活躍。まずは配置。



2010年12月20日月曜日

rails3 で Twitter のような「もっと読む」をつくる

かなり時間つかったのでメモメモ。

Comment.rb: (モデル)
  PerPage = 3
  scope :paginate,

    lambda { |page, per_page|
      page     = 1 if not page.present? or page <= 0
      per_page = PerPage if not per_page.present? or per_page <= 0
      limit = per_page
      offset = (page - 1) * limit


      limit(limit).offset(offset)
    }



CommentsController: (コントローラ)
def index
  @comments = Comment.paginate(params[:page].to_i, nil)
  if not params[:page].blank?
    @morepage = params[:page].to_i + 1 
  else
    @morepage = 2
  end
  @morepage = nil if Comment.paginate(params[:page].to_i+1, nil).count.zero?
  respond_with @comments
end


index.html.haml: (ビュー)

%div#comments
  - if @comments.blank?
    %p コメントないお。
  - else
    = render 'comments/comments'


= render 'comments/more'

_comments.html.haml:
- @comments.each do |comment|
  %ul
    %div{:id => "comment_"+comment.id.to_s}
      %li= comment.message

_more.html.haml:
- if @morepage
  %div#more
    %a.more= link_to "もっと読む", {:page => (@morepage)},
                                 :method => :get, :remote => true

index.js.rjs:
page.insert_html(:bottom, "comments", :partial => "comments/comments",
                 :locals => {:comments => @comments})
@comments.each do |comment|
  page["comment_" + comment.id.to_s].visual_effect :highlight
end
page.replace_html :more, :partial => "more"

なんでこんなに長くなるかねぇ…。

実際のコードから抽出したんで間違いなどあるかもですが、自分用なので良しとする!
それからページネーションは Will_paginate を使えばいいんじゃって話もありますが、ボク自身が link_to :remote の記法に慣れておきたかったことと、 RJS の何たるかをちょっとでも理解してから使いたかったからです。でもこの場合 Comment.next_page とかの定義がわからん。おかげでコントローラの中で「もっと読む」を表示するかどうか調べてるし、全体的にダサいのはあれですね、書いたやつのせいですね。

さて、とりあえず push しておきますかね…。


-- 押してねっ→BlogPeople「趣味の世界」ブログランキング --