カテゴリーアーカイブ: 日記

Aug 28 2010

Redmine を Tomcat6 にデプロイ

先日インストールしましたプロジェクト管理ツールの Redmine ですが、1.0.1 として 1系の正式版がでました!

というわけで、先日は mod_rails で動作させていましたが、せっかくなので今度は JRuby を使って Tomcat6 上にデプロイしてみたいと思います。

なにか利点があるかって話ですが、1パッケージにして JavaVM で動作させておけば、OS にのっている Ruby 実行環境に依存しなくて済むのがいいところ。 gem のバージョン依存とか考えなくていいし、Servlet の実行環境さえあればどこにでも乗せられるのでなかなか便利かもしれません。

とりあえず、.war 玉をつくる作業した環境は以下の通りです。

[hiromasa@localhost ~]$ java -version
java version "1.6.0_21"
Java(TM) SE Runtime Environment (build 1.6.0_21-b06)
Java HotSpot(TM) Server VM (build 17.0-b16, mixed mode)
[hiromasa@localhost ~]$ jruby -v
jruby 1.5.2 (ruby 1.8.7 patchlevel 249) (2010-08-20 1c5e29d) (Java HotSpot(TM) Client VM 1.6.0_21) [i386-java]
[hiromasa@localhost ~]$ sudo /opt/tomcat6/bin/version.sh 
[sudo] password for hiromasa: 
Using CATALINA_BASE:   /opt/tomcat6
Using CATALINA_HOME:   /opt/tomcat6
Using CATALINA_TMPDIR: /opt/tomcat6/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /opt/tomcat6/bin/bootstrap.jar
Server version: Apache Tomcat/6.0.29
Server built:   July 19 2010 1458
Server number:  6.0.0.29
OS Name:        Linux
OS Version:     2.6.18-194.11.1.el5
Architecture:   i386
JVM Version:    1.6.0_21-b06
JVM Vendor:     Sun Microsystems Inc.

まずは、JRuby のインストールから。

$ sudo wget http://jruby.org.s3.amazonaws.com/downloads/1.5.2/jruby-bin-1.5.2.tar.gz
$ sudo tar zxvf jruby-bin-1.5.2.tar.g
$ cat /etc/profile
export JRUBY_HOME=/opt/jruby-1.5.2
export PATH=$PATH:$JRUBY_HOME/bin

でもって、必要な gems を入れていきます。 ぼくは PostgreSQL で動作させているため、jdbc はポスグレのになります。

$ sudo jruby -S gem install rail
$ sudo jruby -S gem install activerecord-jdbcpostgresql-adapter
$ sudo jruby -S gem install warbler
$ sudo jruby -S gem install rack --version '~> 1.0.1

warbler というのが、Rails のアプリを .war 玉にしてくれるありがたいものです。 あと、rack が 1.0.1 じゃないと後で Redmine を動かしたときに Exception するので入れておきます。

でもって、Redmine をダウンロードしてきて、普通に config を設定していきます。 config/database.xml については以下のように。

[hiromasa@localhost redmine-1.0.1]$ cat config/database.yml
# MySQL (default setup).
 
production:
  adapter: jdbcpostgresql
  driver: org.postgresql.Driver
  database: [dbname]
  host: localhost
  username: [username]
  password: [password]
  encoding: utf8
  scheme_search_path: public

以下、Redmine のファイルを置いた直下のディレクトリにて。

これで DB のマイグレーションができるハズです。(ここでは .war をつくるのと同じ環境に入れてます)

$ sudo jruby -S rake db:migrate RAILS_ENV="production"

でもって、いよいよ warbler で .war をつくります。 まずは config をつくってもらいます。

$ sudo jruby -S warble config

ほいでもって、できた config を編集。

config/warble.rb

config.dirs = %w(app config lib log vendor tmp lang)
config.gems << "activerecord-jdbcpostgresql-adapter"
config.gem_dependencies = true
config.webxml.rails.env = 'production'
config.gems["rack"] = "1.0.1"

最後の rack のバージョン指定をしないと依存関係でおちるようです。(新しい方が使われてしまう)

できたら、いよいよ。

   1: $ sudo jruby -S warble

 

[root@localhost redmine-1.0.1]# ls -laF redmine-1.0.1.war 
-rw-rw-rw- 1 root root 17230199  8月 28 16:01 redmine-1.0.1.war

 

キター!

こころを込めて配置します。 ここでは、war つくった環境と同じなのでそのまま…

$ sudo /etc/init.d/tomcat6 stop
$ sudo cp redmine-1.0.1.war /opt/tomcat6/webapps/redmine.war
$ sudo /etc/init.d/tomcat6 start

無事デプロイ成功。 起動しました。 :)

redmine20

でもって、添付ファイルについてが気になって調べてみたのですが、どうやら WEB-INF/files に置かれる模様。 こんなところに置いてたらちょっとしたことで消えちゃういますのでシンボリックリンクで対応。

$ sudo ln -s /home/apache/redmine/files/ files

デプロイするたびにですが、しょうがないですね。 設定とか実はあるのかもしれませんがとりあえず。 あとは必要なら mod_ajp でつなぐなど。

というわけで、できあがった redmine.jar と Tomcat さえあればどこでも動くようになりました。 とりあえず事務所に持って行きます。。(笑)

DB マイグレーションは、 .war 作成でつかった JRuby 自体もただコピーするだけで他に持って行けると思うので、それでマイグレーション動かするのが良さそうですね。

