<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
   <title>三田ブログ</title>
   <link rel="alternate" type="text/html" href="http://blog.crm.co.jp/" />
   <link rel="self" type="application/atom+xml" href="http://blog.crm.co.jp/atom.xml" />
   <id>tag:blog.crm.co.jp,2010://1</id>
   <updated>2010-09-02T13:55:52Z</updated>
   <subtitle>JIROの開発者日記です。</subtitle>
   <generator uri="http://www.sixapart.com/movabletype/">Movable Type 3.3-ja</generator>

<entry>
   <title>OpenOffice.org のクイック起動とファイルのロック</title>
   <link rel="alternate" type="text/html" href="http://blog.crm.co.jp/2010/09/openofficeorg.html" />
   <id>tag:blog.crm.co.jp,2010://1.220</id>
   
   <published>2010-09-02T13:50:07Z</published>
   <updated>2010-09-02T13:55:52Z</updated>
   
   <summary> Excel のファイルは OpenOffice.org でも開くことができるが...</summary>
   <author>
      <name>mai</name>
      <uri>http://blog.crm.co.jp/</uri>
   </author>
         <category term="Tips" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://blog.crm.co.jp/">
      <![CDATA[<p>
Excel のファイルは OpenOffice.org でも開くことができるが、
ブラウザからダウンロードしたファイルを保存した後 OpenOffice.org で開いて、
一度それを閉じた後、
もう一度同じファイル名でファイルを保存しようとすると、
ロックがかかっていて書き込みに失敗することがある。
</p>

<p>
もし OpenOffice.org のクイック起動が実行中なら、
それを終了させると書き込めるようになることがある。
クイック起動が、前回開いたファイルを覚えているらしい。
</p>
]]>
      
   </content>
</entry>
<entry>
   <title>以上と未満で囲う意味</title>
   <link rel="alternate" type="text/html" href="http://blog.crm.co.jp/2010/09/post_21.html" />
   <id>tag:blog.crm.co.jp,2010://1.219</id>
   
   <published>2010-09-01T14:09:34Z</published>
   <updated>2010-09-01T14:16:34Z</updated>
   
   <summary> 昨日紹介した、TermRangeQuery や、NumericRangeQue...</summary>
   <author>
      <name>mai</name>
      <uri>http://blog.crm.co.jp/</uri>
   </author>
         <category term="Tips" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://blog.crm.co.jp/">
      <![CDATA[<p>
昨日紹介した、TermRangeQuery や、NumericRangeQuery には、範囲の両端を含むかどうかを指定するための引数が用意されている。
</p>

<pre>
public TermRangeQuery(String field,
                      String lowerTerm,
                      String upperTerm,
                      boolean includeLower,
                      boolean includeUpper)
</pre>

<p>
includeLower と includeUpper というのがそれだ。
true にすれば端を含めて処理するし、
false にすれば端は含まないことになる。
</p>

<p>
昨日紹介したコードの中で、
ここの指定が、trueとfalse になっていたのに気づいたかもしれない。
最小値以上、最大値未満、という範囲にしたのである。
そのようにすることで、範囲をくまなくカバーするのが簡単になる。
</p>

<p>
例えば0以上10未満、10以上20未満、20以上30未満、という3つの範囲を重ねると、
ちょうど0以上30未満になる。
実数で考えても、
重なりも飛びもない。
両方とも含むようにすると、少しややこしいことになる。
</p>

<p>
日付の範囲を指定するときも、
00:00:00 以後、翌日の 00.00.00 まで、ただし終わりの時間は含まない、
というように指定することで、うまく1日をカバーできる。
両端を含むようにすると、
終りを 23:59:59 のようにしなければ最後が重なってしまうし、
59秒という指定にすると、最後の1秒のちょうど間になったらどうするか、
という余計な心配が必要になってしまう。
</p>
]]>
      
   </content>
</entry>
<entry>
   <title>Lucene の TermRangeQuery でハマる</title>
   <link rel="alternate" type="text/html" href="http://blog.crm.co.jp/2010/08/lucene_termrangequery.html" />
   <id>tag:blog.crm.co.jp,2010://1.218</id>
   
   <published>2010-08-31T14:00:22Z</published>
   <updated>2010-08-31T14:09:44Z</updated>
   
   <summary> Lucene は Apache がオープンソースで公表している検索エンジンで、...</summary>
   <author>
      <name>mai</name>
      <uri>http://blog.crm.co.jp/</uri>
   </author>
         <category term="Java" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://blog.crm.co.jp/">
      <![CDATA[<p>
Lucene は Apache がオープンソースで公表している検索エンジンで、有名なので説明はまたの機会にするとして、Lucene を使って範囲指定の絞込みをするときに、TermRangeQuery というクラスを使うのだが、これでちょっとハマってしまったという話。
</p>

<p>
IDが振られているデータがインデックス化されているとして、
次のようにしてクエリのインスタンスを作った。
</p>

<pre>
TermRangeQuery termRangeQuery = new TermRangeQuery(
	DocumentFactory.FIELD_ID, String.valueOf(fromId),
	String.valueOf(toId), true, false);
</pre>

<p>
ID を範囲で絞ろうというのである。
値は fromId 以上、toId 未満。
最後の true、false は、以上と未満の指定で、最後の値は含まないようにしておく。
</p>

<p>
これで問題なさそうだが、実際にやってみたらうまく ID を拾えない。
トレースしてみて原因が分かった。
TermRangeQuery が探すのは文字列である。
文字列の順序は数値とは違うのではないか。
20000 と 3 はどちらが大きいか、という話である。
</p>

<p>
ということで、こういう場合は NumericRangeQuery を使わなければならない。
</p>

<pre>
NumericRangeQuery<Integer> rangeQuery = NumericRangeQuery.newIntRange(
	DocumentFactory.FIELD_ID,
	Integer.valueOf(fromId), Integer.valueOf(toId),
	true, false);
</pre>

<p>
これで期待通りの範囲の ID を拾い出すことができた。
</p>
]]>
      
   </content>
