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「趣味の世界」ブログランキング --

棋譜こめったー

趣味で 棋譜こめったー なるものを作ってみて、 git init から始めてみたのだけれど、公開リポジトリの作り方っていうか、作るのはできたんだけど、そこへ push ができませんでした。ので、 GitHub を借りてコードのホスティングをすることに。結果的にバグトラックもできそうなのでオーライ? 釈然としないのはよくない傾向だな。

誰でもコードのダウンロードなどできるので、バグ修正とか新機能とかあったらパッチ投げてくだしあ。

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

2010年12月16日木曜日

haml-rails

Gemfilegem 'haml' と書くだけでも使えるけど、それだと scaffold のときに not found とか言われてしまうので、 gem 'haml-rails' と指定しなきゃいけないみたい。

それから、 haml をデフォルトのレンダリングエンジンにするためには、 config/application.rb

config.generators do |g|
  g.template_engine :haml
end

と書けばよろしいらしい。

棋譜のマージをするrubyライブラリ

「ライブラリ」と言えるほど高機能なものだろうか…。

とりあえず、Kifu for Windowsを複数起動したりしてコメントを見比べるのはナンセンス、ということで、コメントをマージするものを書いてみました。



出納帳できちゃいました

講座を書くのも早々に飽きて出納帳が完成してしまいました。
もともと「これまでのRails」についての機能を確認しながら書いていたに過ぎないので、あまりRails3の有効な情報にはならなかったことでしょう。しかし一旦書き始めると、ネットで調べながらRails3の強力な機能を堪能することができました。

  • scopeすごい。joinsとエイリアスされたmergeメソッドで究極のDSL&DRY
  • Rackから輸入された経路の記述がわかりやすい。でも動かなかった。
  • アプリケーションに対して wget すると500が返ってくる。 template is missing …? haml 関係っぽい。
  • でもhaml便利。
とりあえずこれからは git や他のプラグインなどを導入して本格的に Rails3 アプリケーションを組み立てていきます。目下の目標は…とりあえず将棋関連ですかねぇ。


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

2010年12月14日火曜日

Ruby on Rails3で出納帳を作ろう・その伍

だんだん記事が長くなっているので自重せねばなりませんな。

前回scaffold が自動生成した CategoriesController をフルスクラッチから書き直し、RESTという考え方や DRY の実践、また、Rails3で追加された新機能を実際に使用したり、モデルからのデータの取り出しや保存、更新、削除などの CRUD を行ないました。

しかし、大きな問題点があります。

  • 名前が空のカテゴリを作成できてしまう
  • 同じ名前のカテゴリをいくつも作成できてしまう

これはRails3であれば、たった一行で防止することができます。ビュー、コントローラに続いて、今回はモデルについて掘り下げてみましょう。



Ruby on Rails3で出納帳を作ろう・その肆

前回scaffold で作成した Category の View 部分(app/views/categories/ ディレクトリ以下)を、一定の水準まで日本語化することができました。しかし、新規作成したときや編集・保存したときの「Category was successfully created/updated.」などのメッセージは、 View のどこにもありませんでした。また、新規作成・編集したときに、さまざまな情報を管理するならまだしも、 name カラムしか持たないレコードをいちいち確認(表示)するのは冗長です。新規作成・編集したあとは、すぐにリスト表示に戻ってもらえないものでしょうか?

これらを解決するのは MVC (Model View Controller) のうち Controller の役割です。 scaffold は、モデル・ビュー・コントローラのすべての土台(と他にもいろいろ)を自動生成してくれるので、これらの要望はわずかな修正をするだけで実現させることができます。

では、いつものようにサーバを起動して作業していきましょう。

$ cd $(PATH_TO_WORK_DIR)/receipt
$ ./script/rails s
=> Booting WEBrick
=> Rails 3.0.3 application starting in development on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
[2010-12-14 11:34:13] INFO  WEBrick 1.3.1
[2010-12-14 11:34:13] INFO  ruby 1.8.7 (2010-06-23) [i686-linux]
[2010-12-14 11:34:18] INFO  WEBrick::HTTPServer#start: pid=9997 port=3000



Ruby on Rails3で出納帳を作ろう・その参

前回scaffold を使ってレコードの CRUD インターフェイスを実現させるところまで行きました。しかし、不満を覚えた人も多いのではないでしょうか。例えば…
  • 英語じゃん
  • 作成したあとにいちいち Back するのが面倒くさいじゃん
今回はまず、日本語化してみましょう。 MVC (Model View Controller) のうち View を扱っていきます。



2010年12月13日月曜日

Ruby on Rails3で出納帳を作ろう・その弍

前回はRails3を使ってアプリケーションを新規に作成(rails new receipt)し、バンドル(bundle)するところまでで終わってしまいました。今回はデータベース(SQLite3を採用)の設計から scaffold という便利な機能を使って CRUD (Create Read Update Delete) のインターフェイスを見る、いじるところまで行くつもりです。