エクスポートインポートでいければ Stax Networks とかにもデプロイできるかもしれません。(ただしファイルがかけないため、添付ファイルはだめだと思われる)

さて気になる .war ファイルですがほどいてみると以下のようになっていました。

redmine21

画像が小さくて見にくいですが、WEB-INF/gems/gems に依存する gems が格納されるようです。 あとは、ひとつの filter から jruby を起動して .rb を動的コンパイルしつつ動作という感じでしょうか。

動きはきびきびして、いい感じです。 先ほど入れて一通り動作見たばかりなので、もうちょっと動作させてみたいと思います。

以上、デプロイ田中でした。 ざっ。

Aug 21 2010

Subversion サーバ を CentOS 5.5 で。

Subversion サーバは昔も家にたてていたのですが、ローカルサーバを Atom 機にしてからまだインストールしていなかったので CentOS 5.5 上に改めて構築してみました。

すぐたつと思ったら、いろいろ罠があってはまったのでメモ代わりの投稿です。 結論から言うと思った通りにたてることができませんでした。。orz

とりあえず、CentOS 5.5 に subvesion と Apache + mod_dav_svn をインストール。 mod_dav_svn は新しいものを使いたかったので、rpmforge から 1.6 系をもってきています。

[root@localhost conf.d]# rpm -q httpd
httpd-2.2.3-43.el5.centos
[root@localhost conf.d]# rpm -q mod_dav_svn
mod_dav_svn-1.6.12-0.1.el5.rf

でもって、/etc/http/conf.d/subvesion.conf を以下のようにしました。 全権限を BASIC 認証にしたのと、DocumentRoot が Apache とかぶると問題がでるようなので、新しいポートで mod_dav をたてています。

<VirtualHost *:8082>
   <Location />
      DAV svn
      SVNParentPath /home/apache/svn
      SVNListParentPath on
      DavDepthInfinity on
      Order deny,allow
      Deny from all
      Allow from 127.0.0.1
      Allow from 192.168.0.0/24
      AuthType Basic
      AuthName "Authorization Realm"
      AuthUserFile /home/apache/passwd/.htpasswd 
      Require valid-user
   </Location>
</VirtualHost>

DocumentRoot かぶりの問題は、mod_dav_svn の FAQ に記載がありました。

Webブラウザからリポジトリを見られるようにしているんだけど、’svn checkout’ が、「301 Moved Permanently」というエラーになる。何が悪いの?

解決策としては、リポジトリの<Location>を、通常の Web 共有として既に公開されている領域とオーバーラップしないようにするか、もしくはその中へ収めるべきだ。

ここがまず一発目にはまったポイントでした。。

さてディレクティブに SVNParentPath というのがありますが、これが親ディレクトリから subversion を使う設定です。 要はプロジェクトの作成の権限をユーザがもてることになります。

てなわけで、Eclipse の Subclipse (SVNKit) からプロジェクトの共有を発行すると…。

svn: can not read HTTP status line
 PROPFIND request failed on '/'

エラー。。 なじぇ。。

http status line が読めないということで、まず SVNKit のソースを疑ったのが間違いの始まり。。 org.tmatesoft.svn.core.internal.io.dav.http の自前パーサでやっているようだったので、バグっているのかと。。

で、いろいろいじっていると、なんと本気で PROPFIND メソッドで status line が返ってきていないことが発覚。。

hiromasa@hiromasa-cube:~$ telnet 192.168.0.100 8082
Trying 192.168.0.100...
Connected to 192.168.0.100.
Escape character is '^]'.
PROPFIND / HTTP/1.1
Host: aaa
Authorization: Basic fjwi094j403fj49fj949
 
Connection closed by foreign host.

いきなりぶったぎられています。。 おかしいなぁということで、SVNParentPath の下に svnadmin create test とかして svn リポジトリをつくってそこを対象に同じ事をしてみると…

hiromasa@hiromasa-cube:~$ telnet 192.168.0.100 8082
Trying 192.168.0.100...
Connected to 192.168.0.100.
Escape character is '^]'.
PROPFIND /test HTTP/1.1
Host: aaa
Authorization: Basic fjwi094j403fj49fj949
 
HTTP/1.1 207 Multi-Status
Date: Sat, 21 Aug 2010 01:51:23 GMT
Server: Apache/2.2.3 (CentOS)
Content-Length: 2306
Connection: close
Content-Type: text/xml; charset="utf-8"
 
<?xml version="1.0" encoding="utf-8"?>
(以下略)

ちゃんと返ってくる~。 なじぇ~。 権限?ということで OPTIONS を発行してみると、、

hiromasa@hiromasa-cube:~$ telnet 192.168.0.100 8082
Trying 192.168.0.100...
Connected to 192.168.0.100.
Escape character is '^]'.
OPTIONS / HTTP/1.1
Host: aaa
Authorization: Basic fjwi094j403fj49fj949
 
HTTP/1.1 200 OK
Date: Sat, 21 Aug 2010 01:43:25 GMT
Server: Apache/2.2.3 (CentOS)
DAV: 1,2
DAV: version-control,checkout,working-resource
DAV: merge,baseline,activity,version-controlled-collection
DAV: http://subversion.tigris.org/xmlns/dav/svn/depth
DAV: http://subversion.tigris.org/xmlns/dav/svn/log-revprops
DAV: http://subversion.tigris.org/xmlns/dav/svn/partial-replay
DAV: http://subversion.tigris.org/xmlns/dav/svn/mergeinfo
DAV: <http://apache.org/dav/propset/fs/1>
MS-Author-Via: DAV
Allow: OPTIONS,GET,HEAD,POST,DELETE,TRACE,PROPFIND,PROPPATCH,COPY,MOVE,LOCK,UNLOCK
Content-Length: 0
Connection: close
Content-Type: httpd/unix-directory
 
