CentOS5 に Sun JDK + JPackage + tomcat をインストールする

<img src=”http://ec2.images-amazon.com/images/I/51m8phYZbyL.jpg” height=”120px”/ style=”float: left;”><img src=”http://ec2.images-amazon.com/images/I/51uK4ACymiL.jpg” height=”120px”/ style=”float: left;”><img src=”http://ec2.images-amazon.com/images/I/518TeUi%2BOwL.jpg” height=”120px”/ style=”float: left;”><img src=”http://ec2.images-amazon.com/images/I/517gQ0z6rGL.jpg” height=”120px”/ style=”float: left;”><img src=”http://ec2.images-amazon.com/images/I/51GRKN7J9XL.jpg” height=”120px”/ style=”float: left;”>




バージョン違いでインストールすると、ひどい目にあって時間を無駄に費やすことになる。

1. jpackage-utils をインストールする。 <pre class="prettyprint"># yum install jpackage-utils
</pre>2. Sun のサイトから jdk-6u6-linux-i586-rpm.bin をダウンロードする。 jpackage の RPM のバージョンに合わせるためにあえて最新でないものを取得。 3. jpackage の対応するパッケージを取得する。 <pre class="prettyprint"># wget
http://mirrors.dotsrc.org/jpackage/1.7/generic/RPMS.non-free/java-1.6.0-sun-compat-1.6.0.06-1jpp.i586.rpm
</pre>4. JDK をインストールする。 <pre class="prettyprint"># sh ./jdk-6u6-linux-i586-rpm.bin
</pre>5. JPackage の RPM をインストールする。 <pre class="prettyprint"># rpm -ivh java-1.6.0-sun-compat-1.6.0.06-1jpp.i586.rpm
</pre>6. Tomcat5.5 をインストールする。(これはついで) <pre class="prettyprint"># yum install tomcat5
</pre>

xenconsole: Could not read tty from store: No such file or directory

xen の console につなぐときに、このエラーメッセージが出るときは、
<pre class="prettyprint">xenconsole: Could not read tty from store: No such file or directory
</pre>

xenconsoled を立ち上げればよい。

でも、何故落ちたのだろう??? そっちの方が気になる。

<blockquote>xenconsole: Could not read tty from store: No such file or directoryでハマりました
http://d.hatena.ne.jp/kgbu/20080523/1211555660
</blockquote>

関連記事
<blockquote><ul><li>Xen の domainU のディスクを動的に増設する</li>
</ul>
</blockquote>

ECをはじめる

最近、ECの立ち上げに関わっている。



<p>EC を立ち上げるには、Yahooや楽天のようなモールに出店するか、自社サイトを作るかのどちらかになる。自社サイトの場合は、スクラッチ開発するか、EC-Cube や Magento のようなパッケージを使うか、ASP を使うかのいずれを選ぶことになる。HTML 1ページとメールフォームだけというシンプルなのもスクラッチの箱に放り込んでしまおう。 </p>

<p>オープンソースECソフトなら、いまは EC-Cube が一番人気だろう。日本で開発されていて、日本語の情報も豊富だ。経験済みの制作会社も多いので、自前で立ち上げずに外注する場合にも困らない。機能的に面白そうなのはMagento。まだ日本語の情報は少なく、経験者も少なく、従って製作コストも高くつくだろうが、やはり新しいものほど高機能で洗練されている。</p>

<p>ECで意外と落とし穴なのは定期購入の実現。これはモールでも、パッケージでも、ASPでも対応していないところが多い。楽天が2008年1月から開始したのが大手では唯一の対応。EC-Cube それ自身は対応していないけれども、EC-Cube に定期購入パッチを当てて商売にしている会社はある。それ以外では、Magento も主要ASPも、現時点では対応していない。</p>

<p>いろいろ試したけれど、お手軽に始めるなら ASP が一番いい。モールのような出店審査もないし、機能的には充分そろっている。そして何よりも安い。月額料金5000円も払えば使える。ゼロ円というプランを用意しているASPもある。個人事業主でもクレジットカード決済やコンビニ払いが可能。</p>

<p>それに、自社サイトを立ち上げて、自社DBにクレジットカード番号なんか持ちたくない。住所氏名などの個人情報漏えいも事業存続を脅かす充分に怖い事故だけど、これは商品を届けるのに避けては通れないので仕方がない。クレジットカード番号漏えいは、カード会社までステークホルダーに加わってしまうので、その後の対応が輪をかけて面倒。</p>

<p>今年クレジットカード番号漏えいのあった楽器通販会社サウンドハウスの場合は、調査に1000万円かけてカード決済を再開しようとしたら、それでは足りないとカード会社からいわれて、さらに1000万円をかけて求められる調査と再発防止策を実施した。ハードを含めると、総額6000万円を費やした。できることなら、カード番号は持ちたくないものだ。</p>

