2011年5月28日土曜日

Coders at Work 買った


日本語版買って、読み直し。
年齢の近い Brad Fitzpatrick のインタビューが自分にとっては最も興味深い。

- 独学しているプログラマに対してアドバイスはありますか?
常に少し難しいことをやるようにして、自分の領域を広げること。コードを読むこと。(以下略)

- プログラミング以外でプログラマになりたい人が身につけるべきスキルは何かありますか?
コミュニケーションというのがありますが、これは正直なところ、練習して身につけられるものなのか分かりません。
(中略)
高校を出た後に成功するのはどういう一日調べた研究があります。成績の良い人か社交的な人か?成績の良かった人よりも社交的な人のほうが生涯収入は多いことが分かりました。興味深い話だと思います

- 最高のプログラマと最低のプログラマでは生産性に桁違いの差があると言われていますが、あなたの経験ではどうですか?
(略)単に仕事としてやっていて、本当には楽しんでない人がいるのでしょう。それはそれでかまわないと思いますが、そういう人を筋金入りのプログラマと比較するのはおかしな話です。一方の人は10倍の時間働きノンストップで考え続けていて、もう一方の人はただ仕事でだけやっているというとき、それを10倍の生産性というべきなのでしょうか?


ほか Jamie Zawinski, Guy Steele, Ken Thompson, Donald Knuth .... などなど錚々たる顔ぶれ。

2011年5月26日木曜日

