Raspberry piさんがフリーズするので対応
外からssh経由でアクセスをかけようとした時に、なぜだか反応しない瞬間が結構あった。
家に帰って確認してみるとLANポートが光ってない!(@ _ @)
LANケーブルを抜き差ししても駄目でこれは壊れたのかと一瞬目の前が真っ暗になりかけたのですが、
電源を抜き差ししたら復活したのでこれで一安心ε-(´∀`*)ホッとか思ってたら、しばらくするとアクセスが出来ない!
という事態の繰り返しになってました。
で、気がついたのは重い処理を投げている時によく落ちてしまうということでした。
例えば、rubyで1000000000回putsするだけのプログラムを走らせてみたり、apt-get でinstallをしたりすると落ちる。
これはひょっとして熱暴走かな?と思いアイネックス チップ用マルチヒートシンク HM-17
を購入して貼り付けた。
因みに貼りつけた状態でも純正のケースに入れるとフリーズします・・・
むき出しだとフリーズしません。
ケース買うんじゃなかったなーとかこっそり思ってしまってます・・・
そのうち時間ができたら錐とかで穴あけてファンを導入しようと画策中。
そうしたらもっと安定するに違いないし、せっかくファンレスなのに申し訳ないけど安定の方が大事だったりする。
追記
やっぱりヒートシンクだけじゃ駄目だったみたい・・・早いうちにファンを付けるかもっと大きなヒートシンクに変えないとだめみたい・・・
herokuでbranchをアップロードした時に"Pushed to non-master branch, skipping build."が表示される・・・
herokuにbranchをアップロードした時に
Pushed to non-master branch, skipping build.
みたいなメッセージが表示されて、buildされない場合の対応策は、【Heroku】master以外のブランチで動かす - ふわふわRuby on Railsに書かれている通り
$ git push heroku yourbranch:master
でOK。エラーメッセージでググった時に出て来なかったので書いた。
JINS PC買ってみた。
いまさらになるのですがJINS PCを買ってみました。
ブルーライトを防ぐということでブルーライトヨコハマを再生してみましたが、普通に見れました。
どこらへんがブルーライトなのかわからなかったのが原因かもしれません。
因みにフレームですが、同期とかぶってしまったためもっぱら家で利用することにしています。
ブルーライトを遮るメガネなのでせっかくなので青にしたのにまさかかぶっているとは予想外でした。
しかし、家ではいつもつけているのでメガネがない状態でPCのディスプレイを眺めていると非常に眩しいです。
なので早急に外出先で使う用のスペアが必要になってます。
効果は、付けてると感じない外すとすごく眩しいです。
因みにメガネかけるよりディスプレイにシートはったほうが圧倒的に満足度が高いと思ったのはないしょ。
モンティ・ホール問題は実装してみれば感覚的に解る!
モンティ・ホール問題ってみなさん知ってますか?
簡単にまとめると、
三個の箱があって1つだけあたりがあります。残りの2つは外れです。
あなたがその内の一つを選択した時に残りの2つのうちハズレを一箇所教えてもらえます。
そして司会者が最初に選んだものを本当に選択しますか?それとも、変更しますか?
という質問をされた時にあなたは、選択したものを変えたほうがいいのか?買えない方が良いのか?という問題です。
さて、ではコレを実装して検証して見ることにしましょう。
こちらがそのRubyのコードです。
# -*- coding: utf-8 -*- #アドバイス付きの選択 def select_use_advise(array, index) !check(array,index) end #当たり判定 def check(array , index) array[index]==1 end hit_not_change = 0.0 hit_change = 0.0 iter=1000 array =[1,0,0].shuffle iter.times{ array.shuffle index = rand(3) if(check(array,index)) hit_not_change = hit_not_change + 1 end if(select_use_advise(array,index)) hit_change = hit_change + 1 end } puts "変えなかった場合 : "+hit_not_change.to_s+" 確率 :"+(hit_not_change/iter*100).to_s+" %" puts "変えた場合 : " + hit_change.to_s+" 確率 :"+(hit_change/iter*100).to_s+" %"
紆余曲折を経てコレぐらい簡単になりました。
因みに実行結果は以下のとおりに。
変えなかった場合 : 318.0 確率 :31.8 % 変えた場合 : 682.0 確率 :68.2 %
皆さんが気になるのはコード内でアドバイス付きの解答の部分ではじめにハズレを選択していた時に、かならず当たるという形式をとっているところだと思いますが、これは至極当然ではじめに選んだものが外れていればハズレが開いているので絶対に当たり、はじめに選択していたものが当たりだったら選択肢を変えたら外れてしまうという可能性しか無いのです。
そしてはじめに選んだものは1/3で当たりなので、選択肢を変えた場合1-1/3=2/3となり選び変えたほうが絶対にいいと思う。
(間違ってたりした場合は連絡をいただけると助かります。)
Raspberry piさんにRailsインストールしてびっくりした話
aptitudeでrubyをインストールして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は便利