</entry>
<entry>
   <title>shell でワイルドカードを使う</title>
   <link rel="alternate" type="text/html" href="http://blog.crm.co.jp/2010/08/shell.html" />
   <id>tag:blog.crm.co.jp,2010://1.217</id>
   
   <published>2010-08-30T13:41:25Z</published>
   <updated>2010-08-30T13:49:02Z</updated>
   
   <summary> Linux に標準的に使われている bash、 あるいは csh 等のシェルは...</summary>
   <author>
      <name>mai</name>
      <uri>http://blog.crm.co.jp/</uri>
   </author>
         <category term="Tips" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://blog.crm.co.jp/">
      <![CDATA[<p>
Linux に標準的に使われている bash、
あるいは csh 等のシェルは、ワイルドカードが使えるようになっている。
仕組みは簡単で、
カレントディレクトリに、
</p>

<pre>
file1
file2
file3
</pre>

<p>
このようにファイルがあったときに、
</p>

<pre>
cat file*
</pre>

<p>
と入力すれば、シェルが「*」を展開してくれて、
</p>

<pre>
cat file1 file2 file3
</pre>

<p>
と入力したのと同じになる。
実際にどれだけマッチするかを知りたい場合は、
</p>

<pre>
echo file*
</pre>

<p>
とでもすればいい。
</p>

<p>
ファイル名を系統的に付けておけば、
ワイルドカードは便利に使える。
例えば 2010-08-01.log
のようなファイル名でログを作っておけば、
8月のログは、
2010-08-*.log
で全部参照できる。
</p>

<p>
カレントディレクトリに、長いファイル名のファイルがあるときに、
他にマッチしないようにワイルドカードを使うと、入力の手間が省ける。
例えば、
</p>

<pre>
2010-08-01-jiro-core.tar.gz
</pre>

<p>
のようなファイル名があって、そこにある gz ファイルが1つだけなら、
このファイル名を入力すべきところで、
</p>

<pre>
*.gz
</pre>

<p>
を使うことができるので、大幅に入力を短縮することができる。
ただし、うっかり予期していないものまでマッチさせないように注意が必要だ。
</p>
]]>
      
   </content>
</entry>
<entry>
   <title>AdobeReader 9.3.4 に更新</title>
   <link rel="alternate" type="text/html" href="http://blog.crm.co.jp/2010/08/adobereader_934.html" />
   <id>tag:blog.crm.co.jp,2010://1.216</id>
   
   <published>2010-08-27T12:21:46Z</published>
   <updated>2010-08-27T12:28:48Z</updated>
   
   <summary> Adobe Reader 9.3.3 も、結構危ないセキュリティの問題があった...</summary>
   <author>
      <name>mai</name>
      <uri>http://blog.crm.co.jp/</uri>
   </author>
         <category term="日記" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://blog.crm.co.jp/">
      <![CDATA[<p>
Adobe Reader 9.3.3 も、結構危ないセキュリティの問題があったために公開されたバージョンなのだが、
これにもかなり危険な脆弱性があって、
8月19日にこの問題に対応した 9.3.4 が公開されている。
</p>

<p>
ITPro の記事にも PDF を開いただけでアウトみたいなことが書いてある。
9.3.3 を使っていれば、Adobe Reader 9 を開いて、
「アップデートの有無をチェック」を実行するだけで 9.3.4 に更新することができるが、
更新結果を反映するには Windows の再起動が必要になる。
私の場合、何日も pc を起動したままで、作業中のウィンドウが多数ある乱雑な状態になっているから、
再起動というのはあまりやりたくないが、
セキュリティ対策だからこれは仕方ない。
</p>

<p>
<a href="http://itpro.nikkeibp.co.jp/article/NEWS/20100823/351319/">Adobe ReaderとAcrobatに危険な脆弱性、すぐにアップデートを </a>
</p>

<p>
<a href="http://www.adobe.com/support/security/bulletins/apsb10-17.html">Security updates available for Adobe Reader and Acrobat </a>
</p>
]]>
      
   </content>
</entry>
<entry>
   <title>ログを grep で検索</title>
   <link rel="alternate" type="text/html" href="http://blog.crm.co.jp/2010/08/_grep.html" />
   <id>tag:blog.crm.co.jp,2010://1.215</id>
   
   <published>2010-08-26T11:04:03Z</published>
   <updated>2010-08-26T11:14:43Z</updated>
   
   <summary> JIRO は Linux で動作させることが多いので、Linux の shel...</summary>
   <author>
      <name>mai</name>
      <uri>http://blog.crm.co.jp/</uri>
   </author>
         <category term="Tips" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://blog.crm.co.jp/">
      <![CDATA[<p>
JIRO は Linux で動作させることが多いので、Linux の shell 上でいろいろできると便利なことがよくある。
そういう小技で、ちょっとしたことを紹介したい。
なお、そんな当たり前のことは知っているという方もいらっしゃると思うが、
見逃してください。
</p>

<p>
ログというのは、
JIRO の中で何が起こっているかをテキストファイルに順次書き出したもので、
JIRO ではこれを apache の log4j を使って生成している。
</p>

<pre>
&lt;appender name=&quot;file&quot; class=&quot;org.apache.log4j.DailyRollingFileAppender&quot;&gt;
	&lt;param name=&quot;File&quot; value=&quot;/usr/local/jiro/logs/jiro_log4j.log&quot; /&gt;
	&lt;param name=&quot;Encoding&quot; value=&quot;UTF-8&quot; /&gt;
	&lt;param name=&quot;bufferedIO&quot; value=&quot;false&quot; /&gt;
	&lt;param name=&quot;bufferSize&quot; value=&quot;8192&quot; /&gt;
	&lt;layout class=&quot;org.apache.log4j.PatternLayout&quot;&gt;
		&lt;param name=&quot;ConversionPattern&quot; value=&quot;%d{yyyy-MM-dd HH:mm:ss,SSS} %5p %C:%L - %m%n&quot; /&gt;
	&lt;/layout&gt;
&lt;/appender&gt;
</pre>

<p>
このように、
DailyRollingFileAppender を指定して毎日ファイルを分けているので、
長期間稼動させていると、ファイルがどんどん増える。
そこで、何か Exception を検索したいというときに使うのが grep だ。
ログファイルがたくさん入っているディレクトリに cd して、
次のように2段にして使う。
</p>

<pre>
$ grep jp.co.crm.jiro.cron.DailyJobBean jiro_log4j.log.2010* | grep ERROR
</pre>

<p>
この例だと、まず DailyJobBean というクラスで 今年生成したログを grep して、
さらに ERROR で grep する、という仕組みである。
単純だけど、これは結構使える。
</p>
]]>
      
   </content>