Connection closed by foreign host.

ちゃんと Allow されているっぽい。。 なぞぞーん。。

で、ふと Apache の error_log を PROPFIND したタイミングでみてみると、、

[Sat Aug 21 11:53:30 2010] [notice] child pid 3497 exit signal Segmentation fault (11)

 

きゅるきゅるるるるる…、ぼぼん!

セグってるし。。 どうりですぐ切断されるはずです。。

てなわけで Apache が悪いのか mod_dav_svn が悪いのか、組み合わせが悪いのかちょっと分かりませんが、これ以上はぼくの手におえなそうです。 まぁアプリ的な設定が悪いわけではなさそうなのが収穫。

とりあえず SVNParent に直アクセスするのはあきらめて、プロジェクトできるたびに svnadmin create する運用にしたいとおもいます。 Eclipse にリポジトリいっぱい登録しなきゃいけないのがいたいですが、しょうがない。。

無事 Eclipse や TortoiseSVN からもみることができるようになりました。

snv01

ほいでもって、Redmine からも接続。 :)

svn02

Eclipse の mylyn から Redmine につなげば、チケットとくくりつくようなことも可能なはずです。 もうちょっとやってみるデス。

Aug 1 2010

Fastladder を mod_rails にインストール

昨日 Redmine を入れるために Ruby / Ruby on Rails の環境を、Cent OS 5.5 のローカルサーバにつくりました。

というわけで、今日はさらにそこに Fastladder Open Source を入れてみます。 なかなか手ごわかったですが、なんとか動いたようです。 :)

Fastladder はサーバインストール型の RSS リーダです。

Fastladder Open Source / Free Download

オープンソース版「Fastladder」は、サーバインストール型のRSSリーダーです。法人で管理しているサーバや、個人でお持ちのPCなどにインストールして使用できますので、イントラのRSSも読むことができます。

以前から Gregarius をインストールして使っていたのですが、ちょっと遅い、、ということで Fastladder。 こちらも前からやってみたかったのですが、 Rails の環境が用意できなかったので断念していました。

とりあえず動いた! の図。 :)

fastladder01

まぁ ASP 版とほとんどいっしょなので ASP つかえって話ですが、やっぱりデータがこちらのおなかにあるのは、いろいろ使い勝手がいいのでローカルサーバで動かすことにしています。

さて、CentOS 5.5 へのインストールですが、Ruby とかライブラリとかの関係でなかなか動かすのが大変でした。。 覚えている限りでひっかかったところを、書いていきます。

とりあえず、作業した環境

[root@localhost ~]# cat /etc/httpd/conf.d/passenger.conf 
LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-2.2.15/ext/apache2/mod_passenger.so
PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-2.2.15
PassengerRuby /usr/bin/ruby
 
[root@localhost ~]# ruby -v
ruby 1.8.5 (2006-08-25) [i386-linux]
[root@localhost ~]# gem -v
1.3.1

まず必要となる Freeimage ライブラリは、コンパイルしていれました。 make; make install して ldconfig すれば入ると思います。

rfeedfinder については、hpricot が依存するのですが、0.8 系だとエラーになるようなので、0.7 系を入れています。

gem install hpricot --version 0.7

これで、Fastladder の INSTALL.txt はクリアできると思います。

で次に、Rails アプリケーションの設定。 せっかく、昨日 Postgres 入れたのでこちらを使うようにしました。

[hiromasa@localhost config]$ cat /opt/fastladder/config/database.yml
production:
  adapter: postgresql
  database: fastladderdb
  username: fastladder
  password: パスワード
  host: localhost
  encoding: utf8

でもって、ポスグレに DB とユーザ追加。

   1: sudo -u postgres createuser -U postgres -dEeP
   2: sudo -u postgres createdb -e -U postgres -O fastladder fastladderdb "For Fastladder"

httpd.conf に Rails アプリを追加。

<VirtualHost *:80>
   ServerName localhost.localdomain
   DocumentRoot /var/www/html
   RailsBaseURI /redmine
   <Directory /var/www/html>
      AllowOverride all
      Options -MultiViews
   </Directory>
</VirtualHost>
 
<VirtualHost *:8081>
   ServerName localhost.localdomain
   DocumentRoot /opt/fastladder/public 
   <Directory /opt/fastladder/public>
      AllowOverride all
      Options -MultiViews
   </Directory>
</VirtualHost>

上が Redmine 用で下の 8081 が Fastladder です。 *:80 のほうに RailsBaseURI に /fastladder を追加でいけるはずだったのですが、Fastladder にアクセスするとコンテキストパス(?) が無視されて / にすっとばされてしまうので、しょうがなくポートを分けました。

config.action_controller.relative_url_root の設定を config/environment.rb にしてみたりもしたのですが、だめそう。。 Fastladder がパスを固定でもっちゃってるのかもしれません。(フレームワーク使っているのにあるかなぁという疑問はありつつ)

で、これでアクセスで動くと思いきやまだまだ苦難が。(笑)

log/production.log を tail して動かしていくといいかもです。

まず、Rails のバージョンが新しいせいなのか、フレームワークのファイル名の命名規則が変わっていてコントローラでおちちゃいます。

app/controllers/application.rb をapp/controllers/application_controller.rb にリネームする方向で。

