Raspberry piさんにRailsインストールしてびっくりした話

aptituderubyをインストールしてrailsをインストールしようとしてあまりに遅かったのでtimeコマンドで計測してみた。

結果はreal97m49.652sで大体1時間半。

皆さん予測ついてると思いますが、--no-ri --no-rdocを付け忘れました・・・

気がついた時にはどうすることも出来ずぼーっと眺めていました。

にしても遅い!SDをもっとはやいのにしたらいいのかもしれないけどお金ないっす・・・

でも、これでも家につなぐためのsshサーバぐらいなら何とかなりそうだしなぁ・・・

アプリケーションサーバにするのはかなり頑張らないと難しいかもね〜

アリアンロッド2Eのクリティカルの確率を(力技で)試してみた。

最近TRPGを始めました。

その中でもアリアンロッド2EというTRPGをやっているのですが、TPRGに必須なダイスを振った時にダイスがどれだけあったらどのくらいの確率でクリティカルになるかを(力技で)考えてみました

そもそもクリティカルの仕様は

振ったダイスの中に6の目がふたつ以上あった場合は、その判定は自動的に成功となる。これを[クリティカル]と呼ぶ。(アリアンロッドRPG 2E ルールブック①P191より)

というわけでサイコロが2個以上の時に6の目がどれだけあるかを調べれば良いと・・・

というわけでrandを使って試して見ることにした。

def check(time,dice_num)
	count=0
	time.times{
		dices = Array.new
		dice_num.times{
			dices.push(rand 6)
		}
		dices.delete(5)
		if(dices.length < dice_num-1)
			count = count + 1
		end
	}
	return count
end
#試行回数
time = 100000

10.times{|dice_num|
	dice_num = dice_num + 2
	count = check(time,dice_num)
	puts "dice = "+dice_num.to_s+" probability:"+(count.to_f/time.to_f*100).to_s+"%"
}

いま見てみるとちょっと(というかかなり)微妙なコードだけど・・・まぁいいや。

checkの中でやってることはサイコロを生成して6の目(プログラムでは0~5が生成されるのでプログラムでは5)を削除して長さが2以上減ってたらクリティカルと考えて実装した。

実行結果は

dice = 2 probability:2.777%
dice = 3 probability:7.175%
dice = 4 probability:13.186%
dice = 5 probability:19.732%
dice = 6 probability:26.445%
dice = 7 probability:33.046%
dice = 8 probability:39.604%
dice = 9 probability:45.762%
dice = 10 probability:51.397999999999996%
dice = 11 probability:57.028%

という形になった。アリアンロッドではフェイトというシステムがあってサイコロを増やすか、もう一度振り直すか選択が出来るんだけど、この結果から4個以上ある場合は普通に振りなおしたほうが効率がいいんだろうな。

とここまでやって数学的にやってらっしゃる方のページを見つけたので哀心よりお悔やみ申し上げます 真・アリアンロッドのクリティカル率比較してみるとやっぱり乱数のせいで正確な値ではないものの、ちゃんと近似値は出ていた。

こんなかんじで日常で書いてるコードを晒していこうかな。

Sublime text2のAuto Encoding for Rubyで既に別形式のエンコード指定があるのに自動で挿入されてしまう。

ちょっと困ったので中開けて書き換え。

Ruby1.9系からエンコード指定が必須になって実行時にファイルのエンコードが原因で動作が怪しくなるとかそういうことは減ったのですが、いかんせん面倒くさい。

普段書いててちょっと困ってたのでcmd+shift+pでいつものCommand Palleteを起動して漁って見ることにしたら、素晴らしいことにauto-encoding-for-ruby(リンクはgithubのページ)とかいう俺のためのものとしか思えないような素晴らしい奴が見つかった。

で、反射的にインストールしたのだが・・・・

実は既に書いていたコードが別形式のエンコード形式で指定していたため気持ちの悪いことに・・・

#encoding: utf-8

# -*- coding: utf-8 -*-
class MyAntenaController < ApplicationController

なんかちょっとゾワワと来たので解決策を考えてみる。

1. 諦めてこれはこれでいいとする。
まぁ僕一人だったら良いんですけどね・・・
一番最初の行に入ってるかチェックしているだけなのでもしも他の人のエディタのプラグインも同じ仕様だと・・・
上のエンコード指定が繰り返し発生することにもなりかねないです。

2. プラグインの中を開けて書き換えてしまう。
正直言うと余りやりたくはない。
が、背に腹は代えられないということで覗いてみて見て簡単に対応できるかどうか確かめてみることにしました。

sublime text2->preferences->Browse Packages
プラグインのインストールディレクトリを開きauto-encoding-for-rubyディレクトリに移動します。