ファイルディスクリプタ数ではまる(気がした

(片手落ちまくりだったので修正)

どうやら 1024 のままでそれ以上開けない -> エラーになってる?疑惑をもち、
TokyoTyrant と memcached それぞれが動いているサーバでごそごそと調べる。。

TokyoTyrant ... -le オプションでエラーログはでるようになっている、そのエラーログにはファイルディスクリプタ不足で開けない旨は書かれておらず。ttacceptsock failed というのがでるみたいなんだなこれが。

memcached ... -v オプションなしで起動してるのでログない...(!)

カーネルがややふるめなので /proc/<PID>/limits は無いため、すぐわからず。。

でまぁ TokyoTyrant からみてみると、
SYSTEM maximum connection: 1048575
というログはあり、むちゃくちゃ大きい値をとって起動している。ソースみてみると ttserver.c でそれっぽいコードが。ChangeLog にも

* ttserver.c (proc): the system connection limit is now reset.

と書かれていた、ので TokyoTyrant はシロの模様。
ためしに Amazon Linux AMI でインスタンス起動、TokyoCabinet と TokyoTyrant を入れて
ttserver を起動し /proc/<PID>/limits をみてみると・・・

[ec2-user@ip-10-150-131-110 tokyo]$ cat run.sh
/usr/local/bin/ttserver -port 1978 -dmn -le -pid /var/run/ttserver.pid \
-log /var/log/ttserver/ttserver.log -ulim 1024m \
/ttdata/casket.tch#bnum=100000000
[ec2-user@ip-10-150-131-110 tokyo]$ sudo sh ./run.sh
[ec2-user@ip-10-150-131-110 tokyo]$ cat /var/run/ttserver.pid
1095
[ec2-user@ip-10-150-131-110 tokyo]$ sudo cat /proc/1095/limits
Limit Soft Limit Hard Limit Units
Max cpu time unlimited unlimited seconds
Max file size unlimited unlimited bytes
Max data size unlimited unlimited bytes
Max stack size 8388608 unlimited bytes
Max core file size 0 unlimited bytes
Max resident set unlimited unlimited bytes
Max processes 1024 unlimited processes
Max open files 1048575 1048575 files
Max locked memory 65536 65536 bytes
Max address space unlimited unlimited bytes
Max file locks unlimited unlimited locks
Max pending signals 59759 59759 signals
Max msgqueue size 819200 819200 bytes
Max nice priority 0 0
Max realtime priority 0 0
Max realtime timeout unlimited unlimited us

やはり TokyoTyrant はよろしくやってくれてる。

memcached は、 やはり 1024 だった <= これはまちがい。-c の値を、疑惑をもったサーバと同じ設定にしてなかっただけ。-c で指定すればよい。

[ec2-user@ip-10-150-131-110 tokyo]$ sudo /etc/init.d/memcached start
Starting memcached: [ OK ]
[ec2-user@ip-10-150-131-110 tokyo]$ cat /var/run/memcached/memcached.pid
1117
[ec2-user@ip-10-150-131-110 tokyo]$ sudo cat /proc/1117/limits
Limit Soft Limit Hard Limit Units
Max cpu time unlimited unlimited seconds
Max file size unlimited unlimited bytes
Max data size unlimited unlimited bytes
Max stack size 8388608 unlimited bytes
Max core file size 0 unlimited bytes
Max resident set unlimited unlimited bytes
Max processes 1024 unlimited processes
Max open files 1024 1024 files
Max locked memory 65536 65536 bytes
Max address space unlimited unlimited bytes
Max file locks unlimited unlimited locks
Max pending signals 59759 59759 signals
Max msgqueue size 819200 819200 bytes
Max nice priority 0 0
Max realtime priority 0 0
Max realtime timeout unlimited unlimited us


ので、、/etc/init.d/memcached 内で ulimit を実行するようにした。
[ec2-user@ip-10-150-131-110 tokyo]$ sudo /etc/init.d/memcached restart
Stopping memcached: [ OK ]
Starting memcached: [ OK ]
[ec2-user@ip-10-150-131-110 tokyo]$ cat /var/run/memcached/memcached.pid
1137
[ec2-user@ip-10-150-131-110 tokyo]$ sudo cat /proc/1137/limits
Limit Soft Limit Hard Limit Units
Max cpu time unlimited unlimited seconds
Max file size unlimited unlimited bytes
Max data size unlimited unlimited bytes
Max stack size 8388608 unlimited bytes
Max core file size 0 unlimited bytes
Max resident set unlimited unlimited bytes
Max processes 1024 unlimited processes
Max open files 32768 32768 files
Max locked memory 65536 65536 bytes
Max address space unlimited unlimited bytes
Max file locks unlimited unlimited locks
Max pending signals 59759 59759 signals
Max msgqueue size 819200 819200 bytes
Max nice priority 0 0
Max realtime priority 0 0
Max realtime timeout unlimited unlimited us

これでよろしい。。。


確認。

[ec2-user@ip-10-150-118-101 ~]$ sudo /etc/init.d/memcached restart
Stopping memcached: [ OK ]
Starting memcached: [ OK ]
[ec2-user@ip-10-150-118-101 ~]$ pgrep memcached
1147
[ec2-user@ip-10-150-118-101 ~]$ sudo cat /proc/1147/limits
Limit Soft Limit Hard Limit Units
Max cpu time unlimited unlimited seconds
Max file size unlimited unlimited bytes
Max data size unlimited unlimited bytes
Max stack size 8388608 unlimited bytes
Max core file size 0 unlimited bytes
Max resident set unlimited unlimited bytes
Max processes 1024 unlimited processes
Max open files 10240 10240 files
Max locked memory 65536 65536 bytes
Max address space unlimited unlimited bytes
Max file locks unlimited unlimited locks
Max pending signals 59759 59759 signals
Max msgqueue size 819200 819200 bytes
Max nice priority 0 0
Max realtime priority 0 0
Max realtime timeout unlimited unlimited us
[ec2-user@ip-10-150-118-101 ~]$ cat /etc/sysconfig/memcached
PORT="11211"
USER="memcached"
MAXCONN="10240"
CACHESIZE="64"
OPTIONS=""

=> Max open files は MAXCONN での値になった

MAXCONN を 10240 -> 256 に変更して再起動 (Max open files が デフォルトの 1024 になることを確認)
[ec2-user@ip-10-150-118-101 ~]$ sudo vi /etc/sysconfig/memcached
[ec2-user@ip-10-150-118-101 ~]$ cat /etc/sysconfig/memcached
PORT="11211"
USER="memcached"
MAXCONN="256"
CACHESIZE="64"
OPTIONS=""
[ec2-user@ip-10-150-118-101 ~]$ sudo /etc/init.d/memcached restart
Stopping memcached: [ OK ]
Starting memcached: [ OK ]
[ec2-user@ip-10-150-118-101 ~]$ pgrep memcached
1171
[ec2-user@ip-10-150-118-101 ~]$ sudo cat /proc/1171/limits
Limit Soft Limit Hard Limit Units
Max cpu time unlimited unlimited seconds
Max file size unlimited unlimited bytes
Max data size unlimited unlimited bytes
Max stack size 8388608 unlimited bytes
Max core file size 0 unlimited bytes
Max resident set unlimited unlimited bytes
Max processes 1024 unlimited processes
Max open files 1024 1024 files
Max locked memory 65536 65536 bytes
Max address space unlimited unlimited bytes
Max file locks unlimited unlimited locks
Max pending signals 59759 59759 signals
Max msgqueue size 819200 819200 bytes
Max nice priority 0 0
Max realtime priority 0 0
Max realtime timeout unlimited unlimited us


ソースの該当部分は 4512 - 4539 行目か。 (memcached 1.4.4 の場合)
  4521      /*
4522 * If needed, increase rlimits to allow as many connections
4523 * as needed.
4524 */
4525
4526 if (getrlimit(RLIMIT_NOFILE, &rlim) != 0) {
4527 fprintf(stderr, "failed to getrlimit number of files\n");
4528 exit(EX_OSERR);
4529 } else {
4530 int maxfiles = settings.maxconns;
4531 if (rlim.rlim_cur < maxfiles)
4532 rlim.rlim_cur = maxfiles;
4533 if (rlim.rlim_max < rlim.rlim_cur)
4534 rlim.rlim_max = rlim.rlim_cur;
4535 if (setrlimit(RLIMIT_NOFILE, &rlim) != 0) {
4536 fprintf(stderr, "failed to set rlimit for open files. Try running as root or r
equesting smaller maxconns value.\n");
4537 exit(EX_OSERR);
4538 }
4539 }


めんどうがらずにソースをチラ見でもしたほうがよい。


バックログが大量に必要になるときがあるなら -b で渡す値を決めるのと、net.core.somaxconn の値をみておくのも忘れずに。

2011年5月23日月曜日

MacBook Pro 15" のバッグ

を探している。

今使っているのはこれ



ストラップがちぎれそうなのでそろそろ新しいのをかわんとな・・・という状況。

今のと同様、
・本体を入れるスリットがあり
・電源も邪魔にならず
・撥水性能がよく
・他にも物がある程度入れられる

のがよい。一番下のは、「Macだけいれる専用カバン」と割り切れば考えなくていいや。

トートだとなさそう、バックパックだとありそう。今度はメッセンジャータイプじゃないのがいいな。。
バックパックだと、体格のせいでノコノコみたいになるのがちょっとなぁ。。

壊れる前に探して買わねば・・・。

よさげなのがあったら、'bag' ラベルでエントリ書くことにした。
=> http://ktjx.blogspot.com/search/label/bag

2011年5月22日日曜日

ウェブオペレーションを買った、読んだ

一言でいうと、「すごく、いい。」
自分にとっては、これまで買ったオライリー本の中で最もいいかもしれない。



執筆者は豪華だし、これまでなんとなく仕入れていたものがまとめられているし、なにより読んでて、「あー、わかる、、そうそう、、そうなんだよねー」と思うことが多い。

まだまだ足りないものが多いので、それを再認識するのにも役に立った。
最近一旦ほっとしていたけれども、気を引き締めることにもなった。

こういう本を20代前半のうちに読めるひとたちは幸せだと思うな。(ぼかぁ 31歳)

2011年5月19日木曜日

Ricty 3.0.0

これの続き

http://save.sys.t.u-tokyo.ac.jp/~yusa/fonts/ricty.htmlをみてみたところ、フォントの配布は無くなり、生成スクリプトのみの配布になってた。

バージョン 2.1.0 から 3.0.0 でおそらく配布形態以外の変更はないと思う。
けどまぁたまには fontforge でも使ってみましょう、ということで 3.0.0 を取得して ricty_generator.sh に従い実行。

いれるマシンは Mac OS X なので、fontforge は sudo port install fontforge してインストール、Inconsolata は http://levien.com/type/myfonts/inconsolata.htmlから取得、 Migu 1M は http://mix-mplus-ipa.sourceforge.jp/から取得した後生成した。

フォントのバージョンてどこでみれるの、、、と思ってたけど Finder で選択すればいいね。。

2011年5月15日日曜日

速くはない

「タイピング速い」とプログラマのひとにいわれることがたまにあるのだけど、そんなことはない。

確かめるために、「タイピング 速度 プログラマ」でぐぐって、ひげぽんさんのエントリをみてみた。

そこに載ってる http://www.e-typing.ne.jp/ を実施。

結果。(一度しかしてないけど。。)

スコア: 248pt
レベル: A+

全然速くないことが確認できた。毎日キーボード叩いてることを考えると、遅いよね。

キレやすいひと

キレやすいひとが社内におる。
また、突如大声だしたり、大声で笑ったりも。
そしてキーボードを叩く音が大きくなったりする
(メカニカルキーボードだからカチャカチャ音が大きい、というわけではなく!)

一度は社内であばれるようなことも起こしてたり。。

と、まぁ当人がどうこうはおいておいて、キレやすい、とか癇癪持ちなひとがそうなっているのは
どういう理由なんだろう?と興味をもったので参考程度に軽くググってみた。

キレやすい人とセロトニンの関係
キレやすい人に必要な食養
謝らない人ほどキレやすい

これはすごいなー。いるところにはいるのだなぁ。
職場でキレやすい人について

Ricty フォント入れた

プログラミング用フォント Ricty

(Mac の) ターミナルのフォントを Ricty Regular 13 pt. でしばらくつかってみる。うふふ。

サイトにかいてあるように、
現在、debian-devel および debian-bugs-dist において、Ricty のライセンスについて議論が行われています。
とあり、
議論の結果によっては Ricty の配布を中止することもありえますのでご了承ください。

とあるのでどうなるのだろう。
追記: その後、バージョン 3.0.0 より生成スクリプトのみの配布になった

もっと若いかもしれない

前の職場ではなんとなく(悪い意味での)「学生ノリ」なところがあって、なんだかなぁ。。と思うことがしばしばあったのだけど、

今のところでは、(悪い意味での)中学生〜高校生ノリな感じがする人もいるなぁ。。と思うことがあったりなかったり。どっちやねん。

CotEditor をあたらしくした

ちょっとしたメモ用途などで使っていたりする CotEditor、
そういえばしばらくバージョンアップしてないなぁ、、と思ったら、
中の人が交代していた。

http://www.aynimac.com/2010/07/07/234/

http://www.aynimac.com/2010/07/08/236/

http://usami-k-mac.seesaa.net/article/155823201.html

なるほど。

で、先月 1.1.1 がでていた。
http://sourceforge.jp/projects/coteditor/

python_select から python_select が無くなった

port sync, port outdated したら python関係のものがもりもり新しくなってたので
port upgrade outdated して python_select が 0.3_1 になりました。

% port installed python_select
The following ports are currently installed:
python_select @0.3_1 (active)

これまでパッケージ名と同じ python_select コマンドで切り替えられていたのだけど、
python_select コマンドが無くなった模様。

% port contents python_select
Port python_select contains:
/opt/local/etc/select/python/base
/opt/local/etc/select/python/none
/opt/local/etc/select/python/python25-apple
/opt/local/etc/select/python/python26-apple

port select で切り替えれば OK!

% port select
Error: port select [--list|--set|--show] <group> [<version>]

% port select --list python
Available versions for python:
none
python25-apple
python26
python26-apple
python27 (active)
python32

% port select --show python
The currently selected version for 'python' is 'python27'.

% sudo port select --set python python26
Password:
Selecting 'python26' for 'python' succeeded. 'python26' is now active.

% port select --show python
The currently selected version for 'python' is 'python26'.

% port select --list python
Available versions for python:
none
python25-apple
python26 (active)
python26-apple
python27
python32

scala_select も同じよう(port コマンドで切り替えるよう)になるのかな

2011年5月14日土曜日

打鍵音

興味深い...
http://d.hatena.ne.jp/blankey1982/20090615/1245070699
なんであんなに殴打して文字を打つのか。

そんなに文字を打ちたいくらいに仕事が好きなのかといえば、決してそうじゃない。

むしろ、不真面目な奴が多い。

キーボード叩く音がうるさい人の指の動きを観察した事があるんですけど、

指とキーボードの距離が遠いんですよ。

よって、助走を含めた指の圧力がキーボードにかかる為、音がうるさいと。

自分とキーボードとの距離感が理解出来てないんですよ。

だから仕事でも回りの社員との距離感が理解出来てないから、

周囲に不快感を与える。大袈裟に思われるかもしれませんが、

案外、真理だと思うんですよねぇ。

2011年5月10日火曜日

デプロイできない

という。capistrano が途中で固まる、らしい。

さーてどうしたもんか、、と思い、ひととおり以下の対応をした、してもらった。
ちなみにクライアントは Mac OS X 10.6.x.

・git gc

・net-ssh の更新
参考:
http://eric.lubow.org/2010/mac/capistrano-hangs-on-mac-os-x-leopard/
http://www.darianshimy.com/2009/09/capistrano-is-fixed-in-snow-leopard/

・Ruby の更新
参考: http://redmine.ruby-lang.org/issues/1848

でも、だめ。解消せず・・・ orz...

cap を実行し途中で止まったとき、よくよくデプロイ先のみてみると git-index-pack ががんばっていたりした。
ので、、git をバージョンアップしてみる。それに望みをかける。

連休前までは問題なく、急にできなくなったという。うむむ。。


でまぁ、単に「デプロイできない」といっても、
・git なのか
・net-ssh なのか
・Ruby なのか
・capistrano なのか (git 古いと git submodule のオプションがなくてコケたりする)
・・・・と、結構厄介ね・・・。あたりのつけかたが悪いだけかもしれないけど。

d o t c l o u d に お い た

さっぱり育てられずじまいの素朴な php 1ファイル のものをおいた.うごいた.

http://dnscheck.cont.dotcloud.com/

ロクにドキュメントみなかったこともあり
Net_DNS をどうやって入れればいいのだ・・・という点で悩んだ。
あとでよむ。

2011年5月8日日曜日

rvm が猛烈な勢いでバージョンアップしていた

1.2.8 だった。 1.6.5 になった。
ずんずんバージョンアップしてるとは露知らず・・
all versions of rvm

どうも、1.2.8 の状態で
$ rvm get latest
をすると、このように、、↓
% rvm get latest

Original installed RVM version:

rvm 1.2.8 by Wayne E. Seguin (wayneeseguin@gmail.com) [http://rvm.beginrescueend.com/]

rvm-<html>
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 173 0 173 0 0 451 0 --:--:-- --:--:-- --:--:-- 1218
ERROR:
.tar.gz downloaded does not match it's md5 checksum <html>
<head><title>400 Bad Request</title></head>
<body bgcolor="white">
<center><h1>400 Bad Request</h1></center>
<hr><center>nginx/0.8.54</center>
</body>
./html>
Aborting RVM Installation.

うまくいかなかったので、、
$ rvm get head
$ rvm reload
$ rvm get latest
$ rvm reload
と、一度リポジトリの先端のものにしてから最新のリリースバージョンに戻した。

$ rvm version

rvm 1.6.5 by Wayne E. Seguin (wayneeseguin@gmail.com) [https://rvm.beginrescueend.com/]

おわり。

因果応報のようなもの

今の自分をとりまく環境というのは多かれ少なかれこれまでやってきた自分の振るまい、行いによってもたらされているものだよなー

という話をこの間した。

自分としては実感もしている。いろいろと。

2011年5月7日土曜日

delicious 移行

YouTube の ファウンダーに買われた delicious.
そーしゃるぶっくまーくなぞ使わなくなったのでずっと寝かせておいたのだけど、久しぶりにログイン。

でまぁ、ログインしてみると期待通り移行しますよ画面がでてきたので移行。

dotcloud ベータ利用開始した

中の人と知りあいであれば直接 invitation code が貰えるらしい。けどいないので、

http://www.dotcloud.com/
をみて Join our beta をぽちっとして申請、その後 (僕の場合2日後)、 Your DotCloud beta invitation なる件名で
メールがきて beta ユーザ登録完了。

メールのなかには
can forget about servers and focus on development:

などと書かれていて、 あぁ、(PaaS は)そんなかんじだねーと再認識するなど。

サーバのことは忘れて、「開発」のことだけ考える時間をふやすのが自分としてはよいのかもしれない。今後。


・・・で、アカウントを作成できたので、少しばかり dotcloud コマンドをぺしぺしと実行。アカウント作成後にみられる管理画面に Cheatsheet があるのでそれを叩いてみただけ。

・ dotcloud コマンドをつかえるようにする
easy_install dotcloud や pip install dotcloud で ok
僕の場合は Python 2.7.1 の virtualenv な環境下、後者で入れた。

・create , deploy
$ dotcloud create <appname>
で。test とか hoge とかはすでに利用されがち。↓
% dotcloud create test
error: "test" already exists.
% dotcloud create hoge
error: "hoge" already exists.

なのである程度考えた名前じゃないといつまでたっても already exists になるでしょう。。

とりあえず適当に iktestapp などという名前で create し、
その後 --type python 指定、iktestapp.www という名前でデプロイした。(Cheatsheet そのまま)

http://www.iktestapp.dotcloud.com/
をみて、ちゃんと動いているらしいのを確認。使えるようになるのがすんごく簡単。看板に偽りなしという感じ。

その後、姓や名で create して、名前を抑えておくなどしてみた。
また --type php で デプロイし、<?php phpinfo(); を書いたもの なぞおいてみてどんなか見てみた。
nginx + php-fpm で動いていた。ssh で入ってみても確認。ついつい中身どうなってるのかみてしまうね・・・。

その後は docstutorialに目を通しましょう、と。

2011年5月1日日曜日

DragonFly 2.10

http://www.dragonflybsd.org/release210/

とりあえず入れてみる。例によって VMware 上だけど。
gcc 4.4 になったんだなぁ。

いつからか pkgin てーパッケージが入るようになっていて、これよさげ。
http://pkgin.net/

dotcloud

の存在をしる。
http://www.dotcloud.com/

職業柄、こう書かれていてドキッとした。。
Be a developer, not a sysadmin.
You push the code, we deploy it. We take care of provisioning, configuration, monitoring, backups, scaling and more.

GAE も Heroku も同じだよね。sysadmin いらず、さっさと開発。

dotCloud | CrunchBase Profile
http://www.crunchbase.com/company/dotcloud
ロン・コンウェイジェリー・ヤンが出資してるのだなぁ。

・・・ miyagawa さんが join したんだ! おぉ。。。
http://bulknews.typepad.com/blog/2011/04/joining-dotcloud.html