次に、rfeedfinder.rb が引数がおかしいだかで落ちますので、/usr/lib/ruby/gems/1.8/gems/rfeedfinder-0.9.13/lib/rfeedfinder.rb の、

#data = Rfeedfinder.open_doc(fulluri, options)
data = Rfeedfinder.open_doc(fulluri)

2引数になっている、open_doc を 1引数にパッチ。

それから、lib/string_utils.rb で strip_tags() が no such method とかいわれて落ちるので、

class String
  # for strip_tags
  #include ActionView::Helpers::TextHelper
  include ActionView::Helpers::SanitizeHelper
  extend ActionView::Helpers::SanitizeHelper::ClassMethods

extend の行を追加します。

たしか以上で動いたはずです。 いろいろやっていたらログとばしてしまいました。。

あ、あと RSS の URL のバリデータがきつかったのでとばしました。 なんか Google のバリデータだったような気がします。 どこだったか失念(笑) 必要ならログにでますので、コメントアウトすればいいと思います。

RoR はおろか Ruby もよくわかっていないでやっていますので、変なことしていたらすいません。

あとは、クローラを init.d で自動起動するようにすればいいと思います。 動いてしまえば順調。 いい感じですぞ。

最近、WordPress 関係でお会いする方が増えて、RSS の整理が追い付いてなかったのですが、これでうまくできそうです。 懸案ひとつ解決で、すっきりです。 :)

Aug 1 2010

プロジェクト管理アプリケーション Redmine

気になっていました、プロジェクト管理アプリケーション Redmine を入れてみました。

実は shiroica さんが以前から使われているようだったので、それを見てすぐに試してみたかったのですが Ruby & RoR が使える環境がぱっと用意できなくて断念していました。 先日、うちのローカルサーバを Atom 機に変えた際に、CentOS 5.5 になりましたので晴れて こちらで試してみました。 :)

Redmine – Wikipedia

RedmineRuby on Railsで開発されている、Webベースのプロジェクト管理ソフトウェアである。 また、RedmineはオープンソースGPLで配布されており、その設計はTracに影響を受けている。

Redmineはプログラミング言語Ruby本体の開発を始めとして、さまざまな企業やプロジェクトでの導入が報告されている。[1]

WordPress をやられているかたは、WordPress Trac を想像してもらえれば、どんなもんか分かりやすいですね。 あちらは、Trac というのを使っています。

てなわけで、とりあえず CentOS 5.5 への Redmine インストールから。 ほぼこちらのサイトを参考にしてやらせていただきました。 ありがとうございます!。

サクっとly.com – サクッとCentOS 5.4にRedmine + Passenger環境をインストール

約1年前にサクッとCentOS 5.3にRedmine + Passenger環境をインストールを書きましたが、ちょうどインストールし直す機会があったので若干の変更をしながら書き直してみました。

解説では Ruby と RubyGems をソースから入れていますが、ぼくは rpm を使って入れてみました。 使った Redmine は 1.0.0 の RC です。

rpm -ivh http://ftp.iij.ad.jp/pub/linux/fedora/epel/5/i386/epel-release-5-3.noarch.rpm
yum install -y ruby ruby-irb ruby-libs ruby-rdoc ruby-ri
yum install -y rubygems --enablerepo=epel

あと、DB を作成する部分で rack のバージョンが異なるというエラー (1.1.0 と 1.0.1 で 1.0.1 を要求された)がでたような気がするので、1.0.1 を入れています。

sudo gem install rack --version '~> 1.0.1'

ぐらいです。 gem で時間が結構かかりましたが、あとは詳しい解説のおかげで滞りなくインストールすることができました。 :)

さて、Redmine は Web ベースのアプリケーションですが、Redmine-Mylyn Connector というのをいれると Eclipse から GUI 接続できるようになります。 こちらにも挑戦。

SourceForge.net: Installation – redmin-mylyncon

Use the update-site (currently Eclipse 3.4 and higher only) http://redmin-mylyncon.sourceforge.net/update-site/nightly/

クライアント(Eclipse)側と、サーバ(Redmine)側の両方にプラグインを入れます。 でもって、Redmine をリスタートすれば準備完了です。

まずは Web インターフェース。 すっきりしていてなかなかいい感じです。

redmine01

チケットをカレンダーにだしてくれるのが、良いですね。

でもって、Eclipse の Mylyn 経由からの接続の図。

redmine02 

redmine04

こんな感じで Eclipse GUI から表示できます。 ただっ、

なぜか更新できない~

ということで、どーもサーバに対してチケットの新規登録・更新がききません。。 新規登録では unknow error と画面にでています。 細かいログがどこかにでているといいのですが。 ちょっと継続調査です。

ただ、読み込みについてはうまく動きますのでちゃんと Eclipse に変更通知が来ます。 :)

redmine03

かわゆすですね。

Eclipse の GUI からも上のボタンをぽちっとおすと、インターナルブラウザで Web の画面見れますので更新はこちらからできます。 まぁコンテキスト付与とかできないので、SVN 連携とかちょっと手作業になってしまいますが、まぁまぁとりあえずタスクの通知と閲覧ができるだけでも十分です。

お仕事でもこの手のたまに使いますが、メーカ製なので製品名はあげないでおきますが、あれとかあれとかはなかなか使いづらい。。 エクセルのほうが良かったくらいにして(笑)

というわけで、次回自分たちメインでやるプロジェクトで使ってみようか、というのもあって Redmine をお試し。 ファイル管理とか Wiki も使え、使いようによってライトにもヘビーにも転べそうですので、良いと感じました。