こんな中身で意外とシンプルだった。
sublime text2のプラグインpythonで記述がされているのですが、実はというほどでもありませんが、私はpythonを書けませんし読めません(`・∀・´)エッヘン!!(威張るこっちゃ無い)。
ですが、明らかにAuto Encoding for Ruby.sublime-settingsが怪しそうだなと思うぐらいの知性は持ち合わせているので、pythonを読む前に取り敢えずコレを開いて見ることに・・・

// Don't change any setting on this file. If you want to override the default
// behaviour, change the settings values on your
// Packages/User/Auto Encoding for Ruby.sublime-settings file.
{
  // Syntaxes where Auto Encoding for Ruby will be activated.
  "allowed_syntaxes":
  [
    "Packages/Ruby/Ruby.tmLanguage",
    "Packages/Rails/Ruby on Rails.tmLanguage",
    "Packages/RSpec/RSpec.tmLanguage"
  ],

  // This is the encoding declaration that will be inserted on the top of your files.
  "encoding_declaration": "#encoding: utf-8\n\n",

  // The first line of your files will be checked against this regex to verify if it
  // already has an encoding declaration. So if you change the default encoding
  // declaration above, you must change this accordingly. Don't forget to escape
  // character classes as "\s" to "\\s", for example.
  "encoding_declaration_regex": "^\\s*#\\s*encoding\\s*:\\s*utf-8\\s*$",

  // Set to false if you want to keep encoding declaration even it became not need
  "remove_encoding_declaration": true,

  // Set to false if you don't want to checking encoding on every keystroke
  "checking_encoding_on_pre_save_only": false
}

一番上にもしデフォルトを変えたければコレを書き換えるんじゃなくてPackages/User/の下にAuto Encoding for Ruby.sublime-settingsファイルを作ってねって書いてあったね。ゴメンナサイ・・・この記事かいてる時に気が付いちゃった(・ω<)。

というわけで、素直に従ってPackage/Userの中にAuto Encoding for Ruby.sublime-settingsを作成しました。
で、取り敢えず上に貼った初期設定をコピペして、そこからスタートしてみる。
で取り敢えず見てみると,

// The first line of your files will be checked against this regex to verify if it
  // already has an encoding declaration. So if you change the default encoding
  // declaration above, you must change this accordingly. Don't forget to escape
  // character classes as "\s" to "\\s", for example.
  "encoding_declaration_regex": "^\\s*#\\s*encoding\\s*:\\s*utf-8\\s*$",

とか有るわけですね、はいこれは既にエンコードが入ってるかどうかのチェックを下の正規表現で行ってるってことなんだけど・・・
取り敢えず、今回の場合この正規表現に今までのエンコード表現を追加すれば回避できそう?な気がするので変更してみる。
というわけで下のようにガリガリと賢くない正規表現を力技で実装しました。

  // The first line of your files will be checked against this regex to verify if it
  // already has an encoding declaration. So if you change the default encoding
  // declaration above, you must change this accordingly. Don't forget to escape
  // character classes as "\s" to "\\s", for example.
  "encoding_declaration_regex": "^\\s*#\\s*(encoding\\s*:\\s*utf-8|-\\*-\\s*coding:\\s*utf-8\\s*-\\*-)\\s*$",


正規表現に関しては自分で書いててこれは酷いwとか思うレベルですが、コレでも一応はじめの目的は満たせました。

詳説 正規表現をちゃんとやろうと決意した日でした・・・

因みに挿入される形式自体を統一したいことなど有ると思いますが、変更したい場合には

  // This is the encoding declaration that will be inserted on the top of your files.
  "encoding_declaration": "#encoding: utf-8\n\n",

を書き換えるだけすげー楽ちん。

結論
auto-encoding-for-rubyは便利

Raspberry Piが来た!

なんかもう忘れかけてたけど来てた!

いや忘れてた分際で申し訳ないけど結構嬉しかったりする。

あけてそうそう落としましたけどね(orz)。拡張ポートがちょっと曲がった・・・

まぁその程度の被害で住んでよかったんだけど。

さて16GのSDカードも買ってきたしdebianサーバ構築して速い所自鯖のリプレースをしてしまおう。

sshwikiが動けば良いから非常に助かる。

でもこれをサーバーにするなら、弾数が欲しいな〜

取り敢えずやすいし追加注文しようかな(5~6台位)。

gem serverコマンド押してびっくりした。

rails をいじってた時に追加でgemを追加しようとして疲れていたせいもあるかと思うんだけど、なんでかrails serverとタイプしようとしてgem serverとタイプしていた。

でいつもの様にlocalhost:3000にアクセスしに言ってサーバーが起動してなくてターミナルに戻るとこんな表記が・・・

で誘われるがままhttp://[::ffff:0.0.0.0]:8808にアクセスしてみた。

するとそこには過去に入れたgem一覧とrdocが!

知らなかったなぁ・・・

また新しいデバイスに手を出した。

欲しくなって買った。後悔はしていない。

買ったのはArduino UnoArduino Ethernet
を買った。

作りたいものはあるけど作ってる余裕なんか無いことに気がついてちょっとヘコむ。

p/eceのアプリとかもいい加減一個作りたいんだけどなぁ・・・

kaminariを使って、同じページにページャーを2つ設置したい

基本的に英語恐怖症な俺ですが、実装する必要だったので調査。

http://memo.yomukaku.net/entries/238を参考に実装したのだけど、2つ以上ページャーを同じページに設置するにはどうしたいいのかわかんなかった。


ruby on rails 3 - Multiple pagination with kaminari via Ajax - Stack Overflowにたどり着いた。

ふむふむviewで呼び出すときに、

 <%= paginate @foo, :param_name => 'foo' %>
 <%= paginate @bar,:param_name => 'bar' %>

として、アクション側で

def hoge
   @foo = Foo.order('created_at DESC').page params[:foo]
   @bar = Bar.order('created_at ASC').page params[:bar]
・・・

とかするとパラメータを別々に渡すことができるので、同じページに2つ置けると解った。

後で調査してみたらamatsuda/kaminari · GitHubのページ(param_nameで検索すれば出てきます)にちゃんと書いてあったんだけどグーグルさんで探してた。

英語嫌いだからなるべく英語使わなくて済むように逃げまわってるけど、明らかに読んだほうが速かった。

とりあえずメモ