Railsその前に

Ruby on Railsはじめます。世の中の説明やチュートリアルはいろいろ間違っていて、Railsの前にRackを説明するべきなんですよね。rails newでたくさんファイルができてうれしいね、じゃないでしょ。意味の分からないファイルがたくさんできても嬉しくないんですよ。むしろ分からない領域が広がれば広がるほど悲しいでしょ。アクセスがどこから来て処理はどこに行くのか。それを知っとかないと不安が大きいままになってしまう。戦場の足場は大事なんです。

RackはPythonで言うWSGIみたいなもので、リクエストを処理するところだけ書くとうまいことWebサーバとつながってくれる、というもの。ググって調べると分かりやすい説明がありますのでどうぞ。そのRackの設定がconfig.ruで、Railsでも作られます。Rails自体がRackに対応したアプリとして実装されているので、WebサーバとつながっているRackのconfig.ruから辿って行くと処理が追いやすいと思います。

require ::File.expand_path(‘../config/environment’, __FILE__)
run Rails.application

まあそれでも、Rails.applicationってどこよ? とかrunって何よ? というと探すのはそれなりに苦労しますが、何を探していけばいいのかの手がかりにはなりますよね。

川崎3-1蔚山 (2位通過)

平日夜の雨の等々力。1万人弱の早帰りサラリーマンが集まりました。小杉駅からの直行バスはもうちょっと何とかしたほうがいいんじゃないですかね。あそこに2台並んでるんだから、2台同時に乗せてけば、もっとスループットが出そうな気がする。私が並んだとき、行列は階段どころかエレベーター越えてましたよ。ボトルネックは不手際がある乗客のところと、信号が変わるまで出て行かない先頭バスを待っているところのように思えた。バスの車自体はけっこう来るので。あの行列で諦めて杉40とかタクシー使う人も多いと思います。

ACLのグループリーグ最終節。H組はウェスタンシドニーが5-0で勝ったので、川崎は2位通過。最近のACLはベスト16でもホーム&アウェイやるんですね。まだ相手は決まってませんが、広島のいるグループFの1位のクラブとの対戦になります。グループFの最終戦は明日ですが、FCソウルが勝ち点8、他3チームが勝ち点6なので、全てのクラブに1位の可能性があります。最も川崎から距離が近い広島が1位通過しても、遠いですね。そこはACLですから。

今日の試合。レナトの日じゃなかったけど、代わりに小林悠や大久保、ジェシが決めてくれた。小林悠は息子誕生、ジェシは後半早々にモメた9番のFWの上を行くヘディングをCKで叩き込んでバースデーゴールという、いろいろ爽快なゴール。得点直後の失点は余計でしたが、それでもかなり余裕はありましたよね。負ける要素がなく、横綱相撲に近いゲーム。今年は勝つゲームも負けるゲームもかなりイケてる感じです。

Fedora20のvagrant box

  • create new VM “F20”
    • VMDK, virtio_net, Host I/O cache
  • minimum install
    • BTRFS
    • root pass = vagrant
  • yum install kernel-devel gcc tar bzip2 perl ruby ruby-devel rubygems
  • yum clean all
  • install guest additions
    • Devices – Insert Guest Additions CD image…
    • mount /dev/cdrom /mnt
    • cd /mnt
    • ./VBoxLinuxAdditions.run
  • umount, eject
  • gem install chef –no-rdoc –no-ri
  • systemctl disable firewalld.service
  • vi /etc/selinux/config
    • disabled
  • useradd -G wheel vagrant
  • passwd vagrant (-> vagrant)
  • visudo
    • %wheel ALL=(ALL) NOPASSWD: ALL
    • # Defaults requiretty
    • Defaults env_keep += “SSH_AUTH_SOCK PATH”
    • # Defaults securepath
  • su – vagrant
  • echo ‘export PATH=$PATH:/usr/sbin:/sbin’ >> .bashrc
  • mkdir .ssh
  • chmod 755 .ssh
  • curl -O https://raw.github.com/mitchellh/vagrant/master/keys/vagrant.pub
  • mv vagrant.pub > .ssh/authorized_keys
  • chmod 644 .ssh/authorized_keys
  • sudo poweroff
  • vagrant package –base F20 –output F20.box
  • vagrant box add –name fedora20 F20.box