ぼくらは、開発中は1日中 Eclipse 起動しっぱなしなので、通知が行ったり画面一覧したりできるのも便利です。 この手のは手軽に活用し始めてなんぼだと思うのです。

とりあえず、検証に家で少し動かしてみたいと思います。 :)

Jul 25 2010

Microsoft Office 2010 を買いました。

もう1ヶ月くらい前になるのですが、Microsoft Office 2010 を購入しました。 実は、我が家にあった Office は 2000。。 正確な発売日は分かりませんが、バージョンナンバーにして実に 10年ぶりのバージョンアップとなりました。

きっかけは、WordCamp Yokohama でおでさんがつくってくれたパワーポイントの修正をするときに OOo だとやっぱりうまくなかったこと(笑) あと、OSC もあったので購入しました。

office201002 

Access があるとたまに便利なので、Professional 版に。 アップグレード版で 3万なにがしでした。(Office 2000 が プレミアム版だったので下げるともったいない感もあり)

普段、事務所では 2003 が多いので噂のリボンインターフェースは初めて使います。 :)

office201001

ALT からのショートカットが分かりやすくでてくれるので、複数ストロークショートカットがやりやすくなったかもですね。 最近はワイドスクリーンが多いので、リボンも横に配置できればいいのになぁと思いましたが、よく言われるほど悪いとは思いませんでした。

まぁぼくの場合、エクセルとかは前からメニューとかアイコンとか使わないで、ショートカットキーでしか操作していないからかもですが…(笑) あと描画系のアプリで、Visual Studio で実装されている、図形の配置が使えるようになったのは便利ですね。

てなわけで、Windows 7 + Office 2010 とようやくモダンな環境に。 あとは、Visual Studio 2010 が入ればいいのですが、こちらはいまのところ Express 版でがまんの子しています。

Jul 25 2010

Groovy のスクラップコードと Eclipse 3.6 Helios

コンピュータでの作業中に、定型的なテキストファイルをつくったり、加工したりなどの効率化を図りたいときがあります。

こんなとき手元でぱっと動くプログラム言語があると便利です。 Linux なんか使っていると Perl とか Ruby とかすぐ動くのでそちらという手もありますし、Windows なら Excel VBA とか?

そんな一つの方法で、Eclipse 立ち上げて仕事しているのなら Groovy が便利かもしれません、、というわけで使いそうな Groovy のプログラム断片をメモしておきます。

Groovy 言語は Java を拡張して連携できるようなスクリプト言語です。

Groovy – Wikipedia

GroovyはJVM上で動作する言語処理系および言語の名称であり、Javaとの直接的な連携を特徴とする。例えばGroovyからすべてのJava SE APIや、Javaで書かれた任意のサードパーティ製のコンパイル済みのライブラリなどを呼び出すことができる。言語の記述能力としては、Javaで記述できることは、無名内部クラスの定義など一部の例外を除き基本的にGroovyでも記述することができる。逆に言うとJavaで記述できない機能は記述できないが、Javaと同様にC言語などで書かれたネイティブメソッドなどは呼び出すことができる。

groovy-eclipse という Eclipse 用のプラグインが提供されており、これ入れておけば実行環境が簡単につくることができます。 最終的には JVM で動くコードができるので、隣の人につくったプログラム動かしてもらうのも簡単だという利点もあるですね。

Eclipse向けのGroobvy開発プラグイン「Groovy-Eclipse 2.0」 登場 – SourceForge.JP Magazine  オープンソースの話題満載

Groovy Eclipseプロジェクトは1月15日、「Eclipse」向けプラグイン「Groovy-Eclipse 2.0」を公開した。Eclipse環境でGroovy開発を構築するもので、EclipseのJava開発機能に匹敵するレベルの支援機能を提供するという。

というわけで、使いそうな断片集です。 ぼくはその場に応じて適当につかっているだけなので、間違っていたらごめんなさい。 メモレベルです。

作業用に、Eclipse のプロジェクトをひとつつくっておいています。

groovy10 

まずは文字列操作編。

// 部分文字列取得
println "テストです。"[3..-1]
 
// 文字列長さ取得
println "Lengthのテストです。".length()
 
// 文字列分割
"split1,split2,split3".split(",").each { str ->
    println str
}

 

結果は上から、

です。
13
split1
split2
split3

 

となります。 日本語も思った通り処理されます。

次は文字列マッチ系。

// 正規表現マッチ判定(完全一致)
if("hiromasa" ==~ /.+masa$/) {
    println "mutch!"
}
 
// 正規表現マッチ判定(部分一致)
if("hiromasa" =~ /masa$/) {
    println "mutch!"
}
 
// 正規表現マッチ取得
"stronger, stranger, walker, hiromasa".eachMatch(/(\w+?er),/) { all, match ->
    println match;
}
 
// 正規表現マッチ置換
println "stronger, stranger, walker, hiromasa".replaceAll(/\w+?er/, { match ->
    match[0].toUpperCase() + ((match.size() > 1) ? match[1..-1] : '')
})

 

結果は、

mutch!
mutch!
stronger
stranger
walker
Stronger, Stranger, Walker, hiromasa

 

こんな方向で。

次は、リストとマップ。

// リスト
def lists = ["test1", "test2", "test3"]
lists.each { value ->
    println value
}
 
// マップ
def maps = ["key1":"apple", "key2":"orange", "key3":"mango"]
maps.each { key, value ->
    println key + " = " + value
}

 

