textile 文書をつくる

なにか文書をつくるとき、、まぁ普通は Microsoft Word とかワープロになると思うのですが、操作が煩わしかったり、バージョン管理できなかったり、なんとかテキストに近い形で書きたいことっていうのは結構あると思います。

docbook や XHTML を直書きするのはあまりにも冗長、tex は環境つくるの大変だしそこまで大がかりでなくてもよい、、なんてとき Eclipse Mylyn の WikiText モジュールが良いかもしれません。 実は Eclipse のリッチテキストエディタのキャレット制御も優秀でなかなか使えます。 :)

Eclipse 上で動きますので統合環境のバージョン管理やローカルヒストリーも使えますし、各種キーボード操作、増分検索やカーソル飛ばしも同じ。 Eclipse 使っている方はお試しを。 J2EE 版をお使いならスタートは簡単。 .textile 拡張子のファイルをつくってダブルクリックするだけです。

エディタはこのような感じです。 たとえば textile 記法で文書をつくります。 設定により他の wiki 記法にも切り替えられます。 ヘッダとかはリアルタイムで表示変換されます。

textile10

ちゃんと word-warp ・折り返しするエディタです。簡単あるね。

Eclipse 上ですので当然(?) CTRL + SPACE とか ALT + \ とかの補完機能も使えますので wiki 記法分からなくても大丈夫。 ぼくもよく知りません(笑)

textile15

画面下タブに Preview がありますので、CTRL + PageUP とかで切り替えると画像展開を含むプレビューをすることができます。

ちなみに、ここで使われているインターナルブラウザは Eclipse Indigo からは標準で WebKit になるはずです。スクリーンショットは Ubuntu の Eclipse/SWT の WebKit です。

Windows だと iTunes か Safari が入っていないと Gecko になるのかな。(SWT のソース確認していませんが C:\Program Files\Common Files\Apple\Apple Application Support\webkit.dll を見ている気がします)

textile11

脚注利用時に存在しない番号を指定してしまった場合等、リアルタイム警告などもるようです。

アウトラインビューをだせばアウトラインだせます。

textile12

編集時のフォントはいつもの設定画面より WikiText 部分。 Text Font をプロポーショナルフォントで設定すればさながらワープロです。

textile14

ちなみに、この SWT のエディタはちゃんとオンザスポット入力で、文字列の途中挿入でも横の文字をずらすキャレット制御タイプなので文書入力も違和感ありません。(確定後ちょっとばたつきますが)

Windows のテキストエディタでも、この動作ができないのありますので優秀です。 Linux のテキストエディタだと、Eclipse と gedit くらいしか出来るのをみたことがありません。。

プレビュー部分は CSS で表示制御できます。 フォントなど気に入らなければ body タグとかに font-famiry を追加して設定しちゃうとよいでしょう。 また画像も展開しますので img に width きっておくと、ブラウザ縮小ではありますがいい感じで表示できます。

textile13

できた文書は docbook や HTML にコンバートすることもできます。 docbook のほうが素直そうな感じでした。 残念ながら脚注とかは正確な docbook タグにはなっていないようでしたが XML ですので別系で加工すると面白いことが出来るかもです。

てなわけで、お手軽に wiki 記法でテキスト文書つくれてバージョン管理できますので、そんな環境をお探しの方は試してみるといいかもしれません。 :D

Redmine 1.2.2 + Eclipse Mylynでチケット管理

前々からバージョンが上がっているのに気がついてはいたのですが、、Eclipse 用の Mylyn Redmine Connector が Redmine の最新バージョンに対応されましたのでようやく試してみました。

うちのローカルサーバには Redmine がたっていまして、その wiki の機能やバージョン管理システム連携を使って、作業のメモなどを残しています。 Redmine プロジェクトの扱いが簡単なのでこういった用途にも便利です。

redmine30

本来的にはチームで作業するためのもので、そのうち仕事でも使う機会があるかなぁとたまにいじっていたりするのですが、できればいいと思っていたのが Eclipse 連携。 Eclipse には Mylyn というチーム作業用の仕組みがありますが、これが Redmine に対応すればOKです。

ということで、以前から Eclipse Redmine Mylyn Connector に注目していました。

SourceForge.net: Project redmin-mylyncon

This project is an Eclipse Mylyn Repository plug-in for the Redmine bug tracking / project management application.

Eclipse 3.7 and Redmine 1.2 now also supported