川崎2-1ウェスタンシドニー (まだまだ続くよ)

今日も寒かったけど、1万人の早帰り社会人が等々力に集結。ゴールも全部こっち側で、気持ちは良かったと思います。外した惜しいシュートも鳥肌未遂でしたが、大島のゴールの興奮は凄かった。

グループHはここまで1位の蔚山現代が2勝1分の勝ち点7、2位のウェスタンシドニーが2勝1敗の勝ち点6。3位の川崎が1勝2敗で勝ち点3。残り3試合で2位との直接対決という状況。ここは勝たないときつい。ウェスタンシドニーとしては引き分けでもOK。そこに先制点を与えてしまうんだからね。ウェスタンシドニーは意外と上手い。テクニックもあるし、足も伸びてくる。

川崎のスタメンには小林悠が外れて森島、井川が外れて中澤聡太。コバユウは怪我でしょうね。嫌な予感しかしなかった。中澤と井川だとさして力は変わらないような気もするが、井川も近年やるときゃやる。

これで勝ち点で2位に並び、グループステージ突破の可能性を残した。あのまま負けてたら終戦に近かったから、大島のゴールがどれほど大きなものかが分かる。

残りは2試合、アウェイで貴州人和、ホームで蔚山現代。どちらも難易度は高い。ウェスタンシドニーの残り試合はアウェイで蔚山現代、ホームで貴州人和。おそらくホームの貴州人和戦は勝つだろうから、勝ち点3以上は固いと考えられる。川崎がウェスタンシドニーを上回るには、まずは次の中国アウェイで勝ちたいところ。その前提で、ウェスタンシドニーが蔚山現代に勝てば最終戦は蔚山現代との直接対決をホームでやって蹴落とせばいいし、蔚山現代が勝てば、引き分けでも勝ち上がれる状況になれる。

というわけで次の試合(15日の中国アウェイ)のじゅうようせいが分かっていただけただろうか? 私は行けないけど。

川崎1-0名古屋 (余裕の1000ゴール)

ACLへの配慮による過激な金曜夜開催。涼しい顔で会社を抜け出した1万2千人が等々力に集まりました。時間も時間だし、意外と冷えたかな。

試合のほうはかなり技術に差があったと思いますが、終わってみれば1-0でした。この内容なら、もうちょっと点を取ってもよかったと思います。1000ゴールの投票は私はいろいろなビッグデータ分析と爆発的計算により導き出された答え「田中裕介」に投票して当てる気マンマンでいましたが、バーに嫌われて外したよコンチクショー。(あっち側のゴールだったから田中裕介本人のシュートだったかどうかすら定かでないのだが)

フロンパークに岡山一成が来てましたね。先を急ぎつつも「あ、ホンモノだ…」って感じでした。平日だから来れたのか…と思いきや、奈良クラブが参加するKSLのシーズンは4月から始まるんで、まだ開幕前なんすね。本を出したそうです。

来週も平日開催か…まあ、来るつもりだけどね。

chefなんて最初からいらんかったんや!

結局のところ、最近はchef使ってないですね。Vagrantの場合はshell providerで過ごしてます。Vagrantfileの中にサクッと書けるし、共通で使い続けるもの(yumのミラーサイトに社内のURLを設定したり、プロキシの設定とかtimezoneの設定とか)はgistにシェルスクリプトを書いといてそのURLを書いたり、たまには共有フォルダの中にスクリプトを置いたりもする。

chefを使うと設定項目が複数のファイルに分かれがちになるし、設定ファイルがVagrantfileがあるディレクトリと離れて、下の階層に追いやられてしまう。オーバースペックゆえに単純なことが把握できなくなるというデメリットをどうしても見過ごせなかったんだ。

今のところ実マシンの管理者をやってない単なる利用者なので、という事情もある。Vagrantで操作する実験用のテンポラリVMしか管理する必要がないのよね。これなら毎日帰るときにdestroyすりゃいいので気が楽。

OSの差異については、chef使ったとしても埋まり切るものではないし、だいたいCentOSでたまにUbuntuと、多くても2種類しかないので、そこんとこもどうにでもなる。あと…見ず知らずの他人が書いた公開レシピなんて気持ち悪くて使いたい気にならないよね。