こんな感じでまわせます。 結果はご想像通りの方向で(笑)

次はファイル処理系。

// ファイル読み込み
new File("file/readme.txt").eachLine { line ->
    println line
}
 
// ファイル書き出し
new File("file/writer.txt").withWriter { line ->
    line.println("hoge")
    line.println("moge")
}

 

読み書きともクロージャ渡す感じで。 オープンクローズ、異常系を勝手にやってくれます。 便利あるね。

最後に、便利そうなの。

// 回数指定ループ
(0..2).each { counter ->
    println counter
}
 
// 埋め込み文字列
def lines = ["line1", "line2", "line3"]
def number = 1
lines.each { value ->
    println "${number} : ${value}"
    number++
}
 
// 長い文字列
def gstr = """\
改行できますぞ。
改行できますぞ。
改行できますぞ。\
"""
println gstr

 

文字列系がいろいろ拡張されているようです。

これくらいあればあとは知恵と勇気でなんとかなるかと。 困ったら Java そのまま呼べちゃうので、それでパッと回避するのが吉かもしれません。 ライブラリ jar 入れれば、すぐその機能を使えるのも楽ですね。

てなわけで、Groovy でした。 :)

さて、先日でました Eclipse 3.6 Helios をちょっと評価がてら最近使っております。

helios01

事務所では Windows XP / JavaEE 版をつかっていますが特に不具合はなさそうです。 最近流行のプログラムのマーケット的なところからプラグインの導入ができるようになりました。

helios02 

毎回、Subclipse のアップデート探していたりしていたので、便利かもしれません。 ぼくの使い方では、あとは JavaEE では劇的に便利になるのはないかな。。

家では、PHP for Developer 版を導入してみました。

Windows 7 対応がされているハズなのですが、うちの環境だとジャンプリストとかがうまく動作しませんでした。 右クリックが無反応でした。(うちだけかな)

Linux 版もいれて、3.5 ガニメデ で存在していた「ボタンが押せなくなる」 SWT の不具合が解消しているのを確認しました。 ただ、PHP のでかいコード表示すると、無反応になった後ヒープエラーがでることも確認。。 パーサがバグってるのかも。

というわけで、全般的にはうちでは 3.6 はまだ様子見という感じです。 引き続きウォッチしていこうと思います。 :)

Jun 12 2010

Ubuntu 10.04 と デスクトップガジェット Screenlets

モニタを 16:9 の フルHD にしてみると、普通のアプリケーション利用中は横が結構余ることに気がつきます。 特にブラウザとかですね :)

というわけで、俄然実用性を増す(!?)デスクトップガジェット。 昔から Linux では screenlets というのを使っていますが、小ネタに再度ちょこっと紹介です。

Information – Screenlets.org

Screenlets are small owner-drawn applications (written in Python) that can be described as "the virtual representation of things lying/standing around on your desk". Sticknotes, clocks, rulers, … the possibilities are endless.

Ubuntu 10.04 ではパッケージに入っていますので、パッケージマネージャから screenlets でインストールできると思います。 実は本体は最近バージョンアップしてなくてちょっとしんなりなのですが、 スクリーンレット自体はいまも新作がいろいろな方から発表されています。

Eyecandy for your GNOME-Desktop – GNOME-Look.org

Python でかけまして、個別スクリーンレットの起動自体も Python スクリプトの実行だけでいけますので、ランアンドデバッグもしやすく自分で作成するのも比較的簡単です。 :)

てなわけで、ぼくが今使っているやつを。

screenlets01

右上から、時計、リソースメータ、スライドショー、お天気、Impluse、フォルダビューみたいなの。 です。 スライドショーは、しょこたんブログ RSS から画像を抽出するように改造されています。。(笑)

なかでもグライコスクリーンレットの Impluse さんがおしゃれなので動画にて。。 動画だとコマ落ちしちゃってますが、本来はもっとスムーズです。

実は Ubuntu 9.10 くらいから動きがおかしくなっていまして、タイミングが遅いというか、サンプリング数が少ないという状態でがっくりしていたのですが、どうやら pulseAudio の設定でなんとかなるようです。

/etc/pulse/deamon.conf の、プライオリティや nice 値、デフォルトサンプリングレートを 48000 にしたり、default-fragments を適当にいじっていたら直るようです。(サウンドカードにもよりそう)

Impluse の C 側のソースも追っていたのですが、サンプル数の部分を合わせないとだめ、、、とかそういうことの気がしますがはっきりとは分かりませんでした。

この設定は、他のアプリでの音声発生が遅れるパターンでも有効なようなので、該当の人はいじってみるといいかもしれません。

さて、Impluse さん、夜、暗い部屋でグライコがちらちらしているのは結構おしゃれです。

是非是非。 :)

May 17 2010

Java + LWJGL + OpenGL で 2D ゲーム

先日、事務所の先輩と話をいたしておりまして、ゲームつくりますか、やろうやろう、みたいな進行に :)

ということでとりだしてきました、 OpenGL の Java ラッパー LWJGL。 OpenGL で古き良き 2D 描画をなんとか再現してやろうかと奮闘中であります。

Web で 3D を描く WebGL とかも同じような感じですし、iPhone/touch も Android も OpenGL ですし最近あちこちに OpenGL があふれていますね。

てなわけで、LWJGL というのは、Java 向けにかかれたゲームライブラリで、基本的には OpenGL (や音声、入力部)への薄いラッパです。

lwjgl.org – Home of the Lightweight Java Game Library