The new Eclipse-Plugin 0.3.0  supports now Eclipse 3.5, 3.6 and 3.7, the new WS-API-Plugin 2.7.4 supports now Redmine 1.0, 1.1 and 1.2.

ついに最新バージョンの Redmine と Eclipse にも対応しましたので今回はこれを導入してみました。 Redmine 1.2.2 + Eclipse 3.7.1 で Redmine は JRuby + Tomcat + PostgraSQL で動作させています。

Redmine Mylyn Connector は2つの要素で構成されており、Redmine に入れるプラグインと Eclipse のプラグインの2つを併せて導入します。 ちょっと sourceforge でのファイルの配布状況が分かりづらいのですが、Redmine プラグインは git から最新版を、Eclipse プラグインは dev のアップデートサイトからインストールしています。

Redmine プラグインは、Redmine ディレクトリの vender/plugins に git より

git clone git://redmin-mylyncon.git.sourceforge.net/gitroot/redmin-mylyncon/redmine-mylyn-connector

のような感じでファイルを格納します。 ぼくは JRuby で warble して tomcat にデプロイしているので、一回 war を作り直しています。

redmine13

こんな感じで Redmine に認識されたら、管理画面より REST API を enable にします。(一番下)

redmine14

できたら Eclipse 側にプラグインをいれます。 いつもの Install new software より

こちらの dev チャンネルを登録。

redmine00

これでプラグインをインストールします。

できたら Eclipse Mylyn の Task Repository ビューを表示してリポジトリを登録します。

今入れたコネクターを選択します。

redmine10

Redmine サーバの設定をします。 Label はお好みで…。

redmine11

Validate Setting が通ったら Finish できます。:)

Task List ビューも表示させて、Preference で自動取得間隔などが設定できます。

redmine12

あとはチケットの検索クエリー等を設定すれば…。

じゃんじゃん!

redmine21

よい感じです。 :)  新規チケットはこんな感じで書けます。 ちょっとエディタが遅いのですが、、textile なども利用できます。

redmine22

上は Eclipse on Ubuntu の図。 Windows ではこんな感じです。

redmine23

リポジトリで更新があると Eclipse からこんな感じで通知が来ます。

redmine25redmine24

左 Windows、右 Ubuntu。 Linux 版 Eclipse の日本語が入った Eclipse Notification スクリーンショットは珍しいかもですね(笑)

redmine20

通知後すぐチケットを開くと昔のデータが出てしまうことがあるようなので、更新ボタンを押す運用にするとよいと思われます。

ということでなかなかうまいこと動くようです。 何か機会があるまでひとりで寂しく使ってみようと思います。。(笑)

Windows 7 を導入

なんといまさら感がある記事名ですが、ここで Windows 7 をデスクトップPCに導入しました。 発端はこの PC(Shuttle SN78SH7)が最近の Linux のカーネルと大変相性がよくないこと。。

正確に言うと GeForce 8200 チップセットか USB コントローラとの相性がよくないようです。 USB の差位置によって起動したりしなかったり、4コアある CPU のコアが 1つしかしなくなってみたり。。 Ubuntu 11.10、Fedora 15 ともにインストーラからして起動せず。 Ubuntu 11.04 はなんとか起動していたのでだましだまし使っていました。

検索をすると同様の不具合事象がでてくるのですが、won’t fix ということで、ハードウェア側に不具合がある様子でした。 古い機械なので BIOS のアップデートももうでていませんので、しょうがないので Linux から Windows にという趣旨です。

まぁとはいえ、Windows じゃないとできないこともいろいろありますのでよしとしましょう。 逆にすごぶる調子のよい ThinkPad のほうを Ubuntu 専用機とすることにしました。 :)

ここ数年、家では Windows をあまり触っていなかったので最新の Windows のアプリケーションは新鮮です。

win701

よかったのが Thunderbird くん。 少し前までは IMAP の性能が悪くてうちの IMAP を読ませるとほとんど停止したような状態になっていたのですが、今回試してみたところとてもいい感じになってみました。

win702

めんこすですね。 :)

Windows はいろんな機器が動かせられるので、DTM 系も久々に復活。 これがあったのでやる気も出てきたというものです。 Cubese くん。

win703

あとは Eclipse などなど。

ぼくは Eclipse が動いていてくれれば OS は何でもいいっていうの部分もあるのですが、Linux を好んで使っているのはインターネットのサーバとの相性がよいというところ。 相手も Linux なことが多いのでいろいろ便利です。

