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 より、らい子ちゃんでてまいりました。 😀

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

そうなのです。

[tegaki]どのうちの機械より速い。。[/tegaki]

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 でやったらいらっとする類のプログラムです(笑)

[tegaki]できたっ[/tegaki]

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 は初めて触りますが、勝手知ったるなんとかでなんとなかるでしょう? 😀

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

[tegaki]やぁ、動いた![/tegaki]

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

sakura2011072401

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

さて、何して遊びましょう。 🙂