<p>クレジットカード決済代行会社の中でも、たとえば GMO Payment Gateway などは、アプリケーション側でカード番号を持たなくてもよく、かつ顧客がカード番号を入力するのは一度だけでよいというサービスを提供している。要するに、アプリケーション固有のユーザーIDを決済会社側でカードホルダーに紐づけてくれるサービスだ。自社ECサイトをやる場合は、こういうサービスを活用したい。</p>

<p>決済会社ごとに、できることとできないことが異なる。GMO Payment Gateway はクレジットカード決済に特化していて、クレジットカードだけを扱うならとても使いやすい。テスト環境も完備されていて、開発者側にも嬉しい。</p>

<p>同じくGMO系のEpsilonではコンビニ決済もできるが、クレジットカード関しては Payment Gateway の方に軍配があがるように見受けられる。</p>

<p>銀行系の決済会社は、クレジットカード決済は弱いけれども、銀行引き落としには強い。ただ、印鑑を押した書類の郵送が必要な銀行の月次引き落としは、ECには、もっというならば時代の要請には合わない。</p>

<p>ネットプロテクションズという会社のサービスは面白い。「NP後払い」という文字を見たことがあるなら、それがネットプロテクションズのサービスだ。コンビニ、銀行、ゆうちょ銀行などで、後払い決済を実現してくれる。つまり、注文が入ったら、入金確認なしで商品を発送してもよい。もちろんネットプロテクションズによる与信審査はあるけれども、自動審査なのでたいていの場合は数分程度で審査が終わる。自動審査に通らなかった場合でも、人間系による審査の結果が数時間で返ってくる。</p>

<p>どの決済代行会社も一長一短。パーフェクトな会社は存在しない。それぞれ自社の強み弱みを持っている。決済手数料や審査の厳しさ、入金サイト、それに決済会社自身の財務内容も異なる。</p>

<p>自分が実現したいことがその決済会社で実現できるのかをよく考えないと、やりたいことができないということが契約後に判明して慌てることになる。そんな自分も、人のことは言えない。。。</p>

Amazon EC2, Elastic Block Store

事情により新しいアカウントを作って Amazon EC2 を再出発。



Amazon EC2 で CentOS 5 i386 Base AMI (ami-0459bc6d) を使って自分の AMI を作るときには、いつもこのエラーが起こる。そういえば何か起こる気がするなと思いつつも、エラーメッセージを見るその瞬間までは、何が起こるのかを忘れている。