Windows からもインターネットサーバに接続する必要がありということで、ターミナルエミュレータ導入。 Poderosa が開発再開しているのをここで知りました。

Poderosa Project on sourceforge

Poderosa 4.3 ベータ版が開発中です… このトピック、日本語フォーラムではこのトピックを見てください.

フォーク版 5.7 にはさらに新機能があります (ソースコードは無し). このトピックを見てください.

win706

オリジナルの Poderosa は画面描画がおかしくなる時があったりしていたのですが、これらのパッチをあてながら開発が進んでいるとのことです。 ただ tmux などを起動すると未対応のエスケープシーケンスとの警告がでたりしましたので、ウォッチしつつ teraterm を導入。

win705

さすがの安定感なのですが、、こちらも tmux を起動すると漢字がでなくなったりするようです。

win704

ちょっと見づらいですが、漢字部分がアンダースコアになっているのが分かります。 素の emacs では漢字が出ますので、、なんでしょうね。 ちょっと詳しくないので分かりませんが、Poderosa でも同様でしたのでエスケープシーケンスになにかあるのかもしれません。 tmux 側のせいかもしれません。

そのほかはそつなく動いていい感じです。 Windows のお遊び系のアプリも最近全然触っていませんでしたのでちょっと遊んでみようと思います。 :)

いろいろやってきた。

先日、おでこさんからいろいろなものがお届けされてまいりました。

ありがとう、ありがとう! 。 そして無茶ぶりもありがとう。 :)

syutage01

Microsoft 日本が世に放った奇跡、クラウディアさん。 そして WordPress グッズ。

などなど。 さんくすぼす。

110924_twitter-odeko

…。

わぷーがやってきた – MMRT daily life

妙にハードルをあげるのはやめてください。(苦笑)

さて、おもしろ担当はひろまさに任せるとして・・・←やりおったな

本当におやめください…。

これでいいですか?

syutage02

早速買ってきた。 全然意味不明?

うん。。

これでいいでしょうか。。

昔はこんなずっとノリだったんですよ、この hiromasa.* ブログ。

なんか思い出しました(笑)

Redmine 1.2.1 on JRuby/Tomcat

少し前に VPS の Tomcat7 にデプロイしようとして失敗していました、Redmine 1.2.1 さんですが本日また再挑戦してみました。 前回の失敗は JRuby のバージョンを間違っていたという寒いオチなことが分かりましたので、今回は割とすんなりいきました。。 :)

Rednime は Ruby 1.8 系で動作なのですね、見落としていました。

Redmineのインストール | Redmine.JP

RedmineはたいていのUNIX, Linux, Mac, Windowsシステム等、Rubyが利用可能なシステムで実行できます。

Redmineの各バージョンで必要となるRailsのバージョンは以下の通りです。

というわけで、対応する JRuby は 1.5 系。 前回は 1.6 系つまり Ruby 1.9 でやってしまっていたのでした。 とほほ。

ちなみに JRuby を使うとこういう時に便利で、たとえば OS の Ruby パッケージとか気にしなくても依存関係なくポータブルにインストールすることができます。

というわけで、環境は以下の感じです。

[root@capibara redmine-1.2.1]# java -version
java version "1.6.0_26"
Java(TM) SE Runtime Environment (build 1.6.0_26-b03)
Java HotSpot(TM) 64-Bit Server VM (build 20.1-b02, mixed mode)
 
[root@capibara bin]# /opt/apache-tomcat-7.0/bin/version.sh 
Using CATALINA_BASE:   /opt/apache-tomcat-7.0
Using CATALINA_HOME:   /opt/apache-tomcat-7.0
Using CATALINA_TMPDIR: /opt/apache-tomcat-7.0/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /opt/apache-tomcat-7.0/bin/bootstrap.jar:/opt/apache-tomcat-7.0/bin/tomcat-juli.jar
Server version: Apache Tomcat/7.0.19
Server built:   Jul 13 2011 11:32:28
Server number:  7.0.19.0
OS Name:        Linux
OS Version:     2.6.18-274.3.1.el5
Architecture:   amd64
JVM Version:    1.6.0_26-b03
JVM Vendor:     Sun Microsystems Inc.
 