</entry>
<entry>
   <title>CentOS に redmine 1.0.0 RC をインストールする (終)</title>
   <link rel="alternate" type="text/html" href="http://blog.crm.co.jp/2010/08/centos_redmine_100_rc_8.html" />
   <id>tag:blog.crm.co.jp,2010://1.213</id>
   
   <published>2010-08-25T03:16:14Z</published>
   <updated>2010-08-25T03:19:29Z</updated>
   
   <summary> これでインストール終了のはずなので、 とりあえず起動してみる。 $ ruby ...</summary>
   <author>
      <name>mai</name>
      <uri>http://blog.crm.co.jp/</uri>
   </author>
         <category term="技術メモ" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://blog.crm.co.jp/">
      <![CDATA[<p>
これでインストール終了のはずなので、
とりあえず起動してみる。
</p>

<pre>
$ ruby script/server webrick -e production
=> Booting WEBrick
=> Rails 2.3.5 application starting on http://0.0.0.0:3000
./script/../config/../vendor/rails/railties/lib/rails/gem_dependency.rb:119:Warning: Gem::Dependency#version_requirements is deprecated and will be removed on or after August 2010.  Use #requirement
Rails Error: Unable to access log file. Please ensure that /usr/local/redmine/redmine-1.0.0/log/production.log exists and is chmod 0666. The log level has been raised to WARN and the output directed to STDERR until the problem is fixed.
DEPRECATION WARNING: Please update config/database.yml to use 'database' instead of 'dbfile'. (called from parse_sqlite_config! at /usr/local/redmine/redmine-1.0.0/vendor/rails/activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb:35)
=> Call with -d to detach
=> Ctrl-C to shutdown server
[2010-07-22 22:18:03] INFO  WEBrick 1.3.1
[2010-07-22 22:18:03] INFO  ruby 1.8.7 (2010-06-23) [x86_64-linux]
[2010-07-22 22:18:03] INFO  WEBrick::HTTPServer#start: pid=9825 port=3000
[2010-07-22 22:18:21] INFO  going to shutdown ...
[2010-07-22 22:18:21] INFO  WEBrick::HTTPServer#start done.
Exiting
</pre>

<p>
怪しいメッセージが出ている。
何かまだ permission に問題があるようだ。
ログに関しては、log ディレクトリの下を見ると、こうなっていた。
</p>

<pre>
# ll
合計 16
-rw-r--r-- 1 mai  mai  36 10月 15  2006 delete.me
-rw-r--r-- 1 root root 51  7月 22 18:52 production.log
</pre>

<p>
mai というのは私のアカウントで、Redmine を起動するユーザーでもあるのだが、
production.log が root しか書けなくなっているのはマズいので、chown で調整する。
</p>

<pre>
# chown mai.mai pro*
# ll
合計 16
-rw-r--r-- 1 mai mai 36 10月 15  2006 delete.me
-rw-r--r-- 1 mai mai 51  7月 22 18:52 production.log
</pre>

<p>
もう一度起動してみる。
</p>

<pre>
ruby script/server webrick -e production
=> Booting WEBrick
=> Rails 2.3.5 application starting on http://0.0.0.0:3000
./script/../config/../vendor/rails/railties/lib/rails/gem_dependency.rb:119:Warning: Gem::Dependency#version_requirements is deprecated and will be removed on or after August 2010.  Use #requirement
=> Call with -d to detach
=> Ctrl-C to shutdown server
[2010-07-22 22:19:54] INFO  WEBrick 1.3.1
[2010-07-22 22:19:54] INFO  ruby 1.8.7 (2010-06-23) [x86_64-linux]
[2010-07-22 22:19:54] INFO  WEBrick::HTTPServer#start: pid=9858 port=3000
</pre>

<p>
これでokっぽいが、こんな Exception が出てしまう。
</p>

<pre>
SQLite3::ReadOnlyException: attempt to write a readonly database: INSERT INTO "users" ("created_on", "hashed_password", "admin", "language", "lastname", "mail", "updated_on", "type", "firstname", "mail_notification", "login", "status", "identity_url", "last_login_on", "auth_source_id") VALUES('2010-07-22 22:21:46', '', 'f', '', 'Anonymous', '', '2010-07-22 22:21:46', 'AnonymousUser', '', 'f', '', 0, NULL, NULL, NULL)

RAILS_ROOT: /usr/local/redmine/redmine-1.0.0
</pre>

<p>
db の下を見ると、こうなっている。
</p>

<pre>
drwxr-xr-x 2 mai  mai   16384  7月 19 03:21 migrate
-rw-r--r-- 1 root root 195584  7月 22 22:14 redmine.db
-rw-r--r-- 1 root root  27041  7月 22 22:14 schema.rb
</pre>

<p>
db の owner が root なので書けない。間違って途中で root のまま作業してしまったようだ。
これを chmod mai.mai * で owner=mai にすれば解決。
その後、特に問題なく稼動している。
</p>
]]>
      
   </content>