必要になりそうなテーブルは:
  • Receipts: 日付と時刻・月(暗黙的参照: Accounts)・分類(参照: Categories)・概要・詳細(無記入可)・収支
  • Categories: 名前
  • Accounts: 月(ユニーク)・金額
こんなところでしょうか。

流れとしては:
  1. (自動)今月のベースとなる0円のAccounts行を作成。
  2. Categories行をひとつ以上作成。
  3. 収支に応じてReceipts行を作成していく。
  4. (自動)Receiptsをリスト表示するときは、今月分のAccounts行からReceiptsの差分を表示。
  5. (自動)月が変わったらその月のAccounts行を作成し、先月のAccountsおよびReceiptsのsumを保存。
  6. 基本的に2から5を繰り返す。
  7. 先月以前のReceipts行が削除された場合、変化した計算結果をその月以降のAccountsに適用する。
おおむねこんな感じですか。まぁ…はっきり言って雑ですね。RDBMSの特性を真に活かしきれていない気がしますので、「こういう構造のほうが楽ですよ」という意見などあればぜひ教えていただきたいです。

それにしても、こうして書いてみるとデータベースに慣れていない人には何やら難解そうに見えます。ボク自身にも難しそうに見えるというか、よほど集中しないと何が書いてあるのか意味がわかりません。が、Railsでは直感的に作業ができる上にコード量も驚くほど少なく済むので、多分ヒマな人なら一日かからずに作り終えることができるでしょう。実際、この講座に書いてあるのは文章量こそ多かれど実際にタイプするのはその10分の1以下のはずです。

では、まずはデータベースおよびテーブルの作成からですね。



2010年12月12日日曜日

本日の将棋Part3・あさねぼうさんとの対局

夜も更けた頃合いにこんばんー。
みんなのアイドル、sandmarkちゃんだよ。
轢死すればいいのに→自分。

今日…っていうか日付変わっちゃってますが、なんと4度目の更新です。このままではそう遠くないうちに息があがって、また更新をサボる日々が来たりするんだろうか。でも「やりたいことはやりたいときにやれ!」ってかわいこちゃんが言ってた!

さてー。
今回はですね、嬉しいことにあさねぼうさんと再び対局させていただきました!はくしゅー!(前回の対局については、下の「ラベル」から「あさねぼうさん」をクリックしてみてくださいね)天下一将棋会の話でも盛り上がって、いよいよ本格的に仲が深まってまいりますた!あさねぼうさんがもし政治家デビューしたら一票を投じるね。いやほんとに。

さらに驚くべきことに、「ボク(sandmark)のブログに載っけたいので棋譜にコメント書いてメールで送ってもらえません?」とかいう厚かましいにも程があるお願いも快諾していただいて、お礼のしようもありません!ありがとうございます!>< これで全国のあさねぼうファンが一気にこのブログへ集まってくるぞhehe...

というわけで、今回はあさねぼうさんの鋭いコメント付き棋譜と、いつものボクのしょっぱい駄文入り棋譜と、2つセットでお届けしちゃいます!



2010年12月11日土曜日

永遠の砂浜

いえい、いえーい。今年も残すところあとわずか…じゃなくて、先月の15日くらいから始めたこのブログも、気が付けば(放置していたにも関わらず)2500アクセス越えちゃってますね!ありがたやーありがたやー。一体このブログのどこにそんな需要があるのでしょうか。当事者のボクにはさっぱり理解不能です、が!今回も例によって記念に一曲作ってみますた。相変わらずボリュームがめちゃめちゃ小さいしノイズは入ってるしで聞き辛いことこの上ナシですが、今回はそれなりの意欲作です。ミス?気にしなーい。録音中の思考停止?気にしなーい。

Composed by: sandmark
"Another Blue Canvas" - "how many fossils are smiling to you hiding their teardrops on there ?"



Download



本日の将棋Part2・居飛車急戦 vs ゴキゲン中飛車


ちわちわー。

日中は友達が「ブラウザがおかしい」とヘルプを求めてきた…というよりボクが一方的に解決しようとしたので、ずっとそれにかかりっきりになってしまいました。不特定多数のサイトに接続できなくなっているらしいんですよね。どこに接続できてどこに接続できないのか、その関連性がさっぱりわからないので、結局真相は闇の中…解決さえしていないままです。明日になったら直っているといいですねぇ。

そんな最中、知り合い(といっても、ろくに話したことのない人達)から差し入れがありました。顔も知らないボクなんかのためにミカンやらインスタント食品やらリンゴやら缶詰やら焼きそばやら、もう本当にどうやって恩を返したらいいのかわからない状態です。自分も誰か他の人が困っていたら、似たようなことができたらいいなぁ。もちろん、恩返しも含めてねっ。