[root@capibara redmine-1.2.1]# jruby -v
jruby 1.5.6 (ruby 1.8.7 patchlevel 249) (2010-12-03 9cf97c3) (Java HotSpot(TM) 64-Bit Server VM 1.6.0_26) [amd64-java]

適当に JRuby 1.5 を展開してパスを通して Redmine に必要な gem を追加。

# jruby -S gem install rack -v=1.1.1 --no-rdoc --no-ri
# jruby -S gem install rake -v=0.8.7 --no-rdoc --no-ri
# jruby -S gem install i18n -v=0.4.2 --no-rdoc --no-ri
# jruby -S gem install activerecord-jdbcpostgresql-adapter -v=0.9.7  
# jruby -S gem install warbler

ポスグレで動作させるために、activerecord-jdbcpostgresql-adapter を入れていますが、最新バージョンであるとプロジェクト操作時に以下のエラーで落ちてしまうため、0.9.7 に落としています。

   1: ActiveRecord::StatementInvalid (ActiveRecord::JDBCError: ERROR: column "issues.id" must appear in the GROUP BY clause or be used in an aggregate function: SELECT COUNT(*) AS count_all, tracker_id AS tracker_id FROM (SELECT DISTINCT "issues".id FROM "issues"  LEFT OUTER JOIN "projects" ON "projects".id = "issues".project_id  LEFT OUTER JOIN "issue_statuses" ON "issue_statuses".id = "issues".status_id  LEFT OUTER JOIN "trackers" ON "trackers".id = "issues".tracker_id WHERE (((projects.id = 1 OR (projects.lft > 1 AND projects.rgt < 2))) AND issue_statuses.is_closed='f') AND (projects.status=1 AND projects.id IN (SELECT em.project_id FROM enabled_modules em WHERE em.name='issue_tracking'))  GROUP BY tracker_id ) count_all_subquery):

Rails の O/R が生成している SQL が不正してしまっているように見えますね。 とりあえず、古いバージョンならうまく動くようです。

次にポスグレに DB を作成。

# su - postgres
-bash-3.2$ createuser -P redmine
Enter password for new role: 
Enter it again: 
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) y
Shall the new role be allowed to create more new roles? (y/n) n
CREATE ROLE
-bash-3.2$  createdb redmine -O redmine
CREATE DATABASE
-bash-3.2$ psql -l
        List of databases
   Name    |  Owner   | Encoding  
-----------+----------+-----------
 postgres  | postgres | SQL_ASCII
 redmine   | redmine  | SQL_ASCII
 template0 | postgres | SQL_ASCII
 template1 | postgres | SQL_ASCII
(4 rows)

Redmine の database.yml を作成。

[root@capibara redmine-1.2.1]# pwd
/root/install/redmine-1.2.1
[root@capibara redmine-1.2.1]# cat config/database.yml
# MySQL (default setup).
 
production:
  adapter: jdbcpostgresql 
  driver: org.postgresql.Driver
  database: redmine
  host: localhost
  username: redmine 
  password: 
  encoding: utf8

この状態で Rails の DB マイグレートを実行。

# jruby -S rake generate_session_store
# jruby -S rake db:migrate RAILS_ENV="production"

Tomcat にインストールしたいので warble。 まずは config 作成その後に war 作成。

# jruby -S warble config
# cat config/warble.rb 
# 下の方に追加
config.dirs = %w(app config lib log vendor tmp lang)
config.gems << "activerecord-jdbcpostgresql-adapter" 
config.gems << "i18n" 
config.gem_dependencies = true
config.webxml.rails.env = 'production'
config.gems["rack"] = "1.1.1" 
config.gems["rake"] = "0.8.7"
config.gems["activerecord-jdbcpostgresql-adapter"] = "0.9.7" 
# jruby -S warble

あとはできた war を Tomcat7 にデプロイしてあげれば動作します。

添付ファイル格納域が WEB-INF/files になってしまいますので、シンボリックリンクで消えないところに飛ばしてあげています。(これは config で設定できたような気もします)

といわけで、

redmine51

無事動きました。 :)

さて全然関係ないですが、以上 VPS に SSH つないで操作していますが、実は今までさぼってターミナルマルチプレクサ系を入れていませんでした。 yum update 中に回線切れたら、がびーんということで、併せて本日インストール。

tmux です。 CentOS 5.7 にはパッケージないっぽかったので、ソースからインストール。 以下のライブラリに依存するようでしたので、devel を入れています。