LWJGL provides developers access to high performance crossplatform libraries such as OpenGL (Open Graphics Library) and OpenAL (Open Audio Library) allowing for state of the art 3D games and 3D sound. Additionally LWJGL provides access to controllers such as Gamepads, Steering wheel and Joysticks. All in a simple and straight forward API.

OpenGL のコマンドを native に変換してくれる static メソッドがいっぱいある感じで、Linux、Windows、Mac、Solaris と各 native jni が用意されているので、Java と組み合わせることでいろんな環境でゲームなどのプログラムを動作させることができます。

これが速いし、みなさんに twitter で試していただいたところ、Windows、Linux、Mac の各 32/64bit でちゃんと動作したりしてなかなかよくできているようです!

Ubuntu 10.04 / 64bit での動作。

sprite01

Windows 7 / 32bit での動作。

sprite02 

すばらしいっ。

で中身の方なんですが、ぼくはゲームのプログラムというと CPU のクロックが 4MHz とか 8MHz だった時代(間違えのようなクロックですが本当です)でしかやったことがなかったので、どうしていいのやら(笑)

なんとなくイメージ的に 2D でも 3D の機能をつかって、四角いポリゴンをつくってそこにテクスチャーをはってスプライトや背景を実装するというのは知っていたので、あちらこちらのソースを参考につくってみました。

  • キャラクタスプライト。 小さな GL_QUADS をたくさん表示させて実装。 RGBA の透過と、1テクスチャに複数のアニメパターンを描いて切り替えて表示するのも実装。
  • マップ型 BG面。 配列をよんでチップを選択してテクスチャからタイルパターンを FBO(Frame Buffer Object)に描画して 1枚絵にしてから貼り付けて実装。
  • 1枚絵の BG面。 ただでっかいテクスチャを貼り付けただけ。 だとつまらなかったので、ピクセル(フラグメント)シェーダを登録してライト的な効果をつけてみた。

こういうやり方があっているのかどうか、まったく分かりません。 むしり取った衣笠と併せて超手探りです(笑)

ソースとかまだめっちゃくちゃで試している状態ですが、もし気になる方がいらっしゃいましたら実際に動かしてみてください。 Java Web Start を使っていますので、以下をクリックして「プログラムで開く」してもらえれば、大抵の環境でそれとなく動くと思います。

jws 

(Ubuntu の方は sun-java6 じゃないとだめかもです。 OpenJDK は未確認)

リソースとかまだ借り物ですごめんなさい。 作成中のものがおいてありますので、ここで書かれているものより機能が追加されているかもしれません。

てなわけで、環境によっては 1000フレームを超えるとのことで、恐るべき時代ですね。 (よしともさんいつもありがとうございます!)

昔は処理速度稼ぐために「描かなくていいところは描かない」ことが基本でしたが、いまなんかフルフレームで全描換えですもんねぇ。 8bit 時代は画面クリアするだけでどれほどかかったことか(笑)

などと遠い目をしつつもうちょっとがんばってみたいと思います。 :)

May 11 2010

EPSON 複合機のスキャナをネットワーク越しで使う

ある日、我らが MMRT Daily Life を拝見しておりますと、Ubuntu 10.04 にプリンタの設定をされているではないですか。 そうだ、忘れていた! ということで、ぼくも Ubuntu にプリンタ設定をやろうとして、はたと思い出す。

そうだ、複合機のスキャナをネットワーク越しに使おう!(←いんすぱいあざねくすと)。。

Ubuntu10.04とMP600 – MMRT daily life

ウチのMP600はNASにぶら下がったネットワークプリンタなのですが、さすがにスキャナーは使えません。ってか、XPでも無理! 買替えるならLinuxにも強い最近評判のブラザーがいいのかなぁ?とか妄想中です。 :)

うちの EPSON PM-A890 はプリンタ + スキャナの複合機、これが USB で CentOS に接続されています。 NAS につなぐのと一緒ですね。 :)

普段は Windows からネットワークプリンタとして使われていますが、Masayan さんと同じようにこの接続形態にするとスキャナが PC から使えない、というわけででてくる、sane-backend のお話です。

sane01

sane に関しては昔ずいぶん苦戦して設定したもんですが(そしてなんか安定しなくて使っていなかった)、CentOS も新しくしたし意外とすんなりいくのではという淡い期待の元作業開始。

Linux でスキャナを使うのが sane という一連のパッケージで、アプリケーションがスキャナフロントエンドとバックエンドにプログラムが分かれています。 フロントエンドとバックエンドはネットワーク越しに通信できるので、これを利用してネットワークスキャナにしてあげる感じです。

てなわけで、まずはバックエンド、スキャナが USB でつながっている CentOS 側の設定。

sane-backend のインストール、EPSON の Linux ドライバのインストール。

Linuxドライバー|アヴァシス株式会社

ホーム > 製品/サービス > Linuxドライバー

ドライバの .rpm をダウンロードした上でこんな感じでした。 依存関係でひとつおこられたので、libtool-ltdl パッケージを入れています。

# yum install sane-backends
# yum install libtool-ltdl
# rpm -ivf iscan-2.24.0-4.i386.rpm 

/etc/sane.d/dll.conf に epkowa が入っていることを確認。(なければ追加です)

#umax_pp
umax1220u
v4l
#
# The following backends are not included in the sane-backends distribution
# If you want to use them, download them from their webpages and read their
# documentation 
#
# HP OfficeJet backend homepage: http://hpoj.sf.net/
# Uncomment the following line if hpoj is installed:
#hpoj
epkowa

