Atcorderに上がってたきもいRubyコード解読してみた
http://arc001.contest.atcoder.jp/submissions/4572
gets gets puts [*?1..?4].map{|c|$_.count c}.minmax.reverse*" "
問題は↓
http://arc001.contest.atcoder.jp/tasks/arc001_1
(irb)>>3 => 3 >>?3 => "3"
- アスタリスクの後に配列を書くと配列が展開される。Rangeオブジェクトも展開される
(irb)>>a = [1,2,3] => [1, 2, 3] >> [a] => [[1, 2, 3]] >> [*a] => [1, 2, 3] >> b = 1..3 => 1..3 >> [*b] => [1, 2, 3] >> b.to_a => [1, 2, 3]
- getsの結果は自動的に$_に入る。perlのアレみたいなやつ
gets puts $_ #省略しないで書くとこんな感じ? input = STDIN.gets puts input
- String.count(arg)でargの文字を数える
(irb)>>"aaabbbbc".count(?b) => 4
- Array#*はjoinみたいに使える
(irb)>>["つのだ","ひろ"]*"☆" => つのだ☆ひろ
仕事楽しいbot作った
heroku使う準備
- herokuコマンドをインストール
gem install heroku
- herokuに新規アプリを登録
gem create job-enjoy
- 出来立てのアプリをcloneしてくる
git clone git clone git@heroku.com:job-enjoy.git cd job-enjoy
最低限動くやつを作る
- app.rbを↓の内容で作成
#!/usr/bin/env ruby # encoding: utf-8 require 'sinatra' require 'slim' get '/' do 'しごとたのしー♪───O(≧∇≦)O────♪' end
- localでテスト
./app.rb
※しごとたのしー表示されたらおk
- heroku用のファイルを作る
◯config.ru
require './app.rb' run Sinatra::Application
◯Gemfile
source :rubygems gem 'sinatra' gem 'slim'
- bundle installする
$ bundle install
※Gemfile.lockが出来たらおk
heroku上で動作テスト
git add . git commit -m 'first commit' git remote add heroku git@heroku.com:job-enjoy.git git push heroku master
アプリの登録する
user_dirの下でmod_rewriteを使いたい時
user_dirはMacだったら$HOME/Siteの下みたいなところ、Linuxだとpublic_htmlみたいなやつ
この下でmod_rewriteすると変なことが起きる。
例えばこんな.htaccessをuser_dirの下に置くと
RewriteEngine on RewriteRule ^(.*)$ index.php/$1 [L]
↓みたいなリクエストがきたら
hogehoge.com/fuga
↓みたいに書き換えることを期待してるんだけど
hogehoge.com/index.php/fuga
この状態でアクセスすると、↓みたいな感じのエラーが出る
The requested URL /Users/nab/Sites/index.php/fuga was not found on this server.
user_dirのモジュールがurlをlocalのパスに書き換えちゃうみたい。RewriteBaseを追加したら解決した。
RewriteEngine on RewriteBase /~nab/ RewriteRule ^(.*)$ index.php/$1 [L]
既存の仮想マシンを複製する
- コピー元のマシンをnobueコピー先のマシンをmihoshiとします。
- コピー元の仮想マシンのディスク容量を確認
$ sudo lvs nobue-disk john -wi-ao 9.00g nobue-swap john -wi-ao 256.00m
- 同じ容量のディスクを作成する
sudo lvcreate -L 9GB -n mihoshi-disk john sudo lvcreate -L 256MB -n mohoshi-swap john
- コピー元のマシンをシャットダウン
sudo xm shutdown nobue
- ディスクをコピーする
sudo dd if=/dev/mapper/john-nobue--disk of=/dev/mapper/john-mihoshi--disk conv=noerror,sync
- swap領域にファイルシステムを作成
sudo mkswap -c /dev/mapper/john-mihoshi--swap
- 設定ファイルをコピー
cp /etc/xen/nobue.cfg /etc/xen/mihoshi.cfg
- 設定ファイルのディスクとnameとmacアドレスを書き換え
$ diff /etc/xen/nobue.cfg /etc/xen/mihoshi.cfg 20,21c20,23 < 'phy:/dev/john/mihoshi-disk,xvda2,w', < 'phy:/dev/john/mihoshi-swap,xvda1,w',
-
- -
-
- -
-
- -
- コピーした仮想マシンを起動
sudo xm create mihoshi.cfg -c
- たぶんこれだとipがダブるのでipを再取得するといいかも
sudo /etc/init.d/networking restart
xenでdomainUからdomain0に繋がってる物理HDDを直接マウント
仮想マシン上でファイルサーバーを動かしたくて、
e-SATAで繋がってる6TBの外付けディスクを
domainUからマウントしたい。
disk.imgみたいな6TBの仮想ディスク用の
ファイルを外付けディスクに
作ってそれをdomainUに割り当てるのがxen的な
解決方法だと思うんだけど、それだと
今までのファイルを全部仮想ディスクにコピーしないと
いけないし、なんかあった時にデータ取り出すのが面倒そう。
domain0でnfsとかsamba動かしてdomainUで読むことも
考えたけど、ベンチ取ったらスピード糞遅くなるし
そもそもdomain0でサーバーあんま動かしたくない
てことで、domainUから直接HDDをマウントしたい!
PCIパススルーとか使うと出来そうだったけど
カーネルコンパイルとかしないといけないらしく
あんまやりたくない。
domain0で以下のコマンド打つと、物理HDDをそのまま
domainUに割り当てられました。
sudo xm block-attach 1 phy:/dev/sdb1 /dev/xvdc w
書き方は
sudo xm block-attach 仮想マシンのID phy:マウントしたいデバイス名 マウント先のデバイス名 モード
- 仮想マシンのID
- xm listで調べる
- マウントしたいデバイス名
- fdisk -lとかで見た時のデバイスの名前
- マウント先のデバイス名
- xvd*の形式で*は適当なアルファベット1文字を入れる。
- xvdc1とかやりたかったけど、それだとdomainUに認識されなかった。
- モード
- r
- 読み込み専用
- w
- 読み書きおk
- r
割り当てた仮想マシンに入って↓みたいにすると
仮想マシン上から物理HDDをマウント出来る
sudo mount -t ${ファイルシステム名} /dev/xvdc
今までは仮想化しないでファイル鯖立ててたんだけどその時とほとんど
変わらない速度が出てる。仮想マシン上でsamba立てて
windowsで読み書き両方試したけど40〜50MB/sくらい
あとはwindowsをdomainUで動かしたいなぁ・・・