# yum install libevent-devel ncurses-devel

あとは、普通に ./configure && make && make install でいけると思います。 :D

redmine50

らいらい。と。

ThinkPad Edge E525 キタ!

頼んでいました ThinkPad Edge E525 さんがやってまいりました。 といってもぼくのじゃなく実家用なのですがっ。 セットアップがてら撮影会でございます。 :)

ThinkPad の Edge シリーズは実は初めてさわります。 15インチ系でテンキー付がありましたので、そちらを注文。 クアッドコア、メモリ4G で 5万なにがしっていうんですがら、いやになってしまいます(笑) 実際には Microsoft Office をつけて、クーポン割引適応で 6万5千円くらい。

手前が Edge さんで、奥が愛機の X61。 手触りしっとり、モニタの周りは丸みを帯びていてよい感じのデザインです。

edge01

HDD ランプとかってないんですね。 代わりに(?) ThinkPad の i の丸が光っておしゃれです。 ちなみに、キーボードを照らすランプはなし。

edge02

キーはアイソレーションタイプ。 まぁこの辺は、X61 のいわゆる ThinkPad キーボードにはかないませんが、ガタツキもなく違和感はありませんでした。

ただちょっと困ったのが、Fn の扱い。 マルチファンクション(?)側がデフォルトにあたっていて、普通のファンクションキーが Fn 押しになっています。

edge03

普通の人だとこっちのほうが便利なのかな。 なんとなく理由はわかりますが、自分で使うときにちょっと困る。。(笑) 調べると BIOS でデフォルト変更が可能でした。 また、Fn と CTRL の入れ替えもできるようです。

BIOS 起動は初期状態 Fn + F1。 BIOS 最適化かかっていて、あっちゅーまに起動するので心して押してください。 :)

edge04

というわけで、お待ちかね!

AMD クアッドコア A6-3400M APU (1.4GHz/最大2.3GHz 4MBL2)(+ AMD Radeon™ HD 6520G グラフィックス) ということで、RADEON 機ですが、Ubuntu の対応はどうでしょうか。

いつも X61 と IdeaPad で起動しています USB 外付け HDDをさして 起動です。

edge05

無事 Ubuntu より、らい子ちゃんでてまいりました。 :D

無線 LAN は標準認識、あとは RADEON のプロプラエタリドライバ 入れたら Unity も起動しましたぞ。 一晩ほど外付け HDD の育った Ubuntu で遊んでいましたが、問題は見当たらずむしろ良好な感じでした。

そうなのです。

どのうちの機械より速い。。

orz

Groovy + XLSBeans でエクセルから HTML に流し込み

Java のエクセルを読むライブラリに XLSBeans さんがありますが、こちらを Groovy と組み合わせて使うと非常に便利ですのでメモがてらご紹介です。 実は以前も書いていたりしたのですが改めて。

Groovy + XLSBeans でエクセルでできた設計書からソースコードを作成したり、なにかテキストファイルを作るとき等に簡易的な DB としてエクセルが利用できたりします。 ここでは後者、サンプル的にエクセルで書いた日記を HTML に出力するのをやってみます。 :)

というわけで、まずは XLSBeans。

XLSBeans – Project Amateras

ExcelとJavaBeansをJava 5のアノテーションでマッピングするためのライブラリです。

Java のライブラリですので普通に Groovy から呼び出せます。 ここでつくるようなワンショットプログラムは Groovy と非常に相性が良いです。

まずは元データとなるエクセルファイルを作成します。 うちは Linux なので OOo にて。

xlsbeans01

こんな感じに元データをつくります。 できたらこれを bean にマッピングしてあげます。

@Sheet(name="Sheet1")
public class Nikki {
  @HorizontalRecords(tableLabel="日記", recordClass=NikkiLine.class)
  public List<NikkiLine> lines;
}
 
class NikkiLine {
    @Column(columnName="日付")
    public String date
    @Column(columnName="天気")
    public String tenki
    @Column(columnName="コンテンツ")
    public String content
}

アノテーションでシートの構造を指定してあげます。 注目は X/Y 系の位置情報がないところで、これが非常に便利です。 数えなくていいですし、列が増えたとしてもそのままで大丈夫。 :)

で、bean の定義ができたらエクセルファイルをプログラムから読んであげます。 Groovy なら .groovy ファイルのトップレベルに上のソースと以下をかくだけ。

