2010-09-10 15:42:35

もっと早く知りたかったプログラミングのコツ

テーマ:システム関連
ashdotにTed Dziuba 氏の「もっと早く知りたかったプログラミングのコツ」が載っていた。
http://slashdot.jp/askslashdot/article.pl?sid=10/09/08/2228201

一部しか訳されてなかったので、訳してみようと思います(結構いい加減ですが。。)。まずは、最初の半分です。



---------------
 スタートアップ(ベンチャー企業)でのプログラミングは、大企業でのプログラミングとはずいぶん違う。スタートアップでは、あなたは開発だけを行うという事はなく、大半をシステム管理者として過ごす事になる。私は3年間スタートアップで働いているが、荒削りな知識で何とかするよりも、理にかなったやり方を身につけるべきだと痛感させられた。

 これらのことは初めから知っていればよかったし、少なくとも意地を張らずに学べばよかったことです。


 物事を複雑にしすぎる事を避けるには

 大半のソフトウエアエンジニアのように、私も技術的過ぎる傾向があります。その傾向を対処するためにも、私は二つのシンプルなルールを守るようにしています。

1.もしあなたが2つ以上のパーシステントなデータストアに接続するプログラムを書いているなら、それは複雑過ぎます。

 そして、ハードディスクはパーシステントなデータストアとしてカウントします。これはある意味、シングルインプット、シングルアウトプットである小さなツールの集合体であるUNIXの再解釈です。たくさんの異なるパーシステントなストアーを介して、状態をトラッキングしたり、失敗ケースをハンドリングするのは、ひとつのプログラムが行うには重すぎます。

2.もしLinuxができることであれば、そちらに任せる

 xargsがあなたの問題を解決できないという明確な理由がないかぎりHadoopのMapReduceは使ってはいけません。Linuxのアドバイザリーファイルロッキングシステムがきちんと動いているときに、独自のロックサービスを構築してはいけません。コマンドラインのイメージマジックが動かないと証明されるまでPILでイメージプロセッシングを行ってはいけません。最近のLinuxディストリビューションはたくさんの機能があり、たくさんの難しい問題がすでに解決済みです。あなたはどこを見ればよいか知るだけでよいのです。


パラレル処理は『自分がやりたい時』にではなく、『必要に迫られた時』に行う

それは明白、しかし自分にはっきりと言い聞かせないといけないときがあります。もし物理的なマシンがボトルネックじゃなかったら、稼動をいくつかの物理的なマシンに分割しません。CPUバウンドジョブをパラレル処理しなければならないときはとても明白で、I/Oバウンドスタッフの為に、もっと深く計測をしなければなりません。