さて、今回の将棋は敢えて述べますがボロ負けです。「中飛車を指すならこのくらい対応できないでどうする!」といったものですが、こうして見てみるとやはり自分から修羅場に突っ込んでいるような気がしてなりません。本でも見たことがないものだし、かといって研究の仕方もわからないので、誰かアドバイスをくだしあ…。



(帰ってきた)本日の将棋・居飛車本格派 vs 鬼殺し向かい飛車


どんもー。
長らくお休みをいただいていた本ブログですが、
生活が安定しそうな雰囲気なので、リハビリがてら更新してみます。
安定したわけではないんですけれど。

ところで先日ヘアカラーというものを使ってみました。
ホワイトブリーチがいいな、なんて初心者にあるまじき高望みだったのですが、
当然うまく行くはずもなく、結果としてアンバーブラウンに軟着陸しました。
いや、コスプレみたいな真っ白じゃなくて、もっと鈍い銀がよかったんだよ、うん。

ってかさ、冬眠してる間にアクセス2000突破しちゃってんじゃん。
需要はないだろうけどそのうちまた自作曲をうpするかも知れない。
「そのうち」っていうのは「しない」って意味なんでみんなよろしくね。

さて、そんな久々の更新にはもちろん将棋の一局、持ってきました。
日常生活で「弾」を「駒」と言い間違えるくらいの将棋ヲタっぷり、
しかして実力はヘボもヘボですが、どうかひとつ眺めてやってくだしあ。



2010年12月2日木曜日

本日の将棋Part2・居飛車引き角 vs 向かい飛車


調子にのって更新更新!

向かい飛車って(飛車先を決められたときに限って)かなり優秀な
戦法だと思うんですが、その割には棋書があまりありませんねぇ。
力戦向かい飛車の本、出たら売れると思うんですがー。

さてそんな向かい飛車ですが、
今回は後手番になって早々に飛車先を決めてもらったので
向かい飛車にすることができました。

「できました」っていうか、指し慣れてないので
「させられました」が正しい言い回しかも知れないんだけど、
冒頭で優秀な戦法だとか言っちゃったんでその流れで。
いや、優秀…ですよ? ほんとに。




本日の将棋・先手中飛車 vs 後手中飛車


ああっ…なんて安直なタイトルだろうか。
でも実質その通りなのだから仕方ない。

さて、今回もよくある相中飛車ですが、珍しく後手番になりました。
相中飛車戦で有利なのはやはり先手だというのが近藤六段の見解ですが、
アマチュアの、しかも低級の将棋でその程が現れてくるのでしょうか?



2010年12月1日水曜日

本日の将棋Part2・先手石田流本組 vs 中飛車


いっつも疑問に思うんだけど、
相振り戦になったときの中飛車って「ゴキゲン中飛車」ではないよね?
あれは対居飛車専用って気がするし…じゃあ何中飛車になるんだろう?

パワー中飛車…は知名度とネーミングセンス的にあれだし…
んー、無難に「力戦中飛車」でいいのかなー。
ある意味合ってるけど、でもそれもちょっと違う気がするしなー。

はてさて、ついさっき上げた記事にさっそく間違いがありました。
サイドバー右上のグラフは、グラフをクリックして「レビュー」を
書いてもらって、その統計を表示するんだそうで、
ランキングやなんかとはまったくの無関係みたいです。

というわけなんで、暇な人はレビューしてね。
とか書くと誰も書いてくれないフラグが立ちそうなので、
絶対にレビューするなよ!! とでも言っておこうか。



本日の将棋・先手四間飛車穴熊 vs ゴキゲン中飛車


こんにちー。

実は今日ボクの誕生日です。
友達が家に招待してくれて、
豪華なディナーをご馳走になることになりましたっ。
スマフォがあればその様子を写メに撮ってアップするのに…ぅぅ。

さて、話題変わって BlogPeople さんに登録させてもらいましたよ。
やっぱりいろんな人に見てもらいたいし、
いろんな人のブログも見ていきたいじゃないですか。

せっかく重い腰あげてブログ始めたんだし。

っていうのは建前でー。

PingとかTrackbackとかいかにも「今更!?」なことを調べるのに
時間を割いていたら辿り着いたのが BlogPeople さんでしたというオチ。
新しいオモチャがあったら遊びたくなるでしょ? あれですよあれ。



朝鮮半島の「いま」と日本の周辺事態法の「真実」

珍しく政治的なことについてつらつらと書いてみます。
絶賛間違っていること書いている可能性大なので
コメントで突っ込みよろしく。

皆さんご存知の通り、去る2010年11月23日に
北朝鮮から韓国に対する砲撃事件がありました。
この砲撃により韓国の兵士2名が犠牲になったとのこと。

すわ戦争の勃発かという緊迫した雰囲気の中で、
日本は、ひいてはアメリカはどう対応するのかを
少し予想してみたいと思います。

とはいえ、まずは情報が不足し過ぎているので、
11月23日に(北朝鮮や韓国の言い分に捉われず)
何がどういったふうに起こったのかまとめてみたいと思います。