Nikki nikki = (new XLSBeans()).load(
    new FileInputStream("xls/日記.xls"), Nikki.class)

引き続きやりたいことをプログラムしていきます。 ここでのサンプルでは先ほどのエクセルから .html ファイルを生成していきます。 Groovy お得意の Builder をつかって HTML タグ文字列を意識せず生成できますぞ。

全体の .groovy はこんな感じになります。

import groovy.xml.MarkupBuilder
import net.java.amateras.xlsbeans.*;
import net.java.amateras.xlsbeans.annotation.*;
 
Nikki nikki = (new XLSBeans()).load(
    new FileInputStream("xls/日記.xls"), Nikki.class)
 
for(NikkiLine line : nikki.lines) {
    def date = new Date("$line.date")
    def writer =
        new File("html/${date.format('yyyyMMdd')}.html").newPrintWriter('UTF-8')
    def html = new MarkupBuilder(writer)
    def name = "${date.format('yyyy/MM/dd(E)')}の日記"
 
    html.html('lang':'ja') {
        head {
            meta('http-equiv': 'Content-Type', content: 'text/html; charset=UTF-8')
            title(name)
        }
        body {
            h1(name)
            p("今日は${line.tenki}")
            p("${line.content}")
        }
    }
 
    writer.close()
}
 
@Sheet(name="Sheet1")
public class Nikki {
  @HorizontalRecords(tableLabel="日記", recordClass=NikkiLine.class)
  public List<NikkiLine> lines;
}
 
class NikkiLine {
    @Column(columnName="日付")
    public String date
    @Column(columnName="天気")
    public String tenki
    @Column(columnName="コンテンツ")
    public String content
}

日付のフォーマットやマークアップビルダー、ファイル処理など Groovy パワーをいただきつつ、ちょいちょい 10 分でかけますね。 たぶん VBA でやったらいらっとする類のプログラムです(笑)

できたっ

xlsbeans02

先ほどのエクセルからこんな感じの(複数の) HTML が生成されます。

<html lang='ja'>
  <head>
    <meta http-equiv='Content-Type' content='text/html; charset=UTF-8' />
    <title>2011/08/01(月)の日記</title>
  </head>
  <body>
    <h1>2011/08/01(月)の日記</h1>
    <p>今日は晴れ</p>
    <p>今日は何事もなかった。</p>
  </body>
</html>

Groovy からお手軽にエクセル読めてそれをもとに処理ができるのはかなり適応範囲が広いと思います。 最近もかなり助けられました。。ありがとうございますっ :)

てなわけで、Keep on groovy – ing !

さくらの VPS と Apache Tomcat7

突然ですが、さくらの VPS を借りてみることにしました。 :)

当初はこの VPS に家から VPN でつなぎっぱなしにして、うちのローカルサーバの一部の機能を外に出す使い方を考えていたのですが、まぁ実際そこまでする要件もなさそうなので断念(一応、Android からの接続もできたのですが)。

というわけで、Groovy とか Rails とか PHP 以外のアプリケーションが動作するお遊びサーバとしてスタートです。

最近だとたまにこのサイトでもでてきます、Cloud Bees とか dotCloud とか無料の PaaS つかってもその手のアプリは割と簡単に動かすことができるのですが、無料だとドメインマッピングに制限があったり、ちょっと不自由。 お金を払うとなると VPS と同じくらいかもっと高い料金になりますので、自由度の高いほうに転んだ感じです。

あ、ちなみにここ .another はそのままコアサバです(笑)

というわけで、アプリケーションサーバ選択。 OS はさくら標準の CentOS 5.5 のままです。

Jetty にしようか Tomcat6 、いやいや Tomcat7 でしょ、とか、ここで GlashFish とか。。 しばし考えて、あまり根拠もなく Tomcat7 が選択される。 7 は初めて触りますが、勝手知ったるなんとかでなんとなかるでしょう? :D

Java6 は Oracle 提供の .rpm を、Apache httpd と PostgreSQL は CentOS のパッケージのものを。 Tomcat7、Groovy は それぞれからの提供のものを /opt に展開インストール。

そういえばバーチャルホストでトム設定するの初めてだったので微妙にてこずりました。。

Groovy のパス設定。(ファイルつくる)

[root@capibara ~]# cat /etc/profile.d/groovy.sh 
# groovy
PATH=/opt/groovy-1.8/bin:${PATH}