ドライバが読まれているか sane の scanimage コマンドで確認。

$ scanimage -L
device `epkowa:usb:001:003' is a Epson (unknown model) flatbed scanner

epkowa デバイスでてきたら、ばんざい。 :)

でもって、ネットワーク経由で sane-backend を起動するために、xinetd のインストールと、conf の設定。 saned ファイルをつくって xinted を restart です。

# yum install xinetd
# cat /etc/xinetd.d/saned 
service sane-port
{
    disable     = no
    port        = 6566
    socket_type = stream
    wait        = no
    user        = root
    server      = /usr/sbin/saned
}
# service xinetd restart

6566 ポートを iptabels でふさいでいたら開けてあげます。これでバックエンド側の準備は完了です。

次はフロントエンド。 まずは Ubuntu 10.04 からやってみます。

10.04 のデフォルトインストールに Simple Scan というアプリが入っています。 これも sane を使っていますので、sane の以下のファイルを編集してネットワークを見に行かせます。 192.168.0.100 はバックエンドをいれた CentOS の IP アドレスです。

$ cat /etc/sane.d/net.conf 
# This is the net config file.  Each line names a host to attach to.
# If you list "localhost" then your backends can be accessed either
# directly or through the net backend.  Going through the net backend
# may be necessary to access devices that need special privileges.
# localhost
192.168.0.100

これで Simple Scan を起動してスキャンボタンをおせばネットワーク越しにスキャナが動いてスキャンされるハズです。 Simple Scan はその名の通りシンプルなので、別アプリ xsane をいれると以下のように詳しい感じでスキャンできます。

sane02

次は Windows。

Windows でスキャナを使うときは Twain というのを使うことが多いと思いましたが、Twain と sane をブリッジしてくれる SaneTwain というアプリがあります。 とりあえず、これに Sane のフロントエンドが含まれていますのでこちらで。(実は Windows 7 で Twain の動かし方が分からなかった。。

SaneTwain

When I bought a new scanner some time ago, I chose one which was supported by SANE, as it seemed logical to me to connect it to my Linux server, so I could use it from my regular Windows desktop, or from my laptop.

ScanImage.exe を動かして、バックエンドの IP アドレスを指定します。

sane03

設定も細かくできますね。

sane04

よい。 :)

さてさて、スキャナも使えるようになったしようやく次は Ubuntu からプリンタを。。

ずがーん! 64bit 版のバイナリがないっ!

64bit 問題勃発。。(笑)

実は EPSON さん Linux ドライバはソースも公開されているので、コンパイルすれば 64bit 版のドライバつくれるのですが、相次ぐ依存関係の欠如のため今日はダウン。。 また次回に。。(←弱い。。

May 11 2010

Ubuntu Netbook Remix に XBMC をインストール

先日インストールしました Ubuntu 10.04 Netbook Remix の調子がいいので、IdeaPad 動作用にマルチメディアプレイア XBMC を動かしてみました。

Netbook Remix もフル画面インターフェースを準備していますが、XBMC も基本フル画面なので相性がいいかなという趣旨でしたが、やはりこれがなかなかよい。 16:9 液晶をもつネットブックをポータブルプレイアするのにちょうどいいのではないでしょうか。 :)

About  XBMC

XBMC is an award-winning free and open source (GPL) software media player and entertainment hub for digital media.

XBMC は初代 XBOX をはじめいろいろなプラットフォームで動作しますが、ここでは Ubuntu Netbook Remix で動かしています。 PPA にリポジトリがありますので、インストールは簡単。

HOW-TO install XBMC for Linux on Ubuntu, a Step-by-Step Guide – XBMC

If you are using Ubuntu 9.10 or higher, you have the option of a more streamlined install. Load the terminal window and issue the following:

数行、こぴって終了です。

一応言語ファイルも日本語が用意されていますが、ファイル名とかに日本語だすには自前でフォント描いている関係で日本語のフォントの登録が必要です。

hiromasa.another o)» Blog Archive » XBMC for Linux 日本語化

てなわけで、Linux 版の日本語化の方法です。 XBMC は FreeType ライブラリで自前でフォントをレンダリングするので、フォントを内蔵しています。 Ubuntu の .deb からいれると、フォントのありかは以下です。

てなわけで、16:9 液晶で動かすとこんなかんじ。 デフォルトテーマがバージョン 9 から変更になっています。 前のも好きでしたが。 :D

xbmc01

ネットワーク越しでの動画ファイルや音楽ファイルの再生も可能です。 いろんなプロトコル対応していますが、とりあえず Windows のファイル共有(samba)ごしに。

xbmc03

動画の場合はこんな感じにサムネイルが。 音楽の時も、画像が埋め込まれていたらでてくれます。 ありこちぬるぬる動くのが気持ちいいです。  :)

オープンソースで育っているだけあって、再生に関するいろいろ配慮が行き届いているのが特徴で、たとえば動画のサイズやその際に使われる拡大系のフィルター、またインターレース解除などの設定がリアルタイムに設定できます。

screenshot004

これがやっぱり便利ですね! またキーボードのマルチメディア系のボタン(音量とか)にも独自に対応していますので、フルスクリーンインターフェースの中できれいに操作することができます。

てなかんじで、ネットブックがあっというまにポータブル DVD プレイアになりますので、なかなか便利かもしれません。 ローデフの動画なら ATOM でもコマオチなどはせずにスムーズに動きます。

ATOM + ION + HDMI の小型 PC にいれてテレビに映したりもしてみたいのですが、それはまだ叶わぬ夢。。 :D