緩やかな再起動 graceful
# /usr/local/apache/bin/apachectl graceful
感情は大切という話
いきなりですが、少しイメージをしてみてください。
あなたは車を運転しています。右折車が対向車線上で渋滞の切れ目をまっている。
そこであなたは車を止めてゆずってあげようと思いました。
しかし、貴方の1つまえにいる車が譲ってしまいました。あなたはどうおもいますか。
”自分がゆずるつもりだったのに”って思うかもしれませんね。
この時考えるべきは、「目的はなんだったのか」ということです。
目的は、右折車が曲がれれば良い、そのための手段として自分がゆずる、
ということだったのに、自分がゆずれないことに対してむっとしてしまう。
こういう風に感情によって手段と目的が入れ替わることが仕事でも往々にしてあります。
はじめは、「お客様に満足してもらうこと」が目的だったはずなのに、
”自分がやるタスクを同僚にとられてしまった。”
”他人に聞くのは癪だから、クオリティが多少低くても自分だけでやりとげる”
”皆の前で発表するのは恥ずかしいから、大事なことがあっても伝えきれない”
”嫌われるのがいやだから、だれかが犯した間違いを指摘できない。だれかが言ってくれるだろう”
劣等感、虚栄心、羞恥心、etc...
色々な感情が邪魔してしまうことがあります。
ここで大切だと、いいたいのは、感情自体に左右されて行動するのではなく、
人ですから、感情の起伏は絶対に起こるということを認識し、それと向き合う必要があるということです。
イヤなとき、うれしいとき、なぜそう感じるか。利己的で間違った感情を抱いていないか。
あたまの中で考えて、文章化すればおのずと本来の目的が見えてきます。
論理的な話の上では、感情は無視されがちですが、感情も織り込んでこそ、本当の論理的な考えに発展すると思います。
gemでmysqlのライブラリインストール
gemでmysqlのライブラリがインストールできひん
[root@localhost ~]# gem install mysql Fetching: mysql-2.9.0.gem (100%) Building native extensions. This could take a while... .......... ERROR: Error installing mysql: ERROR: Failed to build gem native extension. /usr/bin/ruby extconf.rb checking for mysql_ssl_set()... *** extconf.rb failed *** Could not create Makefile due to some reason, probably lack of necessary libraries and/or headers. Check the mkmf.log file for more details. You may need configuration options. Provided configuration options: --with-opt-dir --without-opt-dir --with-opt-include --without-opt-include=${opt-dir}/include --with-opt-lib --without-opt-lib=${opt-dir}/lib --with-make-prog --without-make-prog --srcdir=. --curdir --ruby=/usr/bin/ruby --with-mysql-config --without-mysql-config /usr/share/ruby/mkmf.rb:381:in `try_do': The compiler failed to generate an executable file. (RuntimeError) You have to install development tools first. from /usr/share/ruby/mkmf.rb:461:in `try_link0' from /usr/share/ruby/mkmf.rb:476:in `try_link' from /usr/share/ruby/mkmf.rb:619:in `try_func' from /usr/share/ruby/mkmf.rb:894:in `block in have_func' from /usr/share/ruby/mkmf.rb:790:in `block in checking_for' from /usr/share/ruby/mkmf.rb:284:in `block (2 levels) in postpone' from /usr/share/ruby/mkmf.rb:254:in `open' from /usr/share/ruby/mkmf.rb:284:in `block in postpone' from /usr/share/ruby/mkmf.rb:254:in `open' from /usr/share/ruby/mkmf.rb:280:in `postpone' from /usr/share/ruby/mkmf.rb:789:in `checking_for' from /usr/share/ruby/mkmf.rb:893:in `have_func' from extconf.rb:45:in `<main>' Gem files will remain installed in /usr/local/share/gems/gems/mysql-2.9.0 for inspection. Results logged to /usr/local/share/gems/gems/mysql-2.9.0/ext/mysql_api/gem_make.out
先にmysqlの開発環境を整備しないといけんかった。
# yum install mysql-devel
RubyでHTML
RubyでWebスクリプト(CGI)を書きたい(not Rails)
ってことで調べてみた。
考えたら、PHPみたいにHTML吐き出し前提じゃないしね。
こう考えるとPHP手軽だなって改めて思いました。
流れ
実行環境:Fedora17 64bit on VirtualBox
http.confの設定変更
前提としては、perlでやるようにCGIの設定を行う。CGIのモジュールが有効になっていること
# コメントアウトされていないか確認 LoadModule cgi_module modules/mod_cgi.so
任意のDirectoryディレクティブの設定。下記2行追記(今回はYumでインストールしたときのデフォ)
<Directory "/var/www/html"> : <省略> AddHandler cgi-script .rb # ←.rbの拡張子でCGIが動作するよう設定 Options +ExecCGI # ←CGI実行 <省略> : </Directory>
コーディング
ためしにこんな感じで。#!/usr/bin/ruby print "Content-type: text/html\n\n"; print <<EOF <html> <head> </haed> <body> hello,world </body> </html> EOF
トラブルシューティング
アクセスしたらInternalSefverError.ログみると以下がでてた(13)Permission denied: exec of '/var/www/html/hoge.rb' failed
権限の問題かーとおもって実行権限やオーナー確認しても問題なし。。
Apacheの設定を見直しまくるも問題なし。。
実は、SELinuxが邪魔してた模様。。
# setenforce 0
ちゃんとアクセスできた。
罠すぎる。
PHPで扱える整数最大値を超えた場合の計算法
- 結論
BCMath関数を使う
http://php.net/manual/ja/ref.bc.php
たまたま12ケタくらいの数値を扱っていて、
剰余算が-1とか-2、割り切れないくせに0を吐き出すことがあった。
<?php // 適当に多い桁の数値を3で割ったときのあまりを求める。 $no = 600000000111; echo $no % 3 ."\n"; // 実行すると -2 $no = 600851475143; echo $no % 3 ."\n"; // 割り切れないのに 0を返す ?>
最初は自分の剰余算の認識がおかしいのかと思ってしまった。
まぁ普通に考えて・・・ケタあふれてそうだなと思い直し、仕様を調べると、
<?php echo PHP_INT_SIZE; ?>
これでPHPで扱える整数の最大値が求まる。
僕の場合は"4"(=4byte)だったんですけど、完璧環境依存っぽい。
(64bitなら6を扱える。まぁPHPの設定かバージョンにも左右されるのかな。)
つまり僕の環境で使える最大整数値は
2147483647 // 10ケタ・・・!
全然たらん。
しかしそれ以上の数値を扱ってもエラーにはならない。
なぜなら、PHPの仕様でINTをこえちゃうと勝手にFloatにキャストされてしまうそうな。
http://d.hatena.ne.jp/hnw/20100415
<?php // PHP_INT_MAXで扱える最大の整数値が求まる var_dump(PHP_INT_MAX); // int(2147483647) var_dump(PHP_INT_MAX+1); // float(2147483648) ?>
つまり下記のようにするとfloatで計算されていたのですね。
<?php // 適当に多い桁の数値を3で割ったときのあまりを求める。 $no = 600000000111; echo $no % 3 ."\n"; // 実行すると -2 var_dump($no); // float(600000000111) 型をみてみるとFloat ?>
まぁそれでも答えが合致しないのはよくわからないンですけど。。
BCMath関数を使えば解決。
<?php $no = 600000000111; echo bcmod($no, 3) ."\n"; // 0 $no = 600851475143; echo bcmod($no, 3) ."\n"; // 2 ?>
ちゃんとした答えをだしてくれました。