</entry>
<entry>
   <title>CentOS に redmine 1.0.0 RC をインストールする (7)</title>
   <link rel="alternate" type="text/html" href="http://blog.crm.co.jp/2010/08/centos_redmine_100_rc_7.html" />
   <id>tag:blog.crm.co.jp,2010://1.212</id>
   
   <published>2010-08-24T09:28:08Z</published>
   <updated>2010-08-24T09:29:51Z</updated>
   
   <summary> ・sqlite のインストール DB の migration がうまくいかない...</summary>
   <author>
      <name>mai</name>
      <uri>http://blog.crm.co.jp/</uri>
   </author>
         <category term="技術メモ" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://blog.crm.co.jp/">
      <![CDATA[<p>
<strong>・sqlite のインストール</strong>
</p>

<p>
DB の migration がうまくいかない。
どうも sqlite3-ruby が入っていないのが原因らしいので、gem install してみる。
</p>

<pre>
# gem install sqlite3-ruby
Building native extensions.  This could take a while...
ERROR:  Error installing sqlite3-ruby:
        ERROR: Failed to build gem native extension.

/usr/local/bin/ruby extconf.rb
checking for sqlite3.h... no
sqlite3.h is missing. Try 'port install sqlite3 +universal' or 'yum install sqlite3-devel'
*** extconf.rb failed ***
(略)
</pre>

<p>
yum install しろというので、してみる。
</p>

<pre>
[root@t110 redmine]# yum install sqlite-devel
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * addons: www.ftp.ne.jp
 * base: www.ftp.ne.jp
 * extras: www.ftp.ne.jp
 * updates: www.ftp.ne.jp
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package sqlite-devel.i386 0:3.3.6-5 set to be updated
---> Package sqlite-devel.x86_64 0:3.3.6-5 set to be updated
--> Finished Dependency Resolution

Dependencies Resolved

==========================================================================================
 Package                  Arch               Version               Repository        Size
==========================================================================================
Installing:
 sqlite-devel             i386               3.3.6-5               base             257 k
 sqlite-devel             x86_64             3.3.6-5               base             257 k

Transaction Summary
==========================================================================================
Install       2 Package(s)
Upgrade       0 Package(s)

Total download size: 515 k
Is this ok [y/N]: y
Downloading Packages:
(1/2): sqlite-devel-3.3.6-5.x86_64.rpm                             | 257 kB     00:01
(2/2): sqlite-devel-3.3.6-5.i386.rpm                               | 257 kB     00:01
------------------------------------------------------------------------------------------
Total                                                     206 kB/s | 515 kB     00:02
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing     : sqlite-devel                                                       1/2
  Installing     : sqlite-devel                                                       2/2

Installed:
  sqlite-devel.i386 0:3.3.6-5                sqlite-devel.x86_64 0:3.3.6-5

Complete!
[root@t110 redmine]#
</pre>

<p>
ここまでは問題なさそうなので、もう一度 gem install してみる。
</p>

<pre>
# gem install sqlite3-ruby
Building native extensions.  This could take a while...
ERROR:  Error installing sqlite3-ruby:
        ERROR: Failed to build gem native extension.

/usr/local/bin/ruby extconf.rb
checking for sqlite3.h... yes
checking for sqlite3_libversion_number() in -lsqlite3... yes
checking for rb_proc_arity()... no
checking for sqlite3_initialize()... no
sqlite3-ruby only supports sqlite3 versions 3.6.16+, please upgrade!
*** extconf.rb failed ***
</pre>

<p>
要するに 3.3.6 だと古すぎるそうだ。
sqlite の最新のものをインストールすることにする。
</p>

<p>
公式サイト ( <a href="http://www.sqlite.org/download.html">http://www.sqlite.org/download.html</a> ) から 3.7.0 を download する。
</p>

<p>
この頃になると、
もう疲れているので、何も考えずに。ダウンロード、展開、./configure、make、make install、と、呪文のように黙々と実行する。
</p>

<pre>
# ./configure

(略)

configure: creating ./config.status
config.status: creating Makefile
config.status: creating sqlite3.pc
config.status: executing depfiles commands
</pre>

<pre>
# make
(略)

creating sqlite3
</pre>

<pre>
# make install
make[1]: ディレクトリ `/usr/local/sqlite-3.7.0' に入ります
test -z "/usr/local/lib" || mkdir -p -- "/usr/local/lib"
 /bin/sh ./libtool --mode=install /usr/bin/install -c  'libsqlite3.la' '/usr/local/lib/libsqlite3.la'
/usr/bin/install -c .libs/libsqlite3.so.0.8.6 /usr/local/lib/libsqlite3.so.0.8.6
(cd /usr/local/lib && { ln -s -f libsqlite3.so.0.8.6 libsqlite3.so.0 || { rm -f libsqlite3.so.0 && ln -s libsqlite3.so.0.8.6 libsqlite3.so.0; }; })
(cd /usr/local/lib && { ln -s -f libsqlite3.so.0.8.6 libsqlite3.so || { rm -f libsqlite3.so && ln -s libsqlite3.so.0.8.6 libsqlite3.so; }; })
/usr/bin/install -c .libs/libsqlite3.lai /usr/local/lib/libsqlite3.la
/usr/bin/install -c .libs/libsqlite3.a /usr/local/lib/libsqlite3.a
chmod 644 /usr/local/lib/libsqlite3.a
ranlib /usr/local/lib/libsqlite3.a
PATH="$PATH:/sbin" ldconfig -n /usr/local/lib
----------------------------------------------------------------------
Libraries have been installed in:
   /usr/local/lib

If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR'
flag during linking and do at least one of the following:
   - add LIBDIR to the `LD_LIBRARY_PATH' environment variable
     during execution
   - add LIBDIR to the `LD_RUN_PATH' environment variable
     during linking
   - use the `-Wl,--rpath -Wl,LIBDIR' linker flag
   - have your system administrator add LIBDIR to `/etc/ld.so.conf'

See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------
test -z "/usr/local/bin" || mkdir -p -- "/usr/local/bin"
  /bin/sh ./libtool --mode=install /usr/bin/install -c 'sqlite3' '/usr/local/bin/sqlite3'
/usr/bin/install -c .libs/sqlite3 /usr/local/bin/sqlite3
test -z "/usr/local/include" || mkdir -p -- "/usr/local/include"
 /usr/bin/install -c -m 644 'sqlite3.h' '/usr/local/include/sqlite3.h'
 /usr/bin/install -c -m 644 'sqlite3ext.h' '/usr/local/include/sqlite3ext.h'
test -z "/usr/local/share/man/man1" || mkdir -p -- "/usr/local/share/man/man1"
 /usr/bin/install -c -m 644 './sqlite3.1' '/usr/local/share/man/man1/sqlite3.1'
test -z "/usr/local/lib/pkgconfig" || mkdir -p -- "/usr/local/lib/pkgconfig"
 /usr/bin/install -c -m 644 'sqlite3.pc' '/usr/local/lib/pkgconfig/sqlite3.pc'
make[1]: ディレクトリ `/usr/local/sqlite-3.7.0' から出ます
</pre>

<p>
特に指定もしていないのだが、
/usr/local/ にインストールされていることが分かる。
もう一度、gem install を実行する。
</p>

<pre>
# gem install sqlite3-ruby
Building native extensions.  This could take a while...
Successfully installed sqlite3-ruby-1.3.1
1 gem installed
Installing ri documentation for sqlite3-ruby-1.3.1...

Enclosing class/module 'mSqlite3' for class Statement not known

No definition for libversion
Installing RDoc documentation for sqlite3-ruby-1.3.1...

Enclosing class/module 'mSqlite3' for class Statement not known

No definition for libversion
#
</pre>

<p>
うまくできている?
ユーザーアカウントで、次のコマンドを実行する。
</p>

<pre>
rake db:migrate RAILS_ENV=“production” 
(略)
</pre>

<p>
大量のメッセージが出ているので、成功したらしい。
permission の変更をしろということで、手順通りやってみる。
</p>

<pre>
mkdir tmp public/plugin_assets
sudo chown -R redmine:redmine files log tmp public/plugin_assets
sudo chmod -R 755 files log tmp public/plugin_assets
</pre>

<p>
(つづく)
</p>
]]>
      
   </content>
</entry>
<entry>
   <title>CentOS に redmine 1.0.0 RC をインストールする (6)</title>
   <link rel="alternate" type="text/html" href="http://blog.crm.co.jp/2010/08/centos_redmine_100_rc_6.html" />
   <id>tag:blog.crm.co.jp,2010://1.211</id>
   
   <published>2010-08-23T03:43:00Z</published>
   <updated>2010-08-23T03:44:23Z</updated>
   
   <summary> ・openssl-devel のインストール openssl がインストールさ...</summary>
   <author>
      <name>mai</name>
      <uri>http://blog.crm.co.jp/</uri>
   </author>
         <category term="技術メモ" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://blog.crm.co.jp/">
      <![CDATA[<p>
<strong>・openssl-devel のインストール</strong>
</p>

<p>
openssl がインストールされていないというのだが、
</p>

<pre>
# which openssl
/usr/bin/openssl
</pre>

<p>
入っているように見える。確認する。
</p>

<pre>
# yum list openssl
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * addons: www.ftp.ne.jp
 * base: www.ftp.ne.jp
 * extras: www.ftp.ne.jp
 * updates: www.ftp.ne.jp
Installed Packages
openssl.i686                           0.9.8e-12.el5_4.6                         installed
openssl.x86_64                         0.9.8e-12.el5_4.6                         installed
</pre>

<p>
もしかして、devel が入ってないからだめなのか?
</p>

<pre>
# yum list openssl-devel
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * addons: www.ftp.ne.jp
 * base: www.ftp.ne.jp
 * extras: www.ftp.ne.jp
 * updates: www.ftp.ne.jp
Available Packages
openssl-devel.i386                          0.9.8e-12.el5_4.6                         base
openssl-devel.x86_64                        0.9.8e-12.el5_4.6                         base
</pre>

<p>
ということで、
openssl-devel をインストールすることにした。
yum を使う。
</p>

<pre>
# yum install openssl-devel

(途中略)

Installing:
 openssl-devel              i386          0.9.8e-12.el5_4.6          base           1.9 M
 openssl-devel              x86_64        0.9.8e-12.el5_4.6          base           1.9 M
Installing for dependencies:
 e2fsprogs-devel            x86_64        1.39-23.el5                base           632 k
 keyutils-libs-devel        x86_64        1.2-1.el5                  base            27 k
 krb5-devel                 x86_64        1.6.1-36.el5_5.4           updates        1.9 M
 libselinux-devel           x86_64        1.33.4-5.5.el5             base           149 k
 libsepol-devel             x86_64        1.15.2-3.el5               base           192 k
 zlib-devel                 x86_64        1.2.3-3                    base           102 k

Transaction Summary
==========================================================================================
Install       8 Package(s)
Upgrade       0 Package(s)

Total download size: 6.7 M
Is this ok [y/N]: 
</pre>

<p>
yを押せばインストールが始まる。
</p>

<pre>
Downloading Packages:
(1/8): keyutils-libs-devel-1.2-1.el5.x86_64.rpm                    |  27 kB     00:00
(2/8): zlib-devel-1.2.3-3.x86_64.rpm                               | 102 kB     00:00
(3/8): libselinux-devel-1.33.4-5.5.el5.x86_64.rpm                  | 149 kB     00:01
(4/8): libsepol-devel-1.15.2-3.el5.x86_64.rpm                      | 192 kB     00:01
(5/8): e2fsprogs-devel-1.39-23.el5.x86_64.rpm                      | 632 kB     00:02
(6/8): openssl-devel-0.9.8e-12.el5_4.6.x86_64.rpm                  | 1.9 MB     00:08
(7/8): krb5-devel-1.6.1-36.el5_5.4.x86_64.rpm                      | 1.9 MB     00:05
(8/8): openssl-devel-0.9.8e-12.el5_4.6.i386.rpm                    | 1.9 MB     00:04
------------------------------------------------------------------------------------------
Total                                                     281 kB/s | 6.7 MB     00:24
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing     : zlib-devel                                                         1/8
  Installing     : keyutils-libs-devel                                                2/8
  Installing     : libsepol-devel                                                     3/8
  Installing     : libselinux-devel                                                   4/8
  Installing     : e2fsprogs-devel                                                    5/8
  Installing     : krb5-devel                                                         6/8
  Installing     : openssl-devel                                                      7/8
  Installing     : openssl-devel                                                      8/8

Installed:
  openssl-devel.i386 0:0.9.8e-12.el5_4.6     openssl-devel.x86_64 0:0.9.8e-12.el5_4.6

Dependency Installed:
  e2fsprogs-devel.x86_64 0:1.39-23.el5      keyutils-libs-devel.x86_64 0:1.2-1.el5
  krb5-devel.x86_64 0:1.6.1-36.el5_5.4      libselinux-devel.x86_64 0:1.33.4-5.5.el5
  libsepol-devel.x86_64 0:1.15.2-3.el5      zlib-devel.x86_64 0:1.2.3-3

Complete!
#
</pre>

これで openssl-devel が入ったので、ruby から使えるように設定する。
ruby をインストールしたディレクトリの、ext/openssl に移動して、extconf.rb を実行する。

<pre>
# ruby extconf.rb --with-openssl-include=/usr/include --with-openssl-lib=/usr/lib
=== OpenSSL for Ruby configurator ===

(略)

=== Checking done. ===
creating extconf.h
creating Makefile
Done.
</pre>

<p>
これで Makefile ができるので、make all を実行。
実行できたら、make install を実行する。
</p>

<pre>
# make all

(略)

# make install
/usr/bin/install -c -m 0755 openssl.so /usr/local/lib/ruby/site_ruby/1.8/x86_64-linux
mkdir -p /usr/local/lib/ruby/site_ruby/1.8/openssl
mkdir -p /usr/local/lib/ruby/site_ruby/1.8/net
/usr/bin/install -c -m 644 ./lib/openssl/ssl.rb /usr/local/lib/ruby/site_ruby/1.8/openssl
/usr/bin/install -c -m 644 ./lib/openssl/cipher.rb /usr/local/lib/ruby/site_ruby/1.8/openssl
/usr/bin/install -c -m 644 ./lib/openssl/x509-internal.rb /usr/local/lib/ruby/site_ruby/1.8/openssl
/usr/bin/install -c -m 644 ./lib/openssl/buffering.rb /usr/local/lib/ruby/site_ruby/1.8/openssl
/usr/bin/install -c -m 644 ./lib/openssl/digest.rb /usr/local/lib/ruby/site_ruby/1.8/openssl
/usr/bin/install -c -m 644 ./lib/openssl/x509.rb /usr/local/lib/ruby/site_ruby/1.8/openssl
/usr/bin/install -c -m 644 ./lib/openssl/pkcs7.rb /usr/local/lib/ruby/site_ruby/1.8/openssl
/usr/bin/install -c -m 644 ./lib/openssl/bn.rb /usr/local/lib/ruby/site_ruby/1.8/openssl
/usr/bin/install -c -m 644 ./lib/openssl/ssl-internal.rb /usr/local/lib/ruby/site_ruby/1.8/openssl
/usr/bin/install -c -m 644 ./lib/openssl.rb /usr/local/lib/ruby/site_ruby/1.8
/usr/bin/install -c -m 644 ./lib/net/telnets.rb /usr/local/lib/ruby/site_ruby/1.8/net
/usr/bin/install -c -m 644 ./lib/net/ftptls.rb /usr/local/lib/ruby/site_ruby/1.8/net
</pre>

<p>
ということで、ここまではうまくいった。
</p>

<p>
(つづく)
</p>
]]>
      
   </content>
</entry>
<entry>
   <title>CentOS に redmine 1.0.0 RC をインストールする (5)</title>
   <link rel="alternate" type="text/html" href="http://blog.crm.co.jp/2010/08/centos_redmine_100_rc_5.html" />
   <id>tag:blog.crm.co.jp,2010://1.210</id>
   
   <published>2010-08-20T03:20:00Z</published>
   <updated>2010-08-20T03:21:14Z</updated>
   
   <summary> ・テーブルの作成 (インストール手順 5) 公式サイトに次のように書いてあった...</summary>
   <author>
      <name>mai</name>
      <uri>http://blog.crm.co.jp/</uri>
   </author>
         <category term="技術メモ" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://blog.crm.co.jp/">
      <![CDATA[<p>
<strong>・テーブルの作成 (インストール手順 5)</strong>

<p>
公式サイトに次のように書いてあったので、
その通りにしてみる。
</p>

<pre>
rake db:migrate RAILS_ENV=“production”
</pre>

<p>
実はうっかりこのまま実行したのだが、
double quote が全角だとまずいのではないかと思う。
しかし、もっとまずいことに、こんなメッセージが出てしまった。
</p>

<pre>
# rake db:migrate RAILS_ENV=“production
(in /usr/local/redmine/redmine-1.0.0)
rake aborted!
Could not find RubyGem rack (~> 1.0.1)

(See full trace by running task with --trace)
</pre>

<p>
rack がない。
ということで、rack をインストールする。
</p>

<pre>
# gem install rack
Successfully installed rack-1.2.1
1 gem installed
Installing ri documentation for rack-1.2.1...
Installing RDoc documentation for rack-1.2.1...
</pre>

<p>
そんなに新しいのでいいのか?
とりあえずこれで続行してみると、
</p>

<pre>
# rake db:migrate RAILS_ENV="production"
(in /usr/local/redmine/redmine-1.0.0)
rake aborted!
RubyGem version error: rack(1.2.1 not ~> 1.0.1)

(See full trace by running task with --trace)
</pre>

<p>
よくないらしい。
</p>

<p>
ということで、アンインストールしてから、
-v オプションを使って、1.0.1 を指定してインストールし直すことにする。
</p>

<pre>
# gem uninstall rack
Remove executables:
        rackup

in addition to the gem? [Yn]  Y
Removing rackup
Successfully uninstalled rack-1.2.1
#
</pre>

<pre>
# gem install rack -v 1.0.1
Successfully installed rack-1.0.1
1 gem installed
Installing ri documentation for rack-1.0.1...
Installing RDoc documentation for rack-1.0.1...
</pre>

<p>
これで確実なものがインストールされたので、再度 rake を実行。
</p>

<pre>
# rake db:migrate RAILS_ENV="production"
(in /usr/local/redmine/redmine-1.0.0)
rake aborted!
no such file to load -- openssl

(See full trace by running task with --trace)
#
</pre>

<p>
openssl がインストールされていないと言われてしまった。
</p>

<p>
(つづく)
</p>
]]>
      
   </content>
</entry>
<entry>
   <title>CentOS に redmine 1.0.0 RC をインストールする (4)</title>
   <link rel="alternate" type="text/html" href="http://blog.crm.co.jp/2010/08/centos_redmine_100_rc_4.html" />
   <id>tag:blog.crm.co.jp,2010://1.209</id>
   
   <published>2010-08-19T06:10:28Z</published>
   <updated>2010-08-19T06:07:47Z</updated>
   
   <summary> ・Redmine の config の調整 (インストール手順 3) Redm...</summary>
   <author>
      <name>mai</name>
      <uri>http://blog.crm.co.jp/</uri>
   </author>
         <category term="技術メモ" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://blog.crm.co.jp/">
      <![CDATA[<p>
<strong>・Redmine の config の調整 (インストール手順 3)</strong>
</p>

<p>
Redmine のインストール手順は <a href="http://redmine.jp/guide/RedmineInstall">http://redmine.jp/guide/RedmineInstall</a> を参考にする。
データベースの選択だが、
たまたま MySQL は他のソフトでも使っていていろいろ面倒だったので、
以前のバージョンは SQLite を選択して使っていた。
今回も引き続き SQLite を使うことにした。
この場合、インストール手順 2 の、空のデータベースの作成は省略できる。
</p>

<p>
redmine をインストールしたディレクトリにある、
次の2つのファイルを環境に合わせて編集する必要がある。
</p>

<pre>
config/database.yml
email.yml
</pre>

<p>
今回は以前のバージョンのものがあるから、
それをコピーした。
</p>

<p>
<strong>・session_store.rb の実行 (インストール手順 4)</strong>
</p>

<p>
続けて、redmine をインストールしたディレクトリで、次のコマンドを実行する。
</p>

<pre>
# rake config/initializers/session_store.rb
(in /usr/local/redmine/redmine-1.0.0)
#
</pre>

<p>
これも特に問題なさそうだ。
</p>

<p>
(つづく)
</p>
]]>
      
   </content>
</entry>
<entry>
   <title>CentOS に redmine 1.0.0 RC をインストールする (3)</title>
   <link rel="alternate" type="text/html" href="http://blog.crm.co.jp/2010/08/centos_redmine_100_rc_3.html" />
   <id>tag:blog.crm.co.jp,2010://1.208</id>
   
   <published>2010-08-18T07:33:00Z</published>
   <updated>2010-08-18T07:33:51Z</updated>
   
   <summary> ・rake のインストール 続いて Rake をインストールする。 RubyG...</summary>
   <author>
      <name>mai</name>
      <uri>http://blog.crm.co.jp/</uri>
   </author>
         <category term="技術メモ" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://blog.crm.co.jp/">
      <![CDATA[<p>
<strong>・rake のインストール</strong>
</p>

<p>
続いて Rake をインストールする。
RubyGems がインストールされているので、手順は簡単で、
</p>

<pre>
gem install rake
</pre>

<p>
このように実行すればいい。
</p>

<pre>
# gem install rake
ERROR:  Loading command: install (LoadError)
    no such file to load -- zlib
ERROR:  While executing gem ... (NameError)
    uninitialized constant Gem::Commands::InstallCommand
#
</pre>

<p>
拒絶された。
<strong>先に、zlib をインストールしなければならない</strong>らしい。
zlib の公式サイト ( <a href="http://www.zlib.net/">http://www.zlib.net/</a> ) からダウンロードする。
</p>

<p>
最新版の zlib は zlib-1.2.5 のようだ。zlib-1.2.5.tar.gz を get する。
インストールの手順は定番通り。
</p>

<pre>
# ./configure

(省略)

# make

(省略)

# make install
cp libz.a /usr/local/lib
cp libz.so.1.2.5 /usr/local/lib
cd /usr/local/lib; chmod u=rw,go=r libz.a
cp zlib.3 /usr/local/share/man/man3
chmod 644 /usr/local/share/man/man3/zlib.3
cp zlib.pc /usr/local/lib/pkgconfig
chmod 644 /usr/local/lib/pkgconfig/zlib.pc
cp zlib.h zconf.h /usr/local/include
chmod 644 /usr/local/include/zlib.h /usr/local/include/zconf.h
# cd /usr/local/ruby/ext/zlib
# ruby extconf.rb --with-zlib-include=/usr/local/include --with-zlib-lib=/usr/local/lib
[root@t110 zlib]# make all
gcc -I. -I. -I/usr/local/lib/ruby/1.8/x86_64-linux -I. -DHAVE_ZLIB_H  -DOS_CODE=OS_UNIX -I/usr/local/include    -fPIC -g -O2   -c zlib.c
gcc -shared -o zlib.so zlib.o -L. -L/usr/local/lib -Wl,-R/usr/local/lib -L/usr/local/lib -Wl,-R/usr/local/lib -L.  -rdynamic -Wl,-export-dynamic    -lz  -lrt -ldl -lcrypt -lm   -lc
# make install
/usr/bin/install -c -m 0755 zlib.so /usr/local/lib/ruby/site_ruby/1.8/x86_64-linux
</pre>

<p>
この状態で、
もう一度 rake をインストールしてみる。
</p>

<pre>
# gem install rake
Successfully installed rake-0.8.7
1 gem installed
Installing ri documentation for rake-0.8.7...
Installing RDoc documentation for rake-0.8.7...
#
</pre>

<p>
今度は問題ない。
</p>

<p>
(つづく)
</p>
]]>
      
   </content>
</entry>
<entry>
   <title>CentOS に redmine 1.0.0 RC をインストールする (2)</title>
   <link rel="alternate" type="text/html" href="http://blog.crm.co.jp/2010/08/centos_redmine_100_rc_2.html" />
   <id>tag:blog.crm.co.jp,2010://1.207</id>
   
   <published>2010-08-17T03:05:16Z</published>
   <updated>2010-08-18T07:32:30Z</updated>
   
   <summary> ・RubyGems 1.3.7 Ruby をインストールしたら、続いて Rub...</summary>
   <author>
      <name>mai</name>
      <uri>http://blog.crm.co.jp/</uri>
   </author>
         <category term="技術メモ" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://blog.crm.co.jp/">
      <![CDATA[<p>
<strong>・RubyGems 1.3.7</strong>
</p>

<p>
Ruby をインストールしたら、続いて RubyGems をインストールする。
</p>

<p>
Redmine 1.0.0. のインストールページに動作環境が書いてある。
</p>

<pre>
RubyGems 1.3.1
Rake 0.8.3
</pre>

<p>
これが必要だと書いてあるのだが、RubyGems の最新版は 1.3.7 である(2010-08-17 現在)。
このように書いてある場合は、1.3.1 を入手した方が確実なのだが、
今回は 1.3.7 を使った。一応、問題なく動作しているようである。
</p>

<p>
次のサイトからダウンロードする。
</p>

<p>
<a href="http://rubyforge.org/frs/?group_id=126">http://rubyforge.org/frs/?group_id=126</a>
</p>

<p>
ダウンロードしたファイルを、/usr/local の下で展開すると、rubygems-1.3.7 というディレクトリができる。
その中のファイルに、インストールの方法が次のように書いてある。
</p>

<pre>
3. Install with: ruby setup.rb  # you may need admin/root privilege
</pre>

<p>
この通りに実行する。
</p>

<pre>
# ruby setup.rb
RubyGems 1.3.7 installed

=== 1.3.7 / 2010-05-13

NOTE:

http://rubygems.org is now the default source for downloading gems.

You may have sources set via ~/.gemrc, so you should replace
http://gems.rubyforge.org with http://rubygems.org

http://gems.rubyforge.org will continue to work for the forseeable future.

New features:

(途中略)

RubyGems installed the following executables:
        /usr/local/bin/gem

#
</pre>

<p>
このインストールは、特に問題なさそうだ。
</p>

<p>
(つづく)
</p>
]]>
      
   </content>
</entry>
<entry>
   <title>CentOS に redmine 1.0.0 RC をインストールする (1)</title>
   <link rel="alternate" type="text/html" href="http://blog.crm.co.jp/2010/08/redmine.html" />
   <id>tag:blog.crm.co.jp,2010://1.206</id>
   
   <published>2010-08-16T03:38:20Z</published>
   <updated>2010-08-16T03:39:24Z</updated>
   
   <summary> Redmine は Ruby で書かれたプロジェクト管理ツールである。 201...</summary>
   <author>
      <name>mai</name>
      <uri>http://blog.crm.co.jp/</uri>
   </author>
         <category term="技術メモ" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://blog.crm.co.jp/">
      <![CDATA[<p>
Redmine は Ruby で書かれたプロジェクト管理ツールである。
2010年7月19日バージョン 1.0.0 RC がリリースされた。
弊社開発チームは Redmine を使っていたので、最新版に update することになったので、
手順を紹介する。
</p>

<p>
インストールするサーバーの OS は CentOS である。
現時点の CentOS に標準でインストールされている(できる) Ruby のバージョンは 1.8.5 だが、
Redmine は Ruby が 1.8.6以降のバージョンでないと動かない。
このため、まず、Ruby 1.8.7 のインストールから始めることになる。
</p>

<p>
・Ruby 1.8.7 のインストール
</p>

<p>
公式サイト ( <a href="http://www.ruby-lang.org/ja/downloads/">http://www.ruby-lang.org/ja/downloads/</a> )トに、ダウンロードページがあるので、
ここから、ruby-1.8.7-p299.tar.gz をダウンロードして、/usr/local の下で展開した。
</p>

<pre>
cd /usr/local
tar xf /tmp/ruby-1.8.7-p299.tar
</pre>

<p>
何も考えずに定番の手順でインストールする。
</p>

<pre>
./configure
./make
./make install
</pre>

<p>
これで /usr/local/bin/ruby がインストールされた。
/usr/bin/ruby も残っているので、
バージョン違いのものが並存したことになる。
どちらを呼び出すか、注意が必要である。
</p>

<pre>
# /usr/bin/ruby --version
ruby 1.8.5 (2006-08-25) [x86_64-linux]
# /usr/local/bin/ruby --version
ruby 1.8.7 (2010-06-23 patchlevel 299) [x86_64-linux]
</pre>

<p>
一般には、違うバージョンのプログラムが並存するというのは微妙に怖い状況だが、
今回はokとする。
1.8.5 でないと困るということは通常はないと思われるので、
1.8.8 をアンインストールしても構わないと思うが、
それはそれで手間がかかるので今回は放置することにした。
which で確認すれば、デフォルトで呼ばれるのは 1.8.7 になっている。
</p>

<pre>
$ ruby --version
ruby 1.8.7 (2010-06-23 patchlevel 299) [x86_64-linux]
</pre>

<p>
(つづく)
</p>
]]>
      
   </content>
</entry>
<entry>
   <title>Java の for の書き方</title>
   <link rel="alternate" type="text/html" href="http://blog.crm.co.jp/2010/01/java_for.html" />
   <id>tag:blog.crm.co.jp,2010://1.205</id>
   
   <published>2010-01-27T12:24:33Z</published>
   <updated>2010-01-27T12:31:29Z</updated>
   
   <summary>List list; があるときに、次のようなコードを書くのは普通のことだが、 ...</summary>
   <author>
      <name>mai</name>
      <uri>http://blog.crm.co.jp/</uri>
   </author>
         <category term="Java" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://blog.crm.co.jp/">
      <![CDATA[List<Item> list;

があるときに、次のようなコードを書くのは普通のことだが、

<pre>
for (Item item: list) {
    foo(list, item);
}
</pre>

ここでちょっとした罠があって、エラーになってしまうことがある。

<pre>
Caused by: java.util.ConcurrentModificationException
	at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372)
	at java.util.AbstractList$Itr.next(AbstractList.java:343)
	at org.hibernate.collection.AbstractPersistentCollection$IteratorProxy.next(AbstractPersistentCollection.java:555)
</pre>

何が起こったのか。ループの中で list の要素を入れ替えたのだが、それが気に入らないらしい。これは、次のように old style で書いておけば問題ない。

<pre>
for (int i = 0; i < list.size(); i++) {
    Item item = list.get(i);
    foo(list, item);
}
</pre>

これだとその都度 index を使って list から要素を取り出すのだろう。じゃあ先程のは一体何をやっているのか、というのはちょっと気になる。
]]>
      
   </content>
</entry>

</feed>