<pre class="prettyprint">[EC2]
-bash-3.1# ec2-bundle-vol -d /mnt -k /mnt/pk-xxx.pem -c
/mnt/cert-xxx.pem -u xxx -r i386 -p test2
Copying / into the image file /mnt/test2…
Excluding:
/sys
/proc
/dev/pts
/proc/sys/fs/binfmt_misc
/dev
/media
/mnt
/proc
/sys
/mnt/test2
/mnt/img-mnt
1+0 records in
1+0 records out
1048576 bytes (1.0 MB) copied, 0.003021 seconds, 347 MB/s
mke2fs 1.39 (29-May-2006)
mount: Could not find any loop device. Maybe this kernel does not know
about the loop device? (If so, recompile or `modprobe loop’.)
execution failed: “mount -o loop /mnt/test2 /mnt/img-mnt”
ec2-bundle-vol failed.
</pre>

そのたびに、どうするんだっけと思ってググるのだが、今日見たら注意書きがあった。



<blockquote>Edited to add:

Run yum -y upgrade to upgrade to CentOS 5.2.

Run depmod -a; modprobe loop before rebundling image.

</blockquote>

なんだー。それだけでいいのか。



yum -y upgrade は10分ほどで完了。depmod -a; modprobe loop

の後に念のために reboot してから bundling 開始。



<pre class="prettyprint">[EC2]
-bash-3.2# rm -rf /mnt/img-mnt /mnt/test2
-bash-3.1# ec2-bundle-vol -d /mnt -k /mnt/pk-xxx.pem -c
/mnt/cert-xxx.pem -u xxx -r i386 -p test2
Copying / into the image file /mnt/test2…
Excluding:
/sys
/proc
/dev/pts
/proc/sys/fs/binfmt_misc
/dev
/media
/mnt
/proc
/sys
/mnt/test2
/mnt/img-mnt
1+0 records in
1+0 records out
1048576 bytes (1.0 MB) copied, 0.002869 seconds, 365 MB/s
mke2fs 1.39 (29-May-2006)
Bundling image file…
(略)
Created test2.part.48
Created test2.part.49
Created test2.part.50
Generating digests for each part…
Digests generated.
Unable to read instance meta-data for ancestor-ami-ids
Unable to read instance meta-data for kernel-id
Unable to read instance meta-data for ramdisk-id
Unable to read instance meta-data for product-codes
Creating bundle manifest…
ec2-bundle-vol complete.
</pre>

これも10分ほどで完了。さて、Amazon S3 にアップロードしておこう。ん、新しいアカウントだから bucket

から作らないといけないな。ruby で作ることにする。



<pre class="prettyprint">[Local]
-bash-3.2$ sudo gem i aws-s3
Password:
Successfully installed xml-simple-1.0.11
Successfully installed builder-2.1.2
Successfully installed mime-types-1.15
Successfully installed aws-s3-0.5.1
4 gems installed
Installing ri documentation for builder-2.1.2…
ERROR: While generating documentation for builder-2.1.2
… MESSAGE: Unhandled special: Special: type=17, text=”
… RDOC args: –ri –op /usr/lib/ruby/gems/1.8/doc/builder-2.1.2/ri
–title Builder – Easy XML Building –main README –line-numbers
–quiet lib CHANGES Rakefile README doc/releases/builder-1.2.4.rdoc
doc/releases/builder-2.0.0.rdoc doc/releases/builder-2.1.1.rdoc
(continuing with the rest of the installation)
Installing ri documentation for mime-types-1.15…
Installing ri documentation for aws-s3-0.5.1…
Installing RDoc documentation for builder-2.1.2…
Installing RDoc documentation for mime-types-1.15…
Installing RDoc documentation for aws-s3-0.5.1…
</pre>

なんかエラーが出ているけど無視。bucket を作成する。



<pre class="prettyprint">[Local]
-bash-3.2$ s3sh
» AWS::S3::Base.establish_connection!(
?> :access_key_id => ‘xxx’,
?> :secret_access_key => ‘xxx’
» )
=> #<AWS::S3::Connection:0xb77764d0 @access_key_id=”xxx”,
@options={:persistent=>false, :server=>”s3.amazonaws.com”,
:access_key_id=>”xxx”, :secret_access_key=>”xxx”, :port=>80},
@http=#<Net::HTTP s3.amazonaws.com:80 open=false>,
@secret_access_key=”xxx”>
» Bucket.create(‘mybucket’)
=> true
</pre>

S3 にアップロードする。



<pre class="prettyprint">[EC2]
-bash-3.2# ec2-upload-bundle -b mybucket/ami/test2 -m /mnt/test2.manifest.xml -a [Your Access Key ID] -s [Your Secret Access Key] –retry
Setting bucket ACL to allow EC2 read access …
Uploading bundled image parts to
https://s3.amazonaws.com:443/mybucket/ami/test2 …
Uploaded test2.part.00 to
https://s3.amazonaws.com:443/mybucket/ami/test2/test2.part.00
Uploaded test2.part.01 to
https://s3.amazonaws.com:443/mybucket/ami/test2/test2.part.01
Uploaded test2.part.02 to
https://s3.amazonaws.com:443/mybucket/ami/test2/test2.part.02
Uploaded test2.part.03 to
https://s3.amazonaws.com:443/mybucket/ami/test2/test2.part.03
(略)
Uploaded test2.part.48 to
https://s3.amazonaws.com:443/mybucket/ami/test2/test2.part.48
Uploaded test2.part.49 to
https://s3.amazonaws.com:443/mybucket/ami/test2/test2.part.49
Uploaded test2.part.50 to
https://s3.amazonaws.com:443/mybucket/ami/test2/test2.part.50
Uploading manifest …
Uploaded manifest to
https://s3.amazonaws.com:443/mybucket/ami/test2/test2.manifest.xml
Bundle upload completed.
</pre>

AMI を登録して、今動いているインスタンスを止め、自分で登録した AMI を動かす。



<pre class="prettyprint">[Local]
$ ec2-register mybucket/ami/test2/test2.manifest.xml
IMAGE ami-a2799dcb

$ ec2-terminate-instances i-7bdf6312
INSTANCE i-7bdf6312 running shutting-down

$ ec2-run-instances ami-a2799dcb
RESERVATION r-4c822125 987518932573 default
INSTANCE i-e5d66a8c ami-a2799dcb
pending m1.small 2008-12-05T05:06:36+0000 us-east-1a
</pre>

MySQLのデータ格納場所として、Elastic Block Store を追加する。データ量はそんなに増えないと思うから1GBだけ。



<pre class="prettyprint">[Local]
$ ec2-create-volume –size 1 -z us-east-1a
VOLUME vol-538c683a 1 us-east-1a creating
2008-12-05T06:37:22+0000

$ ec2-describe-volumes vol-538c683a
VOLUME vol-538c683a 1 us-east-1a available
2008-12-05T06:37:22+0000

$ ec2-attach-volume vol-538c683a -i i-9dd66af4 -d /dev/sdh
ATTACHMENT vol-538c683a i-9dd66af4 /dev/sdh
attaching 2008-12-05T06:38:17+0000

$ ec2-describe-volumes
VOLUME vol-538c683a 1 us-east-1a in-use
2008-12-05T06:37:22+0000
ATTACHMENT vol-538c683a i-9dd66af4 /dev/sdh
attached 2008-12-05T06:38:17+0000
</pre>

ファイルシステムを作成してマウントする。



<pre class="prettyprint">[EC2]
-bash-3.2# ls -al /dev/sd*
brw-r—– 1 root disk 8, 1 Dec 5 00:15 /dev/sda1
brw-r—– 1 root disk 8, 2 Dec 5 00:15 /dev/sda2
brw-r—– 1 root disk 8, 3 Dec 5 00:15 /dev/sda3
brw-r—– 1 root disk 8, 112 Dec 5 01:50 /dev/sdh

-bash-3.2# mkfs -t ext3 /dev/sdh
mke2fs 1.39 (29-May-2006)
/dev/sdh is entire device, not just one partition!
Proceed anyway? (y,n) y
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
131072 inodes, 262144 blocks
13107 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=268435456
8 block groups
32768 blocks per group, 32768 fragments per group
16384 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376

Writing inode tables: …done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 20 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.

-bash-3.2# mount /dev/sdh /vol/vol1
</pre>

既存の環境からデータをコピーしてディスク容量チェックをしたら、すでに EBS を 73% も消費していることがわかって、ちょっとびっくり。1GB で月に 10セント(約10円)なのだから、けちけちせずに10GBくらい確保しておけばよかった。でも、足りなくなってもすぐに追加とか交換ができるから問題なし。



<pre class="prettyprint">[EC2]
-bash-3.2# df -k
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 10321208 4724484 5072436 49% /
none 870472 0 870472 0% /dev/shm
/dev/sda2 153899044 192072 145889348 1% /mnt
/dev/sdh 1032088 708372 271288 73% /vol/vol1
</pre>

Typealyzer - ブログを分析して性格判定


ブログのURLを入力すると、以下のように分析してくれる。
http://3.1415.jp/sites/default/files/blogger_importer/11/this-blog-is-duty-fulfiller.html



<p>
こちらがそのサイト。
http://www.typealyzer.com/
</p>

<p>
当然ながらというか、残念ながら、日本語には対応していない。このブログを試したらタイ語には対応してません、といわれた。
<blockquote>
Detected language Thai. The only supported languages are English and Swedish. But stay tuned, we are expanding.
</blockquote>
</p>

<p>では、自分で書いた英文を読み込ませてみよう。</p>

<img style=”display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 158px;” src=”http://3.1415.jp/sites/default/files/blogger_importer/s320/img1.PNG” border=”0” alt=”“id=”BLOGGER_PHOTO_ID_5274297428244425826” />

<img style=”display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 231px;” src=”http://3.1415.jp/sites/default/files/blogger_importer/s320/img2.PNG” border=”0” alt=”“id=”BLOGGER_PHOTO_ID_5274297528357204738” />

<blockquote>
<p>ESTP型 - 実行家</p>

<p>積極的で陽気なタイプです。周りの人や物事を調和させ、エネルギッシュでよく喋り、冗談をいい、外で身体を動かすことが好きなタイプです。</p>

<p>注意力と集中力が要求される、身体を動かす仕事をしているときに最も喜びを感じます。非常に衝動的で、誰かについていくよりも自分で何かを始めることを強く望みます。じっと座っていることや、静かにしていることができません。</p>
</blockquote>

<p>ぜんぜん違うじゃん。。。</p>


<p>言語判定は、自動収集した training data を language classifier に読み込ませて作っている。日本語の training data は無いのだろう。また、分析対象のテキストは与えられたURLに載っているもののみで、そこから先のクロールはしていない。</p>

<p>集合知と機械学習を使って文章スタイルから性格判定するという発想が面白い。</p>

<p>ところで、このサイトは uClassify というフリーの text classfier ウェブサービスを使っている。

http://www.uclassify.com/</p>

<p>このサービスが日本語形態素解析に対応して、training data として日本語ブログを与えれば、日本語ブログの性格判定もできるはず。training data の分類は手作業になるのだろう。</p>

<p>uClassify を使ったサービスは他にも存在する。性別判定サービスがそのひとつ。

http://www.genderanalyzer.com/</p>

<p>先ほどの文章を GenderAnalyzer に読み込ませてみると、</p>

<blockquote>
Results



We think http://xxx.xxx.xxx/ is written by a woman (68%).
</blockquote>

<p>68%の確率で女性だそう。こちらのサービスでは、現時点で4000のブログを training data として用いている。</p>