MacBookPro、一度に一つの奇跡

MBPの何がすごいって、購入して2週間近く経過しますが、まだ子どもたちに買ったことがバレていません! これはスゴイすぎる!!

より具体的に表現するなら、本棚で本に紛れて隠しておける。木を隠すなら森の中。実際は書類に紛れさせてますが、つまりこれってうまくやれば妻にもバレずに済んでいた可能性すらある! 素晴らしいぞMBP。

トッキュウジャーのCDをこっそり買ってWindowsマシンのiTunesに入れておきました。TVで聴いてた印象以上に名曲でしたが、あいつらこれには気づくかな?

ところで私は「一度に一つの奇跡」というフレーズが気に入っていて、自分ではAppleの広告に由来する言葉だと思ってたんですけど、ぐぐっても全くヒットしませんね。もしかして私が発明した言い回しなのかもしれない! だいぶ以前から、何となく気に入っていた表現。

みおふぉん到来

まあ、あれだ、実際あまりどこかにバレるとよろしくないエントリだったりしますが、気にしないでいくか。

みおふぉんが到着したので、早速SIMを差し替えてb-mobileを解約した。年間契約とかじゃないので何の縛りもない。

b-mobileの解約の手軽さは異様なほどで、ログインしてボタンを1つ押すと、確認のOKダイアログが出て、そこでOKを押すと解約申し込み完了。解約理由のアンケートを何枚もやらせたりしてこない。メールのURLを踏ませて確認したりしない。しかも解約のキャンセルは不可。この手軽さは世の中の企業にも見習ってほしいですな。とても感心しました。

今後は回線の契約もくらうど型というか、API型になっていく気がします。回線契約のREST APIがあって、CLIツールで1行書くと何回線も一気に引けたり切れたりするっていうね。設定情報もJSONで返ってきてマシン側で設定できるのね。ちょっと何言ってるか分からないですけども。

肝心のSIMカードについてだが、みおふぉんのパッケージは噂に聞く通りのかんがえぬかれたパンスト型パッケージだった。これにはちょっと度肝を抜かれる。特に迷うことなく差し替えてAPNの設定を変えて通信できることを確認して終了。Bicで買えば同じ値段で無料Wifiがついてきたらしいけど…私はMBP持ち歩かないからなぁ。

次は電話本体をLTEに対応したものに買い換えよう。かわいそうなことに、まだ3Gなんですよねー。

川崎3-4大宮 (逆等々力劇場)

稀に見るシーソーゲームは怒涛の4試合連続ロスタイム被ゴールで劇的逆転負け、で幕を閉じた。これは痛い。痛すぎる。菊地に2ゴール。

伊藤宏樹が引退してなかったら勝ってた試合? 菊地を放出してなかったら?? そんなこと言ってどうなるわけでもないのだが、山本真希では逃げ切るための交代にはならんのでしょう。

神戸戦の感想で2005年がどうとか、書かなきゃ良かった。だってこんなことになるとは思わないもん。

テスト

練習。小括弧()を使わなくてもある程度までプログラムを書けるんだなぁ。Lispと対比して何かひとこと言う必要ある?

[pyg language=”ruby”]
#! /usr/bin/ruby

tbl=[]

STDIN.readlines.each do |l|
tbl.push l.strip.split
end

lens=[]
tbl.each do |row|
row.each_with_index do |col, i|
begin
if col.length > lens[i] then
lens[i]=col.length
end
rescue NoMethodError, ArgumentError
lens.push col.length
end
end
end

tbl.each do |row|
l=[]
row.each_with_index do |col, i|
l.push col.rjust lens[i]
end
puts l.join ” ”
end
[/pyg]

ある種すごいと思ったのは、配列要素の初期値がnilなので存在しないインデックスを指定するとnilが返ってくるところ。Python時代は例外が発生するからね。ただし、awkなら0と””の両方として使えるのでいきなり++とかしても数えたりつなげたり処理できるが、Rubyはそうはいかず、nilとintの演算で例外が発生する。結局if文を入れるか例外を拾うかのどちらか…

そして、nil > 10 はNoMethodError、10 > nilはArgumentError例外が発生する。違うんだこれが。