例えば、もしwebクロールをしたく、インターネットへのパイプがあまりない場合、たくさんのサーバを使用するのは悪くないことです。この人は私にそういう考え方を教えてくれました。彼はクルージャーで大規模HTTPフェッチングを行っている人です。彼はキューイングシリネスによるパラレル処理について話します。しかし、一つのマシン上のパイプにどのくらいのデータを移しているかは話しません。もしインターネットに対して100Mbitコネクションがあれば、あなたのフェッチャーは700kbitくらい使用しているとしたら、なぜあなたのフェッチャーが駄目なのかわかるのです。
(私はミロのポリフィックシステム管理者とそのポストについて話していました。著者はとてもエラボレイト トロールかただのrun-of-the-mill idiotのどちらかでした。

珍味は(tidbit)は、データストレージに行くことです。Cassandraはすばらしいものですが、あなたには必要がないと保障できます。マルチテラバイトドライブは安く、歩優れは品質がしっかりしていると知られています。それはリスクの問題だけではありません。


2010-09-10 15:41:09

Request Trackerのインストール

テーマ:システム関連
久々に、システムを構築してみましたよ。


CentOS5にRequest Trackerをインストールしてみた。


Perl モジュール、開発環境、ライブラリなどをインストール。

# yum install perl-*

# yum install ccp gcc* autoconf* automake* libtool m4

# yum install gd gd-devel libpng libpng-devel libjpeg libjpeg-devel freetype freetype-devel

RT のインストール

$ su -
# wget http://download.bestpractical.com/pub/rt/release/rt-3.8.8.tar.gz
# tar xzf rt-3.8.8.tar.gz
# cd rt-3.8.8
# ./configure

make testdeps コマンドを実行し、Perl モジュールがインストール済みかどうかチェックする。

# make testdeps
/usr/local/bin/perl ./sbin/rt-test-dependencies --verbose --with-mysql --with-fastcgi
perl:
>=5.8.3(5.10.0) ...found
users:
rt group (apache) ...found
bin owner (root) ...found
libs owner (root) ...found
libs group (bin) ...found
web owner (apache) ...found
web group (apache) ...found
CLI dependencies:
Term::ReadKey ...found
Getopt::Long >= 2.24 ...found
HTTP::Request::Common ...found
Term::ReadLine ...found
Text::ParseWords ...found
LWP ...found
CORE dependencies:
Class::ReturnValue ...MISSING
以下省略

...MISSING になっているモジュールをインストールしていく。

CPAN を使い Perl モジュールの不足分をインストール

# perl -MCPAN -e 'install モジュール名'

RT のソースコードのあるディレクトリに戻って、再度 make testdeps する。

# make testdeps
...
Everything was found.

と表示されれば、必要なモジュールが全てそろっているので、make install する。

# make install
...
Congratulations. RT has been installed.


You must now configure RT by editing /opt/rt3/etc/RT_SiteConfig.pm.

(You will definitely need to set RT's database password in
/opt/rt3/etc/RT_SiteConfig.pm before continuing. Not doing so could be
very dangerous. Note that you do not have to manually add a
database user or set up a database for RT. These actions will be
taken care of in the next step.)

After that, you need to initialize RT's database by running
'make initialize-database'

/opt/rt3/ 以下に RT がインストールされるので、
データベースを作成する前に、RT の設定内容を RT_SiteConfig.pm に記述する

# Base Configuration
Set($rtname, 'rt.example.com');
Set($Organization , "example.com");
Set($MinimumPasswordLength , "5");
Set($Timezone , 'US/Eastern');

# Database Configuration
Set($DatabaseType , 'mysql');
Set($DatabaseHost , 'MySQLサーバアドレス');
Set($DatabasePort , '');
Set($DatabaseUser , 'データベースユーザ名');
Set($DatabasePassword , 'データベースユーザのパスワード');
Set($DatabaseName , 'データベース名');
Set($DatabaseRequireSSL , undef);

# Web interface configuration
Set($WebBaseURL , "http://rt.example.com:$WebPort");

1;

データベースの初期化

RT_SiteConfig.pm の記述に従って、データベースを初期化する

# make initialize-database


Apacheの設定

/etc/httpd/conf.d/perl.confに下記の設定を追加。

Listen ip_of_the_rt.example.com:80
<VirtualHost ip_of_the_rt.example.com:80>
ServerName rt.example.com
ServerAdmin Email.Address@example.com


DocumentRoot /opt/rt3/share/html

AddDefaultCharset UTF-8
PerlRequire /opt/rt3/bin/webmux.pl


<Directory /opt/rt3/share/html>
Order allow,deny
Allow from all

SetHandler perl-script
PerlResponseHandler RT::Mason
</Directory>
</VirtualHost>


Apacheを起動する。

初期ユーザーネームとパスワードでブラウザでログインする。
ユーザネーム: root
パスワード: password
2010-09-10 15:38:47

ご無沙汰しています。

テーマ:フォースクーナ
はっっと気がついたら、前回ブログを更新してから、早1年なんですね。

9月より弊社は第9期を迎えております。

毎年毎年、こんなに会社が続くなんて思わなかったなぁなんて思いながら
しみじみしております。ニコニコ


これから、ますますがんばっていきますので、
今後ともどうかよろしくお願いします。

Amebaおすすめキーワード