ポスグレの表領域位置指定。(標準で /home にパーティションきられているので表領域を /home/postgres に移動。 サービス起動前に前に以下のファイルつくる)

[root@capibara postgres]# cat /etc/sysconfig/pgsql/postgresql 
PGDATA=/home/postgres
[root@capibara postgres]# chkconfig postgresql on
[root@capibara postgres]# service postgresql start

ポスグレ initdb 等。(たとえばユーザつくって redmine の DB 作成の図)

[root@capibara home]# su - postgres
-bash-3.2$ 
-bash-3.2$ initdb -D /home/postgres/
-bash-3.2$ createuser -P redmine
Enter password for new role: 
Enter it again: 
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) y
Shall the new role be allowed to create more new roles? (y/n) n
CREATE ROLE
-bash-3.2$ createdb redmine -O redmine
CREATE DATABASE

Tomcat7 バーチャルホスト設定。 $CATALINA_HOME/conf/server.xml の Engine に追加。

<Engine name="Catalina" defaultHost="localhost">
  <Host name="apps.maple4ever.net"
     appBase="apps.maple4ever.net"
     unpackWARs="true"
     autoDeploy="true" />
</Engine>

$CATALINA_HOME/apps.maple4ever.net のディレクトリを作成。 ちなみに adduser tomcat して、$CATALINA_HOME 配下を tomcat 権限に、また Tomcat は同ユーザで commons-deamon 起動しています。クラスパスの jar が 6 と違うので要注意。

このディレクトリに .war 入れるとファイル名をコンテキストパスとしてデプロイされます。

Apache のバーチャルホスト及び mod_proxy_ajp 設定。 指定のコンテキストパスを Tomcat になげます。 /etc/hosts や /etc/sysconfig/network なども設定のこと。

[root@capibara www]# cat /etc/httpd/conf.d/proxy_ajp.conf 
 
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
 
NameVirtualHost *:80
 
<VirtualHost *:80>
   ServerName unknown 
   <Location />
      Order deny,allow
      deny from all
   </Location>
</VirtualHost>
 
<VirtualHost *:80>
   ServerName apps.maple4ever.net 
   <Location /captcha-grails>
      ProxyPass ajp://apps.maple4ever.net:8009/captcha-grails
   </Location>
   <Location /click-examples>
      ProxyPass ajp://apps.maple4ever.net:8009/click-examples
   </Location>
</VirtualHost>

Location でおしり / なしにすると、スラつけなくてもいい感じに飛ばしてくれるようです。

てなかんじで、端折っているのであんまりメモにもなっていませんが(笑) 実際には、iptables の設定なども加わるでしょう。

Groovy + Grails のサンプルアプリ。(そのうち消えます)

sakura2011072402

Apache Click のサンプルアプリ。(そのうち消えます)

sakura2011072403

やぁ、動いた!

さすがに JVM だけあってさくさく動きますね。

sakura2011072401

さくら VPS はメモリ 1G のサーバにしていますが、これで残りメモリ 400M ほど。 ポスグレがフル稼働していないのでなんともですが、アプリが 1つか 2つは動きそうな感じです。

さて、何して遊びましょう。 :)

スマートフォン対応。

このサイトをスマートフォン表示対応してみました。 対応といっても基本 WordPress 3.2 のデフォルトテーマ twentyeleven にしただけなのですが。。(笑) リキッドデザインでそのまんま横幅が狭いブラウザで表示される感じで面白いですね。 :)

よく分かってないで、デフォルトから子テーマでちょこちょこソースに手を入れてしまっているので、たぶん iPad とかでみるとおかしなことになる予感なのですが、、とりあえず手持ちの Galaxy と iPod touch のブラウザでなんとなく見えたので良しとします。。

PC 版。

smart03

Galaxy SII webkit 版。

 smart02

iPod touch Safari 版。

smart01

twentyeleven テーマ設定で 1カラムにしていますが、2カラムでもうまいことサイドバーがおちて表示できるようになっているようです。

ぼくが修正した点としては、画像表示についてデバイスの横幅を超えると横幅合わせはしてくれるのですが、アスペクト比はにょろ~んと狂ってしまうようでしたので固定ピクセル指定して収まるようにしています。 ソースコード表示ととか、youtube 貼り付けがはみ出すのは仕様ということで。。(笑)

まだまだ直したいところあるのですが、とりあえずスモールスタート。 少しずつ変えていきたいと思います。

あ、そうそう。 ブログ始めて 5年? 6年? 初めてのワンカラムです。

MMRT の影響か!?。(←いつの話だ

プログラミング Groovy キタ!

楽しみにしていました書籍「プログラミング GROOVY」が Amazon さんより到着しました。 日本初(発)の Groovy 本ということで、著者の方々も Web で Groovy のこと検索すると必ずお世話になる方ばかりですごいす :) 。。

てなわけで早速。

groovy20

出たばかりの Groovy 1.8 についても網羅されていますし、 イデオムや GDK の API が一覧できるとても良い本でした。 Groovy の歴史的経緯など背景的なことなども知ることができて楽しく読み終えることができました。 ぼくはまだ全然 Groovy のボキャブラリが少ないので、今後も座右の書として活躍です。 :)

同僚の人が、仕事で Groovy をやりはじめたようなのでお勧めしておきましょう。(←どうやら貸さないらしい(笑)

最近ぐるぐる言い出したのは、実はふと買ってみた Groovy In Action が面白すぎたせいなのです。 おもしろい技術書というの非常に大切な存在ですね。 In Action 1st は既に絶版(Amazon で 1.5万円くらい。。)ですので、プログラミング Groovy がその役目を果たすのではないかと思います。 :)

てなわけで(??)、本日は Groovy スクリプトをひとつかいてみました。

以前、shiroica さんがつくられていました XREA/CORESERVER への SSH 許可ホストを登録する Python スクリプトの Groovy 移植版です。 なんとなく移植(笑)

XREAのサーバーに設置したWordPressを自動バックアップする環境を整える

さて、とりあえず手動で登録すればよいことは分かりましたが、登録の有効期限は30日間だけに限られています。また、出先でSSHで繋ぐために別の IPアドレスを登録した場合、上書きされてしまい、再度登録しないと繋がらなくなってしまいます。そのため、ホスト情報の登録も自動化する必要があります。そこでこんなスクリプトをPythonで書いてみました。

Groovy は JVM と Groovy の jar ひとつあれば動作しますので Windows でも動作させやすいのではないかと思います。(下のソースは手元の Ubuntu で動かしていますので1行目にシェバングが入っています)

動作環境のグローバル IP アドレス調べて、レンタルサーバの管理画面に GET で送信してあげるプログラムです。

#!/opt/groovy-1.8.0/bin/groovy
 
// ここを書き換えてください
def server = 'サーバ名'
def username = 'ユーザ名'
def password = 'パスワード'
def ipaddressResponder = 'グローバルIPを教えてくれるPHP等のURL'
 
def adminURL = "http://$server/jp/admin.cgi"
 
if(!(ipaddressResponder.toURL().text ==~
    /\d+\.\d+\.\d+\.\d+/)) {
    println "Failed ($ipaddress)"
    System.exit(1)
}
 
def values =
    [ 'id' : username, 'pass' : password,
    'remote_host' : ipaddress, 'ssh2' : 'SSH登録']
def param = ""
values.each {
    param += 
        "${it.key}=${URLEncoder.encode(it.value, "UTF-8")}&"
}
param = param[0..param.size()-2]
 
if(!("$adminURL?$param".toURL().getText("Shift_JIS") =~
    /データベースに追加しました。/)) {
    println "Failed (unmutch)"
    System.exit(1)
}
 
System.exit(0)

 

Linux で groovy シェルを動かすと Exception したときに echo $? が 1 返してくれるようなので、例外処理は思い切って削除しちゃいました。

ほとんど調べることなくホントにのりでかけますので便利ですねぇ。 こんな感じじゃない?って書き方が普通に動くのはちょっと感動します。 Java だけでなく、Web 制作で PHP とかやられている人にもとっつきやすいのではないでしょうかっ。

さて大抵の OS でいけるこの Groovy スクリプトの簡単な動作のさせ方は、、

  1. とりあえず上のソースの 1行目を消す。 ソース内にあるサーバ設定とかする。
  2. Groovy をダウンロード してきて、アーカイブの中に入っている embeddable\groovy-all-1.8.0.jar を上のソースを保存したファイル(たとえば registhost.groovy)といっしょのフォルダに置く。
  3. コマンドプロンプトやコンソールをそのディレクトリに開いて以下のコマンドを入力。
java -jar groovy-all-1.8.0.jar registhost.groovy

 

Keep on Groovy – ing!