2009年12月12日土曜日

Mercurial でファイルの大小文字で困ったときに、

Macなどの大小の区別はするがファイルとしては1つ扱いのOSだと、
途中でファイル名の大文字を小文字にかえる場合は、削除して再作成
でないと危険のようです。

Pushでへんなメッセージが出たのに気づかずにアップロードしてしまうと、
別の人がClone使用としたりすると、「ファイル名に大文字小文字の問題がある」
というメッセージが出てうまくPullできません。

そこで、大小文字を区別するOSか、Macなどでは大小文字を区別するファイルシステム
をマウントさせてそこにCloneして修復作業をします。

問題となるファイルが見えたので、削除します。

$ ls
00PREPARE.sql 12ENQUE_PRICE_EVENT_PROC.sql
01CREATE_SCHEMA.SQL 21PRICE_CHG_TRIGGER.sql
01CREATE_SCHEMA.sql 51INSERT_QUOTATION.sql
02CREATE_QUEUE.sql 81TESTSCRIPT.sql

$ rm *.SQL


次は、hg commit して push なのですが、commit すると、

$ hg commit
変更なし

となり、削除したファイルが???です。以下のようにすればいいと分かりました。


$ hg status
! src/main/resources/sql/_CREATE_ALL_.SQL

$ hg remove src/main/resources/sql/_CREATE_ALL_.SQL
$ hg commit
$ hg push http://xxxxxx

2009年12月4日金曜日

Websphere MQ JMSからのメッセージをMQSTRにする

通常のJMSのTextMessageで送ると、MQ側ではRFHという形式になってしまい。そのままでは受け取れない。その場合は、以下の資料にあるように、「targetClient=1」を指定するとよいのだが、この指定の場所が Desitination であることが厄介だ。

参考:[S2JMS]S2JMSを使ってみる~アウトバウンド通信編~CommentsAdd Star

MQのマニュアルを見ると、以下のようにすればいいとあった。
以下の例では、キュー・マネージャーHOST1.QM1 上のキューQ1 に接続し、すべ
てのメッセージを非持続性および優先順位5 として送信します。
ioQueue = session.createQueue("queue://HOST1.QM1/Q1?persistence=1&priority=5");


つまり、キューの宛先指定に単なる文字でなく、URI形式で以下のように書けばいいということだ。
queue:///TGT_QUEUE_NAME?targetClient=1


ホスト名を省略する場合は、///となることに注意。

これは、以下のマニュアルの381ページあたりにあった。

d8864272.pdf

Websphere MQ での名称文字列 大文字/小文字

ずーーーっと、大文字のみで区別なしだと思っていたのだが、
JMSからの接続でどうにもつながらず、以下のエラーがでまくっ
たために調べてみると、区別があることが分かった。

javax.jms.InvalidDestinationException: MQJMS2008: MQ キュー cmt_spo_nrml のオープンに失敗しました


参考文献は、MQ設計虎の巻: 第8回「トラブル・シューティング」

MQのオブジェクト(キュー、キューマネージャー、チャネル等)は大文字、小文字を識別します。
プログラムなどで、キュー名、キューマネージャー名を指定する場合は、大文字、小文字に注意してください。
特に、MQSCコマンドのDEFINEでキュー名を指定する場合、明示的に小文字で作成する場合には、' '(シングルクォーテーション)で囲む必要があります。
シングルクォテーションを使用せずに、小文字で指定すると、自動的に大文字に変換されて定義されます。
MQでは、便宜上、オブジェクト名を、大文字に統一することをお勧めします。


うーーん、何事にも先達はあらまほしき、、、

2009年12月2日水曜日

MQ6.0+JMS 初期設定 on Ubuntu 9.10

1) MQユーザにスイッチ
su - mqm

2) QueueManagerを作成
crtmqm QM1

3) スタート
strmqm QM1

4) リスタースタート
runmqlsr -t tcp -m QM1 -p 1515 &

5) JMS環境
cd /opt/mqm/java/bin
source setjmsenv

6) 設定変更(当初は LDAP なので、File に変更)
vi ./JMSAdmin.config
----------
INITIAL_CONTEXT_FACTORY=com.sun.jndi.fscontext.RefFSContextFactory
PROVIDER_URL=file:/opt/mqm/tmp
----------

7) JMS用のキューを作成
runmqsc QM1 < MQJMS_PSQ.mqsc

8) データ授受用のローカルキュー
runmqsc QM1
> DEF QL(C.SND.NRML)
> DEF QL(C.SND.CTRL)
> ......
> end

9) MQ/JMS ブローカを起動
strmqbrk -m QM1

10) JMSAdmin でConnectionFactoryなどを定義
./JMSAdmin

def qcf(QCF) qmanager(QM1) hostname(localhost) port(1515) channel(SYSTEM.DEF.SVRCONN) transport(CLIENT)
def xaqcf(XAQCF) qmanager(QM1) hostname(localhost) port(1515) channel(SYSTEM.DEF.SVRCONN) transport(CLIENT)
def q(c_s_nrml)) queue(xxxxxx) qmanager(QM1)

つぎや、GlassFishのRA(ResourceAdaptor)定義へ続く

2009年11月27日金曜日

Websphere 7 on Solaris10

ここを参考にした。
WebSphere MQ V7.0 を Solaris 10 x86-32 にインストールする

メモリなどのresource設定は、いつのまにか、/etc/system を直接書き換えるのではなく、projectとして登録する形式になっていた。
これは、Oracle10gなども同じで、こんな風にする。

projadd -G mqm -c "WebSphere MQ default settings" ¥
-K "process.max-file-descriptor=(basic,10000,deny)" ¥
-K "project.max-shm-memory=(priv,4GB,deny)" ¥
-K "project.max-shm-ids=(priv,1024,deny)" ¥
-K "project.max-sem-ids=(priv,1024,deny)" group.mqm

もちろん、前もってmqm:mqmのユーザ:グループを作っておく必要がある。
ちなみに、定義を変更する場合は、以下のようになる。

projmod -K "process.max-file-descriptor=(basic,10000,deny)" group.mqm

内容の確認は、以下もコマンド。

projects -l

Ubuntu 64bit で、32bit アプリが動かない

IBMのWebsphere MQ v6.0 client を入れようとして気づいたのですが、
IBM製のjvmが起動しないで、以下のようなエラーになる。ファイルは存在しているが、32-bitの古いものだった。


$ ./lap/IBMJava2-142/jre/bin/java
bash: ./lap/IBMJava2-142/jre/bin/java: not found [No such file or directory]

$ ls -l ./lap/IBMJava2-142/jre/bin/java
-rwxr-xr-x 1 korabo korabo 43012 Apr 26 2008 ./lap/IBMJava2-142/jre/bin/java

$ file /bin/bash
/bin/bash: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, stripped

$ file ./lap/IBMJava2-142/jre/bin/java
./lap/IBMJava2-142/jre/bin/java: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.2.5, not stripped


以下のキーで検索したら、
ubuntu 64bit ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.2.5, not stripped

このページに答えがありました。
Installing 32-bit third party apps on 64-bit Ubuntu

そこで、 LSB (Linux Standard Bas ) のパッケージをインストールします。
説明では、lsb-coreを入れればいいとあったのですが、間違えてlsb全体を入れてしまいました。(Ubuntu9.10では、lsb-base,lsb-core,lsb-releaseなどいくつもlsb関連のパッケージがあります)

さきほどよりは進んだのですが、、、

$ ./lap/IBMJava2-142/jre/bin/java -version
java version "1.4.2"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2)
Classic VM (build 1.4.2, J2RE 1.4.2 IBM build cxia32142ifx-20041203 (142SR1+80507) (JIT enabled: jitc))
libgcc_s.so.1 must be installed for pthread_cancel to work
libgcc_s.so.1 must be installed for pthread_cancel to work
Aborted


これは、「ia32-libs」パッケージをいれればいいようなので、インストールしてみると、、、

$ ./lap/IBMJava2-142/jre/bin/java -version
java version "1.4.2"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2)
Classic VM (build 1.4.2, J2RE 1.4.2 IBM build cxia32142ifx-20041203 (142SR1+80507) (JIT enabled: jitc))

どうやら動き出したようです。ふーーーー。

2009年11月26日木曜日

Adempiere の初期設定

OSSのERPである、Compiere/Adempiereを調査している。
Compiereは、基本はフリーで使用できるのだが、PDFライブラリ部分が3rdPartyの独自製品であり、付属しているがお試し版であり、印刷すると透かしが入ってしまう。
一方Adempiereはすべてがフリーなのだが、日本語に関しての翻訳ファイルが優勝配布となっている。

しかし、どちらも資料が少ない。Compは日本語訳の本が1冊だけでているが、Ademは、Compから派生したため、さらに資料が少ない。

まず、やることは新しい会社の登録なのだが、ここで難航している。
クライアント(会社などの独立した組織のこと)を作成するには、COAという会計の勘定科目一覧をインポートする必要があるのだが、この日本語訳が見つからない。そこでなんとかして英語の散布路を翻訳して入れてみたが、文字コードが不明なのでとりあえずUTF-8で進める。しかしそこからが今一わからない。英語版のTutorialを見ながら勉強中。=> どこかの会社で導入したいところありませんかね?

2009年11月25日水曜日

Ubuntu 9.10 マシンを変更したら解像度がSVGAに (その2)

パッケージの更新をしたら、またしてもSVGA(800x600)になってしまった。

動的に変更する方法が分かったので、メモしておく。

1)解像度設定を調べる
xrandr
  モニタ(Screen)もなしで、モードが640x480、800x600 の2つのみ

2)表示したい解像度の設定を取り出す
cvt 1280 1024

3)希望する解像度ををモードとして新規作成する
xrandr --newmode "1024x1027_60.00" xxxxxxxxx

4)出力機(VGA1)にモードを追加
xrandr --addmode VGA1 "1024x1027_60.00"

5)モード切替
xradr --output VGA1 --mode "1024x1027_60.00"

これで画面が動的に変更されます。

2009年11月21日土曜日

Ubuntu 9.10 マシンを変更したら解像度がSVGAに

XGA以上の解像度が選択できず、プルダウンに「800x600」, 「800x640」しかなくなってしまった。
結局は、XServerの再設定が必要なのだが、ここらへんに説明があった。それと、ここも参考にした。

1)自分の設定ファイルを削除(自分の環境では、/etc/X11/xorg.conf は存在しない)
rm ~/.config/monitors.xml

2)gdmを停止(gnome desktop manager: kdmの人は自分でしらべてね)
sudo /etc/init.d/gdm stop

3)コンソールログインになるので、再度ログインしてから、以下のコマンドでXServerを再設定
sudo dpkg-reconfigure xserver-xorg

4)gdmを再起動
sudo /etc/init.d/gdm start

5)マシンの再起動(または、Xの再起動?)
以後は、正しい階層度が選択できるようになった

2009年11月9日月曜日

Identity管理

ログオン情報を共有したり、シングルサインオンしたい場合に利用するIdentity管理、最近は「OpenSSO」というSunのOpenSourceが注目されているようだ。

■OpenSSO:Open Web Single Sign-On
 Web上でSSO(シングルサインオン)を実現するための技術
 「Sun Java System Access Manager」をベースとしたJavaベースの実装
 内部で、「OpenDS」を使用
参考:http://www.weblio.jp/content/OpenSSO

■OpenDS:Open
 Sunが主導するオープンソースの Java LDAP サーバ

■その他の関連品:
OpenID: 複数の連携サイトの1つのIDでログイン

2009年11月5日木曜日

Adempiere のDB接続設定

Oracleで、"jdbc:oracle:thin:@//host:1521/xe" では接続できないとのエラーが発生していた。

どうやら、設定は2箇所あるようで、1つは、utils\myEnvironment.bat であり、もうひとつが、AdempiereEnv.properties のようだ。

2009年11月3日火曜日

ロジックの構造

if文が多すぎるとコードが読みにくくなるから、減らした方がいいというアドバイスを随所で見かけると思うが、減った分はどこへいってしまうのだろうか?

1)単にコードブロックを分離しただけ
  ブロックとしてのコードにはifは減っているが、他の部分に分散しただけ
  もっとも、それだけでずっと読みやすくなるが、分離による弊害もある
2)不要なifをなくしたもの
  条件としてありえないものや、不変なものを省略する
  たしかにifは減るが、かえって分かりにくくなる場合もあると思うのだが、、、
3)OOの多態性を使用したもの
  ifの代わりにパラメータによる自動バインディングや、Interfaceへの動的実装代入など(DI)
  プログラムの代わりに言語システム側にやってもらう
  あったはずのifが言語システム内部に埋没するので、かえって分かりにくいかも、、

こう考えると、根本的にロジックを改革しなかぎり、ifは減っていなのであり、減ったように見せかけているだけということになる。

この部分にDSLを導入するのは効果が高い気がするので、どうやったらいいかが研究課題だ。

2009年10月23日金曜日

TikiWikiとJoomlaのBanner

同じバナーでも、表示のコンセプトが全く異なる。

Joomalでは、バナー領域は複数のバナーを指定しておいて指定の優先度で表示させたり、ランダムに表示させたりと複数であることを想定して作られている。

一方、TikiWikiでは、バナー領域は1つのバナーを表示することを前提としており、表示の曜日や時間帯を細かく指定できる。

まとめるこ、こんな感じ。
CMS バナー領域の表示数 時間別制御
Joomla 複数 不可
TikiWiki 単数 基本

2009年10月21日水曜日

Redmine:Tips

環境のレポートが次のコマンドで出力できる。

~/redmine/script/about
----------
About your application's environment
Ruby version 1.8.7 (i386-solaris2.11)
RubyGems version 1.3.1
Rails version 2.1.2
Active Record version 2.1.2
Action Pack version 2.1.2
Active Resource version 2.1.2
Action Mailer version 2.1.2
Active Support version 2.1.2
Edge Rails revision unknown
Application root /export/home/webadm/redmine-0.8.5
Environment development
Database adapter mysql

About your Redmine plugins
Redmine Estimations plugin 0.0.1
Redmine Hudson plugin 1.0.0
Redmine Schedules plugin 0.4.1.5
----------


SQLite3は、これ。

sqlite3 --version
----------
3.6.7
----------


Defectなどを送る場合に使用でき縷々。

Redmine:Plugin migrateでエラー:その3

環境:redmine 0.8.5 / sqlite3 3.6.7 / OpenSolaris 06/09

そろそろけりをつけたい。

前回の最後のエラーは、「SQLException: table "schedule_entries" already exists: 」であったが、これは、当該テーブルがすでに作成されえいるから発生している。その原因は元となったPlugin「redmine_schedules」が同じテーブルを使用しており作成済みになっていたからであった。

そこで、一旦古い方のPluginを削除して、再度インストールする。

sqlite3 ~/redmine/db/redmine.db <<EOD
delete from plugin_schema_info where plugin_name='redmine_schedules';
drop table schedule_entries;
drop table availability_entries;
drop table schedule_closed_entries;
drop table schedule_defaults;
.quit
EOD

rm -r ~/redmine/public/plugin_assets/redmine_schedules


念のために、新しい方も削除しておく。

sqlite3 ~/redmine/db/redmine.db <<EOD
delete from plugin_schema_info where plugin_name='redmine_goyello_schedules';
drop table schedule_entries;
drop table availability_entries;
drop table schedule_closed_entries;
drop table schedule_defaults;
drop table scheduled_issues;
.quit
EOD


やっと終わるのか???

rake db:migrate_plugins RAILS_ENV=production
----------
(in /export/home/webadm/redmine-0.8.5)
Migrating engines...
Migrating actionwebservice...
Migrating acts_as_activity_provider...
..........
== 4 CreateScheduledIssues: migrated (0.1081s) ================================
..........


はあーーー、何とか成功。長かった。

Redmine:Plugin migrateでエラー:その2

環境:redmine 0.8.5 / sqlite3 3.6.7 / OpenSolaris 06/09

rakeではデバッグオプションがないため、オプション付きにしたものを$HOME/binに用意して実行した。


cd
mkdir bin
cd bin
cp /var/ruby/1.8/gem_home/bin/rake ./
vi ./rake
----------
#!/usr/ruby/1.8/bin/ruby -d <= 先頭にオプションを指定
----------


すると、以下のような感じになったがまだよくわからず。

Exception `Errno::EEXIST' at /usr/ruby/1.8/lib/ruby/1.8/fileutils.rb:243 - File exists - /export/home/webadm/redmine-0.8.5/public/plugin_assets/redmine_hudson/images
Exception `MissingSourceFile' at /usr/ruby/1.8/lib/ruby/vendor_ruby/1.8/rubygems/custom_require.rb:31 - no such file to load -- holidays
Exception `Errno::EEXIST' at /usr/ruby/1.8/lib/ruby/1.8/fileutils.rb:243 - File exists - /export/home/webadm/redmine-0.8.5/public/plugin_assets/redmine_schedules/javascripts
Exception `Errno::EEXIST' at /usr/ruby/1.8/lib/ruby/1.8/fileutils.rb:243 - File exists - /export/home/webadm/redmine-0.8.5/public/plugin_assets/redmine_schedules/stylesheets
Exception `TypeError' at /export/home/webadm/redmine-0.8.5/vendor/plugins/gloc-1.1.0/lib/gloc.rb:191 - can't convert Hash into String
Exception `TypeError' at /export/home/webadm/redmine-0.8.5/vendor/rails/activesupport/lib/active_support/dependencies.rb:506 - can't convert Hash into String
Exception `TypeError' at /export/home/webadm/redmine-0.8.5/vendor/rails/activesupport/lib/active_support/dependencies.rb:513 - can't convert Hash into String
rake aborted!
can't convert Hash into String


しかたないので、gloc.rb を編集して情報出力するようにする。

cp -p redmine/vendor/plugins/gloc-1.1.0/lib/gloc.rb ~/ <= オリジナルの退避
vi redmine/vendor/plugins/gloc-1.1.0/lib/gloc.rb
----------
_verbose_msg {"Reading file #{filename} [charset: #{file_charset} --> #{dest_charset}]"} <= どうやったらこれが出力されるか??
print "Reading file #{filename} [charset: #{file_charset} --> #{dest_charset}]" <= これを追加
----------


実行してみると。以下の場所が分かった。

Reading file /export/home/webadm/redmine-0.8.5/vendor/plugins/redmine_hudson/lang/de.yml [charset: utf-8 --> utf-8]Reading file /export/home/webadm/redmine-0.8.5/vendor/plugins/redmine_hudson/lang/ja.yml [charset: utf-8 --> utf-8]Reading file /export/home/webadm/redmine-0.8.5/vendor/plugins/redmine_goyello_schedules/lang/en.yml [charset: utf-8 --> utf-8]Reading file /export/home/webadm/redmine-0.8.5/vendor/plugins/redmine_goyello_schedules/lang/nl.yml [charset: utf-8 --> utf-8]Reading file /export/home/webadm/redmine-0.8.5/vendor/plugins/redmine_goyello_schedules/lang/es.yml [charset: utf-8 --> utf-8]Reading file /export/home/webadm/redmine-0.8.5/vendor/plugins/redmine_goyello_schedules/lang/pt-br.yml [charset: utf-8 --> utf-8]Reading file /export/home/webadmException `TypeError' at /export/home/webadm/redmine-0.8.5/vendor/plugins/gloc-1.1.0/lib/gloc.rb:191 - can't convert Hash into String
Exception `TypeError' at /export/home/webadm/redmine-0.8.5/vendor/rails/activesupport/lib/active_support/dependencies.rb:506 - can't convert Hash into String
Exception `TypeError' at /export/home/webadm/redmine-0.8.5/vendor/rails/activesupport/lib/active_support/dependencies.rb:513 - can't convert Hash into String
rake aborted!
can't convert Hash into String

(See full trace by running task with --trace)
/redmine-0.8.5/vendor/plugins/redmine_goyello_schedules/lang/it.yml [charset: utf-8 --> utf-8]Reading file /export/home/webadm/redmine-0.8.5/vendor/plugins/redmine_goyello_schedules/lang/pl.yml [charset: utf-8 --> utf-8]


この、最後の pl.yml が問題で、plがどこの国かここ調べたら、ポーランドで。pl.ymlはポーランド語用のLocaleファイルなのだが、形式が間違っていた。(config/locale/pl.yml の形式)

 正しい形式:
head -2 redmine/vendor/plugins/redmine_goyello_schedules/lang/en.yml
----------
label_bulk_schedules_index: Bulk schedule
label_schedules_my_index: My schedule
----------

誤り形式:
head -2 redmine/vendor/plugins/redmine_goyello_schedules/lang/pl.yml
----------
pl:
label_schedules_my_index: Moj harmonogram
----------


これを修正して、migrateを実行すると、「"?dzony vs. harmo"...」
pl.yml がUTF-8でないのかな???? この lang/pl.yml と config/locale/pl.yml を比較してみる。

ls -l vendor/plugins/redmine_goyello_schedules/config/locales/pl.yml
-rw-r--r-- 1 webadm staff 3744 2009-10-21 13:39 vendor/plugins/redmine_goyello_schedules/config/locales/pl.yml
webadm@ext-zone:~/redmine$ ls -l vendor/plugins/redmine_goyello_schedules/lang/pl.yml
-rw-r--r-- 1 webadm staff 2420 2009-10-21 18:56 vendor/plugins/redmine_goyello_schedules/lang/pl.yml


どうやらファイルが不正らしいので、コピーして1行目だけを削除して作り直す。
しかしまたまたエラー

Migrating actionwebservice...
Migrating acts_as_activity_provider...
Migrating acts_as_attachable...
Migrating acts_as_customizable...
Migrating acts_as_event...
Migrating acts_as_list...
Migrating acts_as_searchable...
Migrating acts_as_tree...
Migrating acts_as_versioned...
Migrating acts_as_watchable...
Migrating classic_pagination...
Migrating coderay-0.7.6.227...
Migrating gloc-1.1.0...
Migrating gravatar...
Migrating redmine_estimations...
Migrating redmine_goyello_schedules...
== 1 CreateScheduleEntry: migrating ===========================================
-- create_table(:schedule_entries)
rake aborted!
SQLite3::SQLException: table "schedule_entries" already exists: CREATE TABLE "schedule_entries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "user_id" integer DEFAULT 0 NOT NULL, "project_id" integer DEFAULT 0 NOT NULL, "date" date NOT NULL, "hours" float NOT NULL)

(See full trace by running task with --trace)


その3に続く。

Redmine:Plugin migrateでエラー

環境:redmine 0.8.5 / sqlite3 3.6.7 / OpenSolaris 06/09

新しいPluginを入れて、migrateしたら、以下のエラー。

SOURCE::http://github.com/GOYELLO/redmine-schedules-plugin AS-IS 20091015

rake db:migrate_plugins RAILS_ENV=production
(in /export/home/webadm/redmine-0.8.5)
rake aborted!
can't convert Hash into String

(See full trace by running task with --trace)


そこで、--trace してみると、

/export/home/webadm/redmine-0.8.5/vendor/plugins/gloc-1.1.0/lib/gloc.rb:190:in `iconv'
/export/home/webadm/redmine-0.8.5/vendor/plugins/gloc-1.1.0/lib/gloc.rb:190:in `load_localized_strings'
/export/home/webadm/redmine-0.8.5/vendor/plugins/gloc-1.1.0/lib/gloc.rb:189:in `each'
/export/home/webadm/redmine-0.8.5/vendor/plugins/gloc-1.1.0/lib/gloc.rb:189:in `load_localized_strings'
/export/home/webadm/redmine-0.8.5/vendor/plugins/gloc-1.1.0/lib/gloc.rb:188:in `open'
/export/home/webadm/redmine-0.8.5/vendor/plugins/gloc-1.1.0/lib/gloc.rb:188:in `load_localized_strings'
/export/home/webadm/redmine-0.8.5/vendor/plugins/gloc-1.1.0/lib/gloc.rb:175:in `each'
/export/home/webadm/redmine-0.8.5/vendor/plugins/gloc-1.1.0/lib/gloc.rb:175:in `load_localized_strings'
/export/home/webadm/redmine-0.8.5/config/initializers/30-redmine.rb:4
/export/home/webadm/redmine-0.8.5/vendor/rails/activesupport/lib/active_support/dependencies.rb:503:in `load'
/export/home/webadm/redmine-0.8.5/vendor/rails/activesupport/lib/active_support/dependencies.rb:503:in `load'
/export/home/webadm/redmine-0.8.5/vendor/rails/activesupport/lib/active_support/dependencies.rb:355:in `new_constants_in'
/export/home/webadm/redmine-0.8.5/vendor/rails/activesupport/lib/active_support/dependencies.rb:503:in `load'
/export/home/webadm/redmine-0.8.5/vendor/rails/railties/lib/initializer.rb:484:in `load_application_initializers'
/export/home/webadm/redmine-0.8.5/vendor/rails/railties/lib/initializer.rb:483:in `each'
/export/home/webadm/redmine-0.8.5/vendor/rails/railties/lib/initializer.rb:483:in `load_application_initializers'
/export/home/webadm/redmine-0.8.5/vendor/rails/railties/lib/initializer.rb:149:in `process'
/export/home/webadm/redmine-0.8.5/vendor/rails/railties/lib/initializer.rb:97:in `send'
/export/home/webadm/redmine-0.8.5/vendor/rails/railties/lib/initializer.rb:97:in `run'
/export/home/webadm/redmine-0.8.5/config/environment.rb:20
/usr/ruby/1.8/lib/ruby/vendor_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
/usr/ruby/1.8/lib/ruby/vendor_ruby/1.8/rubygems/custom_require.rb:31:in `require'
/export/home/webadm/redmine-0.8.5/vendor/rails/activesupport/lib/active_support/dependencies.rb:510:in `require'
/export/home/webadm/redmine-0.8.5/vendor/rails/activesupport/lib/active_support/dependencies.rb:355:in `new_constants_in'
/export/home/webadm/redmine-0.8.5/vendor/rails/activesupport/lib/active_support/dependencies.rb:510:in `require'
/export/home/webadm/redmine-0.8.5/vendor/rails/railties/lib/tasks/misc.rake:3
/var/ruby/1.8/gem_home/gems/rake-0.8.7/lib/rake.rb:636:in `call'
/var/ruby/1.8/gem_home/gems/rake-0.8.7/lib/rake.rb:636:in `execute'
/var/ruby/1.8/gem_home/gems/rake-0.8.7/lib/rake.rb:631:in `each'
/var/ruby/1.8/gem_home/gems/rake-0.8.7/lib/rake.rb:631:in `execute'
/var/ruby/1.8/gem_home/gems/rake-0.8.7/lib/rake.rb:597:in `invoke_with_call_chain'
/usr/ruby/1.8/lib/ruby/1.8/monitor.rb:242:in `synchronize'
/var/ruby/1.8/gem_home/gems/rake-0.8.7/lib/rake.rb:590:in `invoke_with_call_chain'
/var/ruby/1.8/gem_home/gems/rake-0.8.7/lib/rake.rb:607:in `invoke_prerequisites'
/var/ruby/1.8/gem_home/gems/rake-0.8.7/lib/rake.rb:604:in `each'
/var/ruby/1.8/gem_home/gems/rake-0.8.7/lib/rake.rb:604:in `invoke_prerequisites'
/var/ruby/1.8/gem_home/gems/rake-0.8.7/lib/rake.rb:596:in `invoke_with_call_chain'
/usr/ruby/1.8/lib/ruby/1.8/monitor.rb:242:in `synchronize'
/var/ruby/1.8/gem_home/gems/rake-0.8.7/lib/rake.rb:590:in `invoke_with_call_chain'
/var/ruby/1.8/gem_home/gems/rake-0.8.7/lib/rake.rb:583:in `invoke'
/var/ruby/1.8/gem_home/gems/rake-0.8.7/lib/rake.rb:2051:in `invoke_task'
/var/ruby/1.8/gem_home/gems/rake-0.8.7/lib/rake.rb:2029:in `top_level'
/var/ruby/1.8/gem_home/gems/rake-0.8.7/lib/rake.rb:2029:in `each'
/var/ruby/1.8/gem_home/gems/rake-0.8.7/lib/rake.rb:2029:in `top_level'
/var/ruby/1.8/gem_home/gems/rake-0.8.7/lib/rake.rb:2068:in `standard_exception_handling'
/var/ruby/1.8/gem_home/gems/rake-0.8.7/lib/rake.rb:2023:in `top_level'
/var/ruby/1.8/gem_home/gems/rake-0.8.7/lib/rake.rb:2001:in `run'
/var/ruby/1.8/gem_home/gems/rake-0.8.7/lib/rake.rb:2068:in `standard_exception_handling'
/var/ruby/1.8/gem_home/gems/rake-0.8.7/lib/rake.rb:1998:in `run'
/var/ruby/1.8/gem_home/gems/rake-0.8.7/bin/rake:31
/var/ruby/1.8/gem_home/bin/rake:19:in `load'
/var/ruby/1.8/gem_home/bin/rake:19

どうも、Localeらしいのだが詳細がわからず、、、その2に続く。

座右の銘

「捨てよ!固定は死なり」とは、宮本武蔵の言葉とのことだが、いいものでも固定してしまえば死んでいくものであり、死んだものをかかえているのは不健康である。

ちょうど、川の流れが途絶えると水が腐って魚が住めなくなるように、食べ物をお腹に溜め込むとお腹がはってうんこがくさくなってくるように、不要なものを捨てていく必要がある。

職人として「完璧」なものを求めたいが、時間の制約があり、求めすぎると結局役に立つものみ仕上げることができず、時間だけを浪費していくことになる。
ただし、最後までねばって完成させたという話を聞くと、「もう少し粘ってみようか」と思ってしまう。このもう少しがくせ者で、結局多量の時間を投入したあげく、「現状ではこの方式ではできない」という結論になったりする。

かといって、その場しのぎで仕事をしていくとフラストレーションもたまるし、後で痛い目をみることもある。

適切なのは、どんなポリシーなのであろうか? 「現在、すぐに使用できる範囲で時間優先で仕事をし、後からいいものがあれば入れ替える。そためには入れ替えしやすい構造にしておく」というあたりが落としどころであろうか? しかし、この「入れ替えしやすい構造」というのがまたまた難しい、、、、

Sqlite3のTIPS

環境:sqlite3 3.6.7 / OpenSolaris 06/09

初めてSlite3を触ったので備忘録。

0)特徴
ファイル1個で動作するアプリであり、サーバ部分はない。
 よって、複数のプロセスが同じファイルを使用すると最悪ファイルが破損する。
 逆に、バックアップなどは使用していない状態でファイルをコピーするだけ。
  もしかすると、動作中でもそれなりにコピーできるかもしれないが未検証。

1)起動、停止、ヘルプ

sqlite3 /xxx/yyy/dbfile.db
sqlite> .help
..........
sqlite> .quit <= 省略も可能 .q とか


2)テーブル一覧やテーブル定義

sqlite> .tables
.........
sqlite> .schema table-name
..........


3)管理ツール
sqlite - Management Tools - 本家で紹介しているツール
SQLite ControlCenter 日本語版
SQLite Database Browser

参考リンク:
SQLite 本家
rakuto ネット (SQLite の情報満載)
SQLiteを使うべき10の理由と5つのデメリット
SQLite

SQLは普通に使用できる模様。FunctionやSPはどこまでできるかは未検証。

Redmine:Plugin Uninstallの仕方

環境:Redmine 0.8.5 / OpenSolaris 06/09

将来のバージョンでは基本機能としてPluginのUninstallが入るようだが、現状では手動設定となる。今一分からなかったが、試行錯誤の結果で以下のようにした。

1)Plugin用DBの削除
「 redmine/vendor/plugin/プラグイン/db/migrate/xxxx」を見て、作成したテーブルを発見し、以下のようにsqlite3で削除。
***バックアップのためにDBのファイルをコピーしておくこと

sqlite3 redmine/db/redmine.db
sqlite> drop table mmmm;
sqlite> drop table sssssss;
.........
sqlite> .quit


2)Plugin用の履歴を削除
sqlite3にて以下のようにする。

sqlite3 redmine/db/redmine.db
sqlite> select * from plugin_schema_info;
......... <= 該当するPluginの名称と数字があるはず(数字はmigrateの回数?/Version番号?)
sqlite> delete from plugin_schema_info where plugin_name='xxxxxx';
sqlite> .quit


3)Web用ファイルの削除
以下のディレクトリから対象のものを削除

cd redmine/public/plugin_assets
ls
........ <= 該当するPlugin名のディレクトリがあるはず
rm -r ./xxxxxx


4)Plugin本体の削除
 単純に削除する。

cd redmine/vendor/plugin/
rm -r xxxxx


5)Redmineの再起動
Passenger経由なのでApacheを再起動

これでPLuginが消えているようだ。
参考にした所:rake db:migrate_pluginsの取り消し方 <= 自作のPluginの場合なのでファイル構成がちょっと違うようだ

Redmine:Plugin:Schedule

環境:Redmine 0.8.5 / OpenSolaris 06/09

redmine-schedules-pluginからダウンロードして、PluginをInstall
**前もって「gem install holidays」してHolidaysを入れておく必要あり。
ここのブログにも書いてあるが、結構苦労してしまった。

1)名称の問題
 単にGITから取得すると「bradbeattie-redmine-schedules-plugin-15edcc6」となるので、名称を「redmine-schedules-plugin」と変更すると、エラーが発生。ログを見ると「redmine_schedules」でないとだめとのこと。途中がアンスコになっているし、、、

2)Localeの問題
 日本語の文字列用ファイルがないので、メニューやリンクが「label_my_schedule」などのようになってしまう。
 cp redmine_schedules/lang/en.yml redmine_schedules/lang/ja.yml

とすれば、英語の正しいラベルになる。日本語にしたい人は冒頭の筆者が作成したファイルを使用すればよさそう。

3)権限の問題
 ロールの設定で使う、使わないを設定しないとレポートなどが使用できない。
MyScheduleは見えて入力できたので、これでいいのかと思ったら、、、

おまけ:インストールを通してRedmineの勘所や問題点、TIPSなどが分かってきたので、別のページにまとめる。

2009年10月19日月曜日

Solarisの状況調査スクリプト

CPUやメモリーの概況を知ることができる。

bash-3.00$ cat mstat.sh

#!/bin/sh
# for Solaris
# 080709 ST(KRB) http://code.nanigac.com/source/view/334
# 080820 ST(KRB) fix LANG as C because incompatibility of swap -s output

LANG=C
export LANG

GREP=/usr/bin/grep
AWK=/usr/bin/awk
SED=/usr/bin/sed
VMSTAT=/usr/bin/vmstat
TAIL=/usr/bin/tail
PRTCONF=/etc/prtconf
SWAP=/etc/swap
PSR=/usr/sbin/psrinfo

# PHYSICAL Memory Size

PHYS_MEM_SIZE=`$PRTCONF | $GREP "Mem" | $AWK '{print $3}'`

PHYS_FREE_SIZE=`$VMSTAT 1 2 | $TAIL -1 | $AWK '{print $5}'`
PHYS_FREE_SIZE=`expr $PHYS_FREE_SIZE / 1024`
PHYS_USED_SIZE=`expr $PHYS_MEM_SIZE - $PHYS_FREE_SIZE`
X1=`expr $PHYS_USED_SIZE \* 100`

PHYS_USED_PERC=`expr $X1 / $PHYS_MEM_SIZE`

echo "------ PHYSICAL MEMORY ------"
echo "PHYS_MEM_SIZE =" $PHYS_MEM_SIZE " MB"
echo "PHYS_FREE_SIZE =" $PHYS_FREE_SIZE " MB"
echo "PHYS_USED_SIZE =" $PHYS_USED_SIZE " MB"
echo "PHYS_USED_PERC =" $PHYS_USED_PERC " %"

# SWAP Memory Size
#-bash-3.00$ swap -s
#total: 784620k bytes allocated + 362184k reserved = 1146804k used, 5191064k available

SWAP=`/usr/sbin/swap -s`
SWAP_FREE_SIZE=`echo $SWAP | $AWK '{print $11}' | $SED 's/k//'`
SWAP_USED_SIZE=`echo $SWAP | $AWK '{print $9}' | $SED 's/k//'`


SWAP_MEM_SIZE=`expr $SWAP_FREE_SIZE + $SWAP_USED_SIZE`
SWAP_MEM_SIZE=`expr $SWAP_MEM_SIZE / 1024`
SWAP_USED_SIZE=`expr $SWAP_USED_SIZE / 1024`
X1=`expr $SWAP_USED_SIZE \* 100`
SWAP_USED_PERC=`expr $X1 / $SWAP_MEM_SIZE`
SWAP_FREE_SIZE=`expr $SWAP_FREE_SIZE / 1024`

echo "------ SWAP ------"
echo "SWAP COMMNAD =" $SWAP
echo "SWAP_MEM_SIZE =" $SWAP_MEM_SIZE " MB"
echo "SWAP_FREE_SIZE =" $SWAP_FREE_SIZE " MB"
echo "SWAP_USED_SIZE =" $SWAP_USED_SIZE " MB"
echo "SWAP_USED_PERC =" $SWAP_USED_PERC " %"

# PROCESSOR
echo "------ PROCESSORS ------"
$PSR -pv

Solaris10で個別VNCサーバ

Solaris10には普通のインストールでVNCサーバが入っているが、
デーモンとしては起動していない。以下のようにすると、ログインして
自分専用に立ち上げることが可能。

*パスには「/usr/X11/bin」を追加しておくこと。
**パスワードを最初に設定しておくこと

bash-3.00$ cat startVnc.bash

#!/bin/bash
# source $HOME/batch/bin/envsetup.bash
# --- setup passwd for vnc ---
# vncpasswd
# --- setup gdm for vnc-server ---
# vi ~/.vnc/xstartup
#[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
#xsetroot -solid grey
#vncconfig -iconic &
#exec gnome-session &

# --- start vnc-sever ---
echo "Starting vncserver, if want to kill , 'vncserver -kill :1'"
vncserver -geometry 1024x768
# --- stop vnc-server ---
# vncserver -kill :1

2009年10月17日土曜日

Joomlaをバックアップ

JoomlaPackを使用すると便利:
 変更する場所:バックアップの保存場所
  (書き込みできるディレクトリ:administrator/backups など)
参考:Joomlaの道しるべより
JoomlaPack:ソースなど
NativeTools:Windows用

2009年10月16日金曜日

Redmine

プロジェクト管理システム:
 SourceForgeみたいな仕組み

Solaris10へのインストールの方法をまとめる。

2009年10月1日木曜日

Tuning for Java on Solaris

SolarisデでJava(Seasar2)を動かすと10倍くらい時間がかかるとの
ことで、その調査。

#!/bin/bash
export JAVA_HOME=/usr/jdk/instances/jdk1.6.0/jre
export ORACLE_BASE=/opt/oracle/database
export ORACLE_HOME=$ORACLE_BASE/product/10.2.0
export LANG=ja_JP.UTF-8
export NLS_LANG=japanese_japan.AL32UTF8
export PATH=/bin:/usr/bin:/usr/ccs/bin:.:/usr/sbin:${ORACLE_HOME}/bin:${JAVA_HOME}/bin
#${HOME}/appserver/bin

export ORACLE_TERM= vt100
export LD_LIBRARY_PATH=/usr/lib
export CONNECTION_FACTORY_PROPERTIES=QueueManager=PlaceAgent01,HostName=*.*.*.*,Port=1616,TransportType=1,CCSID=943

export COMET_HOME=/sbclocal/comet/services
export BAT_HOME=/sbclocal/comet/services/batch
export ORACLE_COMET_USER=UBSCMT02
export ORACLE_COMET_PASSWORD=UBSCMT02
export ORACLE_URL=jdbc:oracle:thin:@*.*.*.*:1521:COMET3
export ORACLE_UBS_USER=UBSCFIF02
export ORACLE_UBS_PASSWORD=******

#java -client -jar Batch-Deb.jar
#$JAVA_HOME/bin/java -client -Xms512m -Xmn256m -Xmx512m -XX:ThreadStackSize=128 -XX:PermSize=64m -XX:MaxPermSize=128m -XX:+UseCompilerSafepoints -XX:+UseOnStackReplacement -Xprof -Xbatch -verbose:gc -jar Batch-Deb.jar

#$JAVA_HOME/bin/java -client -Xms256m -Xmx512m -Xprof -jar Batch-Deb.jar

2009年9月25日金曜日

Arm 用ソースの取得とコンパイル

複数の組織や個人がArmのボード用のAndroidビルド環境を公開してくれている。
ここでは、embinux.orgの方法でBeagleBoard向けのビルドを試してみる。

*マシンリソースとして、HDD 10G,Memory 1G 程度ないと苦しい。

0)フォルダの作成
sudo mkdir -p /opt/android/beagloid
sudo chmod 777 /opt/android/beagloid
cd /opt/android/beagloid

1)manifestを取得
repo init -u git://labs.embinux.org/repo/android/platform/omap3manifest.git
ユーザIDやメールアドレスを適切の指定(識別のためだが、Commitしない場合は何でもよい)

*実は、上記で取得するmanifest.xmlに間違いがあり、そのままだと本体のmake時にエラーとなります。後記のように修正しておきます。

2)ソースの取得
repo sync

3)構築
*後述2にあるように、パッケージが不足していて、このままだとuImageが生成できない。
source build/envsetup.h
choosecombo 1 1 beagle eng
make


------------------ 修正 --------------------

cd /opt/android/beagloid
vi .repo/manifest.xml

13行目を2行下に移動
修正前)
12 <project name="repo/android/platform/build" path="build" .... >
13 <project name="repo/android/platform/dalvik" path="dalvik" .... />
14 <copyfile ... />
15 </project>

修正後)
12 <project name="repo/android/platform/build" path="build" .... >
13 <copyfile ... />
14 </project>
15 <project name="repo/android/platform/dalvik" path="dalvik" .... />


------------------ 不足パッケージを取得 --------------------
sudo apt-get install uboot-mkimage

Android ビルド環境の構築

Vmware/VirtualBoxなどで、Ubuntu9.0.4の環境を作成して、以下の通りにする。
0)下準備
sudo apt-get update

1)ツール類の取得
sudo apt-get install git-core gnupg sun-java5-jdk flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev

*java5を取るのは6だとdalvik関連のソースでエラーがでるかららしい

sudo apt-get install valgrind

2)repoのセットアップ
sudo mkdir -p /usr/local/bin
sudo curl http://android.git.kernel.org/repo -o /usr/local/bin/repo
sudo chmod a+x /usr/local/bin/repo

3)パスの設定
.bashrc などに以下を追加
export PATH=$PATH:/usr/loca/bin
export JAVA_HOME=/usr/lib/jvm/java-1.5.0-sun

2009年9月11日金曜日

Oracle9 でのバインド変数制限

[Oracle] JDBCでバインドできる文字列のサイズの制限や、JDBCでバインドできる文字列のサイズの制限→複数のバインド変数を使って解決にあるように、9iでは長い日本語文字列の扱いには注意が必要であった。
最初に記事を見たときは、4000バイトも指定してあるのに、日本文字は666字しか入らないなんて!!!と思ってしまいましたが、バインド変数を使用した場合だけの制限であり、実際にはCharCode毎でのバイト数一杯は入るのですね。(sjisなら日本文字で2000文字) まあ、アプリではバインド変数を使うようにするのが普通なので、回避するにはこの部分だけ特殊は処理をする必要があったのですね。

varchar2 の制限 => 4000 bytes
バインド変数の制限 => 2000 bytes
日本語の制限 => UTF-8 としてのbyte数で計算される

Oracle 10g ではバインド変数の制限は緩和されたようで、長さに応じて自動的にsetCharacterStream()に変えてくれるようです。

2009年8月20日木曜日

BlackBerry の初期充電

BlackBerryの開発案件のために借用していた機体を起動しようとしたところ、完全に放電してしまっていた。そこで、USBからの充電をしたのだが、一向に満充電にならない。完全放電する前は同じケーブルでUSBから充電できていたので、しばらく充電させておけばいいのかなと数日ほっておいたが、事態は同じであった。

そこで、調べてみると、ここに同じ状況の人がいて、純正の充電器でやるといいと書いてあった。そこで、充電器につないでみると確かにランプの光り方が異なる。USB の場合は赤ランプが点灯したままになるが、充電器だと黄色になりやがて電源が入った。

どうも、初期充電時はUSBの定格電流(500mA)以上が必要となるようで、そのために充電自体が始まらないという状況になっていたようだ。うーーん、他の機器では初期充電でもとりあえず進むようになっている場合が多いと思うのだが、、、 やはり黒船の来襲ということなのか?!

2009年8月14日金曜日

LHXのIMAPにMacから接続

情報が不足しているので、人柱に、、、
まずは、LHXのヘルプ通りにやってみる。ここに書いてあるが、あまりもそっけなく肝心なことが書いていない。

試してみてわかった肝心なこととは、
1.IMAPパスの接頭辞として「INBOX」が必要らしい

2.フォルダー名称を標準的なものにしないとMacMailから認識しない
webmail.xxx.xxx で入って、フォルダーを以下のように書き換えて設定する
送信済み 「Sent Messages」
下書き 「Drafts」
削除済み 「Deleted Messages」


3.SMTPの方は通常の設定したものが使用できる
ただし、SSLにするとサーバ名と異なるために承認が必要

以上でなんとなく使えていますが、同じアカウントを途中から
POP=>IMAPと変更するといろいろ問題が発生するので、アーカイブ
したうえで削除(このときにライブラリの下の対応するmailboxファイル類
も削除)して新規作成する方がいいです。

さらに、iPhomeと同期している場合は、何回か同期不能となる
ことがありますが、同期を繰り返すとそのうちに直りました。

2009年8月9日日曜日

OpemOfficeで画像リンクの一括変換

OpenOfficeで画像をファイルからD&Dで挿入した場合に、Mac版では相対リンクで取り込まれる。この状態だとファイルを移動したときにリンクが切れてしまい、画像表示でイメージの代わりにリンクのURLのみが表示される状態になってしまう。

相対であるから、対象の画像ファイルが移動や削除で変更になった場合はもちろん、自分自身(.odpなど)が移動しても画像のリンクが切れてしまうのだ!整理のためにファイルを移動していて、最初は???だったがいろいろと調べて納得した。

さて、リンク切れを防ぐには文書中に画像を取り込んでしまえばいいのだが、1つずつ選択して「メタファイルに変換」等を実行するのはしんどいなと思っていたら、ここにやり方が書いてあった。「編集」=>「リンク」=>「取り消し」とすればよく、複数のリンクを同時に選択して作業できる。これで画像のリンク切れを解消できる。

実は、外部の画像だけでなく、クリップアートの類もおなじ扱いであり、ファイルを別の場所にもっていくと画像が表示されないという現象に悩まされるのがFAQとなっていた。無駄を省くにはいいのだが、ファイルのポータビリティという点ではマイナスである。上述の変換をもっと分かりやすくしてほしかった。

2009年8月6日木曜日

目標と目的

この2つの言葉は混同されたり誤って用いられたりすることが多い。
ここで一旦整理する。

目的:AIM
 行動の動機となるものだが、達成したことを評価することができない程度に抽象的な状態のもの。

目標:GOAL
 目的を達成した理想的な状態で、達成したかどうかが判断できる程度に具体的なもの。

例)
 目的:空腹を満たす
  この表現だと抽象的であり、取りうる行動も抽象的か、無限となる
  さらに、達成したかどうかの評価も困難
   取りうる行動例:何かを食べる(抽象的)

 目標:1時間後に、築地の吉野家本店で牛丼の大盛りを食べる
  達成したかどうかの判定が明確にできる
  取りうる行動も、有限の選択肢となる

この考え方だと、真に達成すべきは目的であるが、具体的にしないと行動できないため、目標を立てる必要があり、1つの目的を達成するためには複数の目標を立てうるといえる。

2009年8月5日水曜日

TikiWikiを設定

Wikiでは、多機能なTikiWikiがいいかなと思ってインストールしてみたが、
バージョンが古くてEditorが使いにくかったので、3.1に上げてみた。
古いもの[1.9.x]だと、管理画面からインストールまでできるのだが、
それ以外のものは、FTPでファイルをアップする必要がある。

最初、CyberDuck(OS-X) でやっていたが、あまりにもファイルが多すぎる
からか途中で接続を切られることが続出し、Filezilla(OS-X)に変更した。
そもそものファイルが「.tar.gz」でかなりのサイズであるため、そのまま
アップしてから解凍した方がいいのだが、サーバのShell環境にはtar , gzip
とも入っていないchrootedなので、大量のファイルをアップするはめになった。

何とかインストーラを動かすと、ファイルパーミッションがxxxとなって
個別に設定を変更、やっとのことで完了した。WYSIWYGエディタや画像ファイルの
一覧表示からのリンク作成などかなり使いやすくなったのでよかった

2009年8月3日月曜日

2009年8月1日土曜日

Kunena の設定

カテゴリリストに飛ばしたかったのだがやり方が
見つからず。あるページのリンクをみて、試行錯誤
参考:ポルトガル語?

index.php?option=com_kunena&Itemid=4&func=view&catid=28&id=169&limit=6&limitstart=108

自分の設定にあわせて、次のようにして「WebLink」を定義してみた。
index.php?option=com_kunena&func=list&catid=4

これで何とか表示された。

Joomla を Update

1.5.13に不具合があるようで、早々に1.5.14がリリースされた。
今回はUpdateをしてみる。
1)JoomlaPack にてバックアップ
 本体はここで、管理画面の「エクステンション管理」からインスール
 LLKjpはここで、解凍して上書き
 説明はここ

2) 差分Updateファイルを取得して解凍後上書き
** 差分ファイルは、元バージョンとの組み合わせで複数あるので、自分のサイトにあわせること **
現在は1.5.13 なので、「Joomla_1.5.13_to_1.5.14-Stable-Patch_Package.zip」を使用する
 場所は、ここで、管理画面の「エクステンション管理」からインスール
 LLKjpは、これこれで、管理画面からインストール

2009年7月27日月曜日

JCE で背景がメタメタになくなった場合の対処

JCE は機能が豊富なEditorであり、通常はサイトのデフォルトテンプレートに付随するCSSを利用する設定になっている。
ところが、これがくせ者でテンプレートによっては、不要な背景画像や不適切な色がEditorの背景に入ってしまい、文字が見えずらくなることがある。これへの対処法がここに載っている。

CSSにJCE用の設定を追加するというもの、対象は $template/css/template.css で、最下行に以下のものを追加。

body.mceContentBody {
background-color: #FFFFFF !important;
background-image: none;
}


別の解決方法が、ここに載っている。

2009年7月25日土曜日

Joomlaサイトの基本形

とりあえず、下記の状態で開始することにした。

joomla 1.5.13-ja
-------------------
jce 本体 jce-LLKjp
バックエンドの「コンポーネント」-「JCE Administration」-「install」からインストール
---------------------
Kunena 本体 Kunena-LLKjp
解凍後、Joomla!のルートフォルダへアップロード 参考
ファイルのJが大文字でないと認識しない! 参考
KunenaLatest-Module: Download
----------------------
JForms 本体DLページから、これこれ JForms-LLKjp
解凍後、Joomla!のルートディレクトリへ上書き 参考

-----------------------
Xmap:サイトマップ作成 本体はここ 参考ページはこれ

2009年7月2日木曜日

samba client

Vmware-Serverで、共有ディスクが使いにくいので、
sambaでファイルを扱うことにする。

使い方メモ

smbclient
ftp のように使える client
smbfs
mount -t cifs
EX)sudo mount -t cifs //HOST/point /mount_dir -o user=X,password=Y,uid=Z

nmblookup
NetBIOS name と IP address の変換

findsmb
nmblookup を local network で (like win32 "net view")

smbtree
findsmb + 共有ポイントブラウザ (like win32 "net view ¥¥host")

参考:Samba client を一度整理

2009年6月30日火曜日

OpenSolaris 2009.06 にWebminを導入

LiveCDからだと入っていないが、SUNのリポジトリにあるため
以下のコマンドでインストールできる。
pkg install SUNWwebmin

設定は、以下のコマンドを実行。
/usr/sfw/bin/webminsetup

ユーザを追加しておく
useradd
passwd

上記のユーザをwebminの設定ファイルに追加
/etc/webmin/miniserv.users
root 項目の下に 「newuser:x:101」のようにする

ACL設定
/etc/webmin/webmin.acl
rootユーザをまねして作成

webminを再起動
svcadm restart webmin

参考:Setting up Webmin for OpenSolaris running on Amazon EC2

Android 開発 その3 Skin

Emulatorの解像度を変更する部分をソースから探してみたが、
どうもlayoutというxmlファイルを読み込んで設定しているようだ。
このファイルは、skinの中にしかない。
6/26(金)のAndroidセミナーで詳しい人に聞いてみると、解像度
は、単にVgaBufferのサイズをみて動的に変更する仕様になって
いるとのこと。
既存のskin を改造して画面サイズを変えてみたが、他のパーツと
整合性がとれていない成果、自動的に元サイズに変更させられてしまった。
調べていると、日本Androidの会のページで、Armadillo 用のSkinが公開
されていたので、実際に使用してみた。やはりlayoutの定義と他のパーツを
整合性をもって定義すれば自動的にサイズが変わる仕様であった。
ワーキンググループ / 組み込み / Armadillo-500FX

2009年6月29日月曜日

FlexでのCrossDomain

SWFを配置したサーバ側に、「crossdomain.xml」ファイルを
置いておく必要がある。

<?xml version="1.0"?>
<!-- http://www.foo.com/crossdomain.xml -->
<cross-domain-policy>
<allow-access-from domain="www.friendOfFoo.com"/>
<allow-access-from domain="*.foo.com"/>
<allow-access-from domain="105.216.0.40"/>
</cross-domain-policy>

2009年6月19日金曜日

VMware Fusion Freeze

時としてfreezeするVmWafe-Fusion。こうなると、メニューも全く無効となり
電源OFFすらできなかった。対処法を検索していたら、サポートページの強制OFF
の方法があった。
仮想マシンがフリーズをした時に、仮想マシンの強制終了はできないんでしょうか
電源ボタンをツールバーに表示させておくことがポイントで、後は通常のPCと
同じように長押しで切れる。
ところが、「サスペンドからの回復待ちのフリーズ」では、このボタンも無効になっていてるではないか!
さらに検索すると、同じような症状の人があり、アクティビティモニターからの強制終了が推奨とのことだった。
VMware Fusionでシャットダウンができない
そこで、アクティビティモニターを見ると、いましたよ!
「vmware-vmx(応答なし)」
こいつを強制終了させて、再度Vmwareを起動すると、、、やっぱりだめ!
実メモリを確保できなのが原因か?

VMファイルを別の場所に移動したりしたが、だめ。
結局、ここのページを参考にして、*.vmemを削除したら
「レジュームできないから、、、」とダイアログが出て、再起動に
なりました。

移動の副作用で、システムROMの互換性がとれないとのことで、
新規作成となり、WindowsXPの再認証が求められました。

2009年6月4日木曜日

Joomla:注目の部品を物色中

■インストールしておきたいExtension

簡単サイトマップ作成「Xmap」
Website Name(SEO系プラグイン)
QContacts(フォームメールコンポーネント)
JoomlaPack(サイト〔ファイル&データベース〕バックアップコンポーネント)
『JCE(JoomlaContentEditor) for 1.5』高機能&高カスタマイズ性を装備

参考:
Joomla!Reference
JoomStudy
Joomla!の道しるべ

■注目のノウハウ
 Joomla! 楽々Amazonショップ
参考:
なんでも!オープンソフト

Joomla:Homeメニューのタイトルを変更

わかりにくいのでメモしておく。
管理画面から、「メニュー」=>「メインメニュー」=>「Home」
とたどり、編集が目の右側で、「パラメータ・システム」の部分を広げる。
中にページタイトルの設定があるので、これを変更する。

参考:http://forum.joomla.org/viewtopic.php?f=480&t=283457

Joomla:Template をさわる

いろいろと、参考ページがあったので、メモ。

■Template
http://www.joomla24.com/
http://www.themza.com/joomla1.5/

改造方法
1.fabicon.icoを自分用のもので上書き
2.自分用のlogoファイル(png)をUpload(サイズは、元の画像と合わせる)
3.cssを編集してlogoのパスを変更

■その他の参考

http://d.hatena.ne.jp/satoshis/20080827/p1
http://www.joomladepon.com/
http://joomlaeasy.net/
http://www.itami.info/fdj/
http://www.joomler.net/

http://joomlaism.net/
http://www.joomla.org/
http://love-joomla.org/
http://joomlaway.net/
http://joomla.sytes.net/
http://koshima.net/

CMSサイトをMobileに対応

Joomlaでサイトを作成しているが、Mobole対応のExtentionを探していたら、以下のようなツールを見つけた。
PCサイト->携帯変換スクリプト
とりあえず、試しに設置してみる。
1. SourceForgeからダウンロード http://sourceforge.jp/projects/pc2m/
2. zipを展開してサーバに設置
3. dataディレクトリのパーミッションを、707など書き込み可能なものに変更
4. pearpack.zipをダウンロードして展開(http://www.rcdtokyo.com/pc2m/pearpack.zip)
5. 上記のPEAR.phpファイルと、HTTP、Net、XMLの3フォルダをサーバに配置
6. ブラウザで_check.php(動作要件の確認スクリプト)を表示
7. ブラウザや携帯端末でpc2m.php(メインスクリプト)を表示
8. アクセス制限設定(踏み台対策)などの設定を行う
9. index.phpを設定

■設定ファイル
* Config.inc.php(設定)
* Frontpage.inc.php(アクセス先のURLが指定されていない場合の表示内容)
* Template.inc.php(HTML出力のテンプレート)
* ErrorMessages.inc.php(エラーメッセージ)
* Setup.inc.php(設定画面の表示内容)
* Auth.inc.php(セッションデータの復元操作ページの表示内容)

■動作検証:
.../_check.php で、以下の表示あり
「設定ファイル(Config.inc.php)でアクセス制限が設定されているため、画像変換テストは実施しません」
画像に関連しそうだが、今回はスルー。また、index.php は以下のようにした。



define("CLNT_DTCT_CLS_PATH", "/var/www/vhosts/korabo.jp/subdomains/staging/httpdocs/i/ClientDetect.class.php");
if (false != @include_once CLNT_DTCT_CLS_PATH) {
$client =& new ClientDetect();
$fronturl = 'http'.(isset($_SERVER['HTTPS']) and $_SERVER['HTTPS'] == 'on'? 's': null)
.'://'.$_SERVER['HTTP_HOST'];
$scrpturl = $fronturl."/i/pc2m.php?";
if (preg_match('/^(?:docomo|au|vodafone)$/', $client->dev_type)) {
header('Location:'.$scrpturl.$fronturl);
exit;
} else{
header('Location:'.$scrpturl.$fronturl);
exit;
}
} else {
print 'Error:No Script file of ';
print CLNT_DTCT_CLS_PATH."¥n";
}

2009年6月3日水曜日

Android 開発 その2

新しいDevice用のVirtualDeviceを作成するための準備。

AndroidEmulatorは、qemuベースで作成されていて、CPUは、G1と同じ模様
(QUALCOMM® MSM7201a™ 528MHz:もしかすると、arm かも、、)
Emulatorのソースも公開されているので、変更を加えられる模様。
・改造計画:
画面サイズ(wxga:1280x768 or hdmi)
不要Device除去(GSM/磁気センサーなど)
スキン

参考:About Google Android Emulator

2009年6月2日火曜日

Android 開発 その1

HelloAndroid
O'REILLY の「初めてのAndroid」にて自習:

0. 前提
Eclipse3.4/ADT/AndroidSDK1.5

1. プロジェクト作成
EclipseのFile->新規->Androidプロジェクト
基本設定をして保存

2. とりあえず実行
何もコードを書かない状態でも、Androidアプリとしてはデプロイできる

3. 実行Emulatorの設定
RunAsで、「Androidアプリケーションを」を選択
初回のみ、Emulatorの設定となる

Android 開発環境

Mac OS-X で、Eclipse3.4を利用したセットアップ。
参考:Developing In Eclipse, with ADT

1. Eclipse3.4のダウンロードと設定
http://www.eclipse.org eclipse-jee-ganymede-SR2-macosx-carbon.tar.gz

2. 今回はPleiadesにて日本語化
http://mergedoc.sourceforge.jp/pleiades.html

3. 大文字小文字を区別するFileSystemを作成(Android本体のmakeもする予定なので、、、)
ディスクユーティリティにてイメージを作成
mount は、「/Volumes/android_ws」

4. AndroidSDKの取得と展開(現在の最新版で、1.5r2)
http://developer.android.com/sdk/1.5_r2/index.html
配置は、「/Volumes/android_ws/」とし、リンクを作成
Terminalにて、以下を実行
cd /Volumes/android_ws/
ln -s ./android-sdk-mac_x86-1.5_r2 ./android-sdk

5. Eclipse用のPlugin(ADT)を導入
PluginSite:https://dl-ssl.google.com/android/eclipse/

6. EclipseADT1の設定
Eclipse > Preferences から、Androidを選択して、SDKの場所を設定する


参考:Android開発環境 for Mac

2009年5月29日金曜日

AndroidMarket

独自マーケット(バザール)の開設に向けて準備中。
参考資料:On Mobile Applications, Platforms and Monetization — “Show me the Money”

Jason Delport, Alex Kerr, William Volk(モバイルの専門家)が
指摘するGoogle-AndroidMarketが今一な理由:
1.Googleにクレジット番号を教えたくない
2.有料ソフトの違法コピーが随所にある
3.糞なアプリが満載
4.iTunesStoreに比較して魅力に乏しく、使いにく
5.Freeのアプリに比較して有料版は掲載も遅れるし、無料がよいという雰囲気がある

著者は、#1については、Googleがやり方を変更すべきだと述べている。
「有料版を最初に買う時に登録するか、他の決済機関にまかせてしまうか」

「開発者は、最も有益なものにフォーカスすべきである」
「有益は相対的であり、対象による:通話機能にとって?アプリ開発にとって?お金儲けにとって?」
「金銭的成果という観点では、Richな開発環境とエコシステムが成功している」

-----
ちょっと調べてみると、Android上で音楽を扱うのに、iTunesのような標準的で
Marketと直結しているようなものはなさそうだ。候補は、TuneWikiで、これは
カラオケ機能もある。(日本語の歌詞は未対応?)

2009年5月13日水曜日

Androidの会 勉強会

2009年5月11日(月)1900-2100
秋葉原ダイビル「はこだて未来大学」
丸山先生も参加されていました。

今回のテーマはゲーム関連
■TIPS
タッチパネルが重い:イベントを消すために一瞬Sleepさせる裏技あり?
PNGはヘッダを外すと表示が速くなる
Drawableの方がよい、CreateBitMapはメモリ食い
画像のScalingは重い
音は、SoundPoolの方が速いことがある
■開発
Emulatorは再現性が高い(特に2D)
ログを停止しておかないと開発環境にインストールされると見られてしまう
■Market
ランキングの基準が不明
クーリングオフでのキャンセルが多い(FreeTrialはやめた)
iPhomeもクーリングオフがあるが、Appleの審査が入るためキャンセルは実際上はない
■その他
自前でのMarket立ち上げも可:ただし、同じAppはAndroidMarketには置けない

2009年5月7日木曜日

丸山先生レクチャー

全6回シリーズ:テーマは「クラウド」
講演者:早稲田大学大学院 情報生産システム研究科 客員教授 日本Androidの会 会長 丸山 不二夫 氏

1:2008年11月13日(木)『クラウド時代の到来』
・クラウドは発展途上であり、定義は固まっていない
・ここ40年ほどの間にハードは爆発的に進歩(Diskは百万倍以上)
・クラウドにはしっかりした実体(サーバ群、データセンタなど)がある
・クラウドの上でサービスのみを提供する(SaaS)ようになった
・クラウドOS

2:2008年12月16日(火)『MicrosoftのクラウドOS/Windows Azureについて』
 概要:CloudOSであるWindowsAzureの概説
 ・WebAppをスケールアウトするために仕組みが備わっている
   自動的な複数ノードへの処理およびデータの分散、分散キャッシュ
 ・アプリの開発や実行に伴う、ハード・ファーム、ネットなどをすべて仮想化して提供
   開発、使用はビジネスに特化できる!
 ・使用量の応じた従量課金と幅が広く迅速なスケール追随が可能になる
 ・分散メモリーキャッシュ(RDBでなく、key-value形式)
   Oracle:Coherence, IBM:Object Grid, GigaSpace, Terracotta
 ・Cloud分散データベース
   Google:BigTable+GoogleAppEngine, Microsoft:SSDS, Amazon:SimpleDB, Amazon:Dynamo
 ・並列処理の競合への対処としてQUEUE(FIFO)を使用
 ・データサービスとしてSDS(SqlDataService:SQLで呼び出せるがRDB形式ではない)
   RESTfulにアクセス可能、高可用性、2つのキーでデータを管理(Partition-key, Row-key)
   RDBではなくて、key-value型(スキーマ定義がなく、行ごとにカラムが変わってもよい)
   同一のPartition-keyを持つデータが必ず同一ノードに配置される
 ・モデルドリブン:サービスモデルの定義を元にDeployer機能が実装コードを生成
 ・ノード構成(クラスタ)はリング構造で中心を持たない

3:2009年1月13日(火)『Cloud上の分散データベース ― BigTable、SimpleDB、Azure SDS ―」
抽選にもれる、、、

4:2009年2月26日(木)『ScalabilityとAvailability」
仕事の都合で出席できず、、、

5:2009年3月23日(月)『CloudとRich Client」
家庭の都合で出席できず、、、

6:2009年4月24日(金)『クラウドとSOAの最新トレンドを語る』 OracleOpenWorld 内
・Cloudへの移行にはまだ少し時間がある、企業の壁を越えるには大きな問題がある
・SOAには上からと下からの問題があったが、新しい技術が出てきた
(分散キャッシュ、SCA、SimpleModeling)
・企業データの統合に分散キャッシュ技術
・OSGIによるSCAとServcieの結合の可能性
・SimpleModeler(テキストによるDSL) によるModelDoriven
*SCA:Service Componet Architecture (SOAを具体化するために仕様:主にサービスの結合)

2009年4月22日水曜日

Atomikos

FOSSのJTA実装の1つ。他にJOTMがある。AppServerなしで2PCが実行できる。

Atmikosには2つのEditionがあり、違いは以下にまとめる。
TransactionsEssentials Freeだが、サポートなし、機能が限定的:Apache License 2
ExtremeTransactions Close、有料、サポートあり、フル機能

基本としては、JTAに必要な諸機能(Recoveryあり)とJDBC/JMSのPOOLがあるようだ。
また、実装がSpringベースらしいが、他のF/Wとの混在も問題ないようだ。
ただし、JNDIサーバは含まれていないため、必要はオブジェクトは直接的に生成・取得が必要だ。

■初期設定
Rootのクラスパスにある、「jta.properties」ファイルから設定を読み込む。
-Dcom.atomikos.icatch.file= で指定も可能。
指定できるプロパティ類は、「com.atomikos.icatch.config.TSInitInfo」に定義してあるもの。
必須定義は:以下のもので、右辺はノーマル設定の推奨値
com.atomikos.icatch.service=com.atomikos.icatch.standalone.UserTransactionServiceFactory

■必要なライブラリ
ダウンロードして確認した範囲では、以下のもの。
jca.jar;jms.jar;jmx.jar;jta.jar;servlet-2.3.jar;slf4j-api-1.4.3.jar;slf4j-noop-1.4.3.jar
ということは、Springには依存しないようだ。

■使用方法
Pool用のオブジェクトを生成して使用する、UserTransactionなども同様。JNDIに登録してもよい。

JDBC:
AtomikosDataSourceBean ds = new AtomikosDataSourceBean();
ds.setUniqueResourceName("oracle");
.....



MQ:mqXaFactoryが定義済みの場合のSpringのBean定義

<bean id="atomikosConnectionFactory" class="com.atomikos.jms.QueueConnectionFactoryBean">
<property name="xaQueueConnectionFactory"><ref bean="mqXaFactory"/></property>
<!-- IMPORTANT: the resourceName MUST contain MQSeries_XA_RMI -->
<property name="resourceName" value="My_MQSeries_XA_RMI"/>
</bean>



TransactionMgr系:Atomikosのものを生成して使用する


■TODO
・Stand-AloneでのJNDIへの登録と使用
・S2から使用する場合のDicon定義
・依存するライブラリ

2009年4月15日水曜日

医療システム

某医院にてコンサルティング。ネットワークの交通整理で
仕事は済んだが、聞いたことをメモしておく。

PACS:医療用画像管理システム
 レントゲンなどの画像を集積して検索などできるようだ
 FreeではOsirixなどがある
DICOM:データ授受の仕様
 他社のDICOM準拠装置のデータ接続ができる
 DICOM Conformance を元に具体的な仕様を詰める

PACS,DICOM

2009年4月11日土曜日

SailFinでの開発

以下の3段階
1) UDPでの受信、返信
2) TCPでの返信
3) TCPでの送信

抽象度の階段を上る

コンピュータを制御するためのプログラム言語に関して:
概要:
 言語は抽象度とモジュール度を上ることで進歩してきた、
 ビジネスにおいても、DSLのような形で抽象度を上ることが必要である。
用語:
 抽象度:抽象の度合い、高低の評価基準は??
 抽象 :共通する一部を取り出して概念的にまとめること
 モジュール度:モジュール化の度合い、評価基準は??
 モジュール:それだけで機能する有限集合
前提:

仮定する結論:

論点1:

論点2:

論点3:

まとめ:

2009年4月2日木曜日

VMware Fusion をチューニング

HDDが少なくなってきたので、拡張した。

2.0だと、メニューにから拡張できるが、SnapShot をすべて削除する必要があった。次にPartitionTableとしても拡張を適用する必要がある。便利なツールは、「GParredLiveCD」iso イメージをとってきて、マウントしてCDから起動する。XげのGUIも使えるが、マウス
カーソルの位置が画面とずれてしまっていて操作に苦労した。

パフォーマンスの調整:今回は調査のみ
VMware が頻繁にディスクアクセスして OS 全体が固まる件
vmwareのディスクアクセスが重い件を、もう1段チューニングする
Tweaking Microsoft Vista to Work Better in a Virtual Machine
おくむらたんぶら
vmware fusionのチューニング

VMware Fusion wo

2009年3月31日火曜日

X-Server での TimeMachine

X-Serverでは、共有ディスクをTimeMachine用のネットワークドライブとして
しようできるのだが、やり方を間違えたのか、TimeMachine設定からは見えて
こない。

どうやら、最初にマウントしておかないとだめらしいのだが、X-Server側に
Warningがでていたのが原因と勘違いし、調べまくってしまった。正常に
使えているX-Serverの方にも同じものが出ている。
「Time Machine バックアップ作成に対応していない可能性があります、、、」

2009年3月30日月曜日

勉強リンク

■Jarファイルの仕様
JAR File Specification

■BarkleyDB:Key-Value型?メモリやファイルを使う高速DB、非RDBだがTimesTen類似の高速性?、Transactionサポート
Oracle Berkeley DB Java Edition
Berkeley DB Java Edition and Android 0.9 Beta

■JavaアプリをOne-Jaraとする
Deliver Your Java Application in One-JAR™!

JMX

資料ページへのリンクと分かったこと:
・デフォルトでMBean(SystemMBean)があるが、指定しないと起動しない
・後からMBeanを作成することもできる
・APIはReflectionに似たもの
・invoke の signature:String[] は何を入れる?
クラスのFQCN 例)java.lang.String

参考:
ITアーキテクト
JMX を使用する監視と管理(SUN)
Java5虎の穴
IBM:JMX を使ったアプリのインスツルメンテーション

Java Management Extensions (JMX) テクノロジ概要

WebSphere WAS でのLog4j

commons-loggingの1.0と1.1で設定が違うので注意が必要:
■共通:
クラスロードの順序変更
Seasarを使う場合にも変更が必要

参考: [WebSphere Application Serverはすごいのか]

コンソール出力の設定を変更
WAS独自のヘッダ部分が付いてしまうため、以下のようにして設定
 メニューから以下の遷移
 「ロギングおよびトレース」 > 「server1」 > 「JVM ログ」
 「プリント・ステートメントのフォーマット 」のチェックをはずして保存

参考: [クラスローダ問題の解説]

■1.0の場合
1)WASが定義しているLogFactory設定を上書きする
  commons-logging.properties を src/main/resouces に作成:内容は下記の1行
org.apache.commons.logging.LogFactory=org.apache.commons.logging.impl.Log4jFactory

参照:[WAS5の情報なので部分的に参照]

■2.0の場合
1)WASが定義しているLogFactory設定を上書きする
  commons-logging.properties を src/main/resouces に作成:内容は下記の3行
priority=1
org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger
org.apache.commons.logging.LogFactory=org.apache.commons.logging.impl.LogFactoryImpl

参照:[commons-logging FAQ]

2009年3月12日木曜日

サンワサプライのマウスは不安定

BTマウスにははずれてばかりいる
Pincetonのマウスの前に使用していたのが、サンワサプライのMA-BTH15 S
このマウスの、小型で低価格だったし、電池も単4で小型なのがよかったが、
とにかく不安定だった。症状としては以下のような感じ。
  通常に使用していて、数秒手を休める
  次に動かすときにマウスカーソルが飛び跳ねる
どうもあっという間にスリープに入ってしまっているような感じだった。
アウトレットで買ったからだろうか?

これなら、多少大きくてもデスクで使用している Appleの無線マウスを
もう一つ買って持ち歩いた方がよかったかも、、、と思ってしまう。

Princetonのマウス PSM-BT1 でトラブル

小型で低価格なBlueToothマウスで、動作も快調だったのですが、トラブルが発生しました。
結論から言うと、電池の接触の問題でした。

■以下はその経緯です。
買って2週間ほど使用した後で、急に電源が切れるようになりました。
電池を入れ替えてみても、症状が治まらず、結局Yodobashiで交換してもらいました。
新品のマウスに新品電池を入れましたが、同じ症状。
 電源入れて5秒ほどすると、かってに切れてしまう。
 時によっては青LEDの点滅になる。
右側の電池(+側がマウス本体の奥に入るやつ)を動かしていたら、カチッと音がして正常動作になりました。
内部のバネと+極の接触に問題があったようです。

同じものを使用している人はご注意を!

2009年3月5日木曜日

OS-X Server で daemon

jetty をOS-X Server に入れて、自動軌道しようとして苦労してしまった。

launchd の管理となり、plist ファイルを作成してロードさせる。
しかし、これには大きな制限があった!
Appleの解説によると、daemon を起動するプログラムは、

  fork して、元のプロセスが終了してはいけない!
daemon 化してはいけない:daemon function を使用してはいけない

とのことで、ちょうど「jetty.sh」がこれにあたるため、何度登録しても「jetty.sh start」の
後でlaunchdがプロセスがいなくなったと思って子プロセスまできれいさっぱりと落として
くれていたのだ。つまり、正常に近い終了だったためログをみていてもなかなか気づかなかった。
正しくは、「jetty.sh supervise」 とすればよかった。

ちなみに、OS-X Server には、最初からTomcatが入っていた。ただし、使うためにはWeb設定で
TomcatのチェックボックスをONにしないといけないようだ。

2009年2月25日水曜日

Solarisメモ

■日本語を含むメールを見たい場合
mail -> X
mailx -> O : ただし、./mbox に保存されたのを見るときは、mail -f

■ユーザ毎の設定ファイル
local.login などのスケルトンの置き場所
/etc/skel/

/etc/default/login にユーザのログイン設定があるが、指定できるものは限定されている。
TIMEZONE, PATH, ULIMIT など

使用されるファイル
sh系 : /etc/profile => ~/.profile
csh系 : /etc/.login => ~/.login => ~/.cshrc


■システム基本設定の場所
/etc/default/init に タイムゾーン、ファイルマスク、言語 の設定がある。
TZ=Japan
CMASK=022
LANG=ja
これは、init プロセスの設定ではあるが、すべてのプロセスがinitから派生するので、
この設定を引き継ぐことになる。問題が出るのは、FTPでの日付がうまく取れないなど。
LANGの方は消してしまって、ログイン設定で指定したほうがよい。

参考:
/etc 回りの設定
Solaris8インストール
システムデフォルトファイル

2009年2月20日金曜日

JNA でのLibrary

StandAloneの場合は、以下のような変数で指定する。
-Djava.library.path=xxxx
-Djna.library.path=yyyy
指定した場所に xxxx/aaa.dll のようにライブラリがあると読み込んでくれるのだが、
依存する別のライブラリがあると、うまく読み込めないことがあるようだ。
その場合に使用するのが、
NativeLibLoader
らしい、ゲーム関連の JOGL/JOAL で使用されているとのこと。
FFMPEGをJNAから使おうとして苦労している。

2009年2月14日土曜日

OpenSolaris の zone ではまる

OpenSoraris1108をインストールしたマシンにZONEを入れたのだが、いつのまにかdefautl の動作が変更になっていて、迷路にはまり込んでしまった。

旧来の設定
default => set brand=native
現在の設定
default => set brand=ipkg

何が変わるかというと、nativeの場合はGlobalのdirのいくつかが共有となるが、ipkgでは分離されて、共有がない。マニュアルやman,helpなどでは、defaultはnativeのように書かれていたが、実際はこの「ipkg」となっていた。(省略した場合はSunのDefaultになるとあって、以前の資料やWebの情報では、それがNativeであった)
 完全に分離する指定に比べるとDiskサイズが節約なるようで、zoneごとにversionを分離できる点がよいようだ。ただし、このipkg形式だと、コマンド類が本体のsubsetになっていて、たとえば、pkgadd などは存在しない。pkg の方を使えということらしい。

2009年2月6日金曜日

フォーバルセミナー

フォーバルの社長のセミナーに出席したので、聞いたことをまとめる。
社長:大久保秀夫
日時:2009/01/29(木) 15:00-16:30
場所:飯田橋 ホテルメトロポリタンエドモント
 *25歳で会社を興し、日本最短記録でJASDAQ上場を果たした人

話の概要:
 物売りから事売りへの転換
  商品中心から、顧客の関心事の解決(Solution)へ
 増収増益を10年以上続ける社長100人の共通点
・8つの特徴
  ビジョンを持っている:5^10年後のこと 思わないとことはできない
  会社にNo2がいる:有能でしっかりを仕事をこなす人
  時間がある:No2にまなせられるから
  捨てる勇気:ダメな事業は切る
  細かいことには口を出さない:
  外部にパートナー:ほんとの本音を言えるのは外部の人
  見えない存在を信じている:孫正義 7人の恩人
  利他主義:社会貢献
・11の行動
  とにかく考えている
  ニーズを考える:シーズより顧客が困っていることを考える
  考えたアイデアを即実行はしない:人に聞きまくる
  小さいことに目が行く:SB孫社長 業務日報は毎日必ず目を通す、わたみ渡辺社長 全店舗の売上、全クレームをチェック
  1ランク上の会社をリサしている:オペレーションを調べる
  部下の報告書をそのままでは信頼しない:必ず自分で確かめる ユニー社長 現場で把握する
  自分の会社のボトルネックを知っている:悪い例 AVEX(浜崎あゆみの次が、、、)
  顧客満足を考える:
  自社の強みを知っている:強いことを伸ばす
  次の一手を考えている:成功は続かない
  違和感のあることはしない:自分の器を超えることはしない
・4つの行動パターン
  トップ自ら段取りする:大きい仕事は自分でやる
  人間本能の活用:お金、勝負、メリハリ
  チェック機能がすごい:予実差異の分析 真中のプロセス 行動管理 データ化
  業務提携がうまい:できる会社と組む

・その他
  凡事徹底:「こんなことくらい」が会社を滅ぼす
    社員章にこだわる(外国人から見た日本企業の印象)
    全員と握手する
  相性の判断基準:人相と明元素
    温顔無敵
    明るく、元気で、素直

案ずることと成すこと

「案ずるより生むが易し」とはよく言われることだが、日々の開発においてコードの「生成」に対して「案ずる」ことで費やす時間は結構大きい。特に対象が個別の業務処理ではなく、基盤部分(フレームワークやライブラリなど)である場合はそれが顕著である。デザインの要素が入ると生産性が大きく下がるという話を聞いたことがあるが、規模が大きな業務アプリケーション開発では、人員を増やしてのコード作成フェーズに入った場合に作業者の手が止まらないように、デザインすべきこと(考えて決定すべきこと)を、前もって終えておく必要がある。個別の作業者の作業は仕様を実現するように与えられた基盤の上でコードを組立て、テストをすることであるのだから。
 では、デザインフェーズでの決定に時間がかかる要因は何であろうか?それを明らかにするのが本書の目的である。

1.本書でのデザインの定義
 デザインとは、ラテン語の[designare]が語源であり、意味は「計画を記号に表わす」ことである。つまり、ある問題を解決するために思考・概念の組み立てを行い、されを様々な媒体に応じて表現することと解すことができる。(wikipedia)
 多くの言葉は、狭い意味で使用される場合と、広い意味で使用される場合があるが、デザインの場合もこれが当てはまる。建築を例にすると、設計図を作成することが狭い意味でのデザインであり、部品展開して材料や道具を明らかにし、作成工程の立てて人員や資材などの調達を計画することが広い意味でのデザインとなる。
 本書では「デザイン」という言葉をソフトウェアの「システム設計」に限定して話を進める。システム設計において必要となる事柄には、以下のようなものがある。
・要件や仕様を実現するための
 ・基盤部分の調査、選定、作成、テスト
 ・業務機能実装のための要素分解と作業量見積もり
 ・人員や資材などの調達計画の作成
 ・開発環境および作業要領の作成
 ・工程計画の作成

・基盤部分の作成においての
 ・各種規約類の整理
 ・共通ライブラリの作成
 ・フレームワークの作成

2.デザインのメカニズム
 多様体的な見方:地図では、都市というような限定した場所を示す場合は平面に表示するメルカトル図法が適しているが、地球や宇宙というような平面とはとらえられない場所では、他の方式を採用する方が妥当となる場合がある。デザインにおいても、マクロ的な観点でのアプローチやアウトプットは、ミクロ的な観点でのそれとは異なるのも十分にありうることである。
2-2.マクロ的観点
 マクロ的な観点から「システム設計」の流れを記すと以下のようになる。この内、最初の3件は「システム分析」と呼ばれることが多い。
・把握:何をどうしたいのかという要件、仕様の抽出
・分離:要件、仕様を基盤共通、業務共通、業務固有へと分離
・確認:実現可能性の調査、使用可能は製品や部品などの調査
・作成:基盤部分およびモデルとなる業務要素
・計画:作業計画

2-3.ミクロ的観点
 ミクロ的な観点では、個々の作業ごとにアプローチやプロセス、およびアウトプットがあることになる。ここでは、基盤部分のライブラリ作成について記す。
・課題の把握:何をどうすればいいのか
・類似コードの調査:すでの類似のものがある、流用できないか、拡張するだけですまないか
・作成場所(クラスやパッケージ)の選定、作成
・コードの作成とテスト:狭義のデザインには実装は入らない。それは建築などでは個々の部品が実在しており、その機能性や外観が分かっており、実際の組み立てをしなくとも計画を作成できるからである。ソフトウェアの場合にはこれが当てはまらない場合が多い。

それぞれのステップにおいて、「探し、考え、比較し、決定する」ことが求められるが、これが対象により作業時間が大幅に異なってくる要因となる。だからといってこの部分を仮決定のままにしておくことは許されない、後の作業に大きな影響をあたえることになるためである。

3.決定を遅らせる要因
 多くの場合、実装そのものが困難な場合は少数であり、以下のようなことを決定するための材料が不足していることが、決定を遅くする要因になると想定される。
 ・最適ゴールの悩み:
   そもそも、要求されていることの解決(対処)が妥当なのか
   ミクロ的には必要に見えるが、マクロ的にとらえれと別のアプローチの方がすぐれていないか
   それを採用するとそもそもの要求が無意味や不要にならないか
 ・重複の悩み:
   すでに類似のものがあり、流用できるのではないか
   車輪をもう一度発明したくない
 ・最適配置の悩み:
   作成するものをどこに配置するのがいいのか
   とくに作成するものが公開仕様を持つ場合は顕著
   配置の変更が公開仕様の変更になってしまい、影響が大きくなるため
 ・最適単位の悩み:
   どういう単位で公開するべきか
   大きめの機能モジュールとしてか、小さめのライブラリやユーティリティとしてか
   単位の変更が公開仕様の変更になっていしまうため
 ・効率の悩み:
   処理効率が悪くならないか
 ・拡張性の悩み:
   将来の拡張の妨げにならないか
 ・再利用の悩み:
   共通基盤として利用され続けられるのか

4.決定の重さ
 決定事項には重い・軽いの別がある。遅くなりがちなのはほとんどの場合、重い決定事項であるといえる。
 例えば、システムを作成する場合に、「公開仕様を限定した部品同士の組合せ」としてデザインした場合、個々の部品の実装は後回しにしたり、仮組しておいて後で取り換えるなどの融通が効く。しかし、この公開仕様部分の決定を変更することはコストが高くなる。つまり、この仕様の決定は、部品内部の変更に比較すれば重いものになる。つまり、ソフトウェア設計において「重い、軽い」は、後から簡単に手直しできるか、手直しには多くの影響を招くかの違いが大きいといえる。
 Javaなどのクラスという定義要素をもつ場合においては、以下のようなものがある。
  簡単に手直しできるもの:影響が限定的なもの
   名称の変更:名称をAPI仕様にしていない場合
   公開仕様を固定したモジュールの取替え、組直し
   Private要素の移動や変更
  大きな影響をもたらすもの:影響が大きいもの
   公開仕様の変更:APIや機能の変更
   Public要素の移動や変更

2009年2月4日水曜日

データの扱い方

 システム分析では管理対象とするデータ項目を見つけ出し、整理して「Entity」とその関連として定義していくという作業をする。こうして見つけたデータ塊を正規化することでRDBを使用するための下地になるのであるが、パフォーマンスの観点からは正規化しない方が良い場合も存在する。
 つまり、実行時にJOINやらUNIONやらが多数使用されると実行速度に影響を与えることがあり得るため、最初からまとまった形でデータを保有しておいた方がよい場合がある。こうするとRDBでは正規化が崩れることになり、重複するデータの存在をどこかで同期する必要が発生する。これをTriggerなどで形成すれば、以下のような構造のDBを作成できそうである。

 概念モデル:正規化したものであり、更新や追加はここに行われる
 論理モデル:実際に使用したい塊となっているもので、Viewや重複Tableなどで定義
 物理モデル:


3層スキーマ
 概念モデル:概念的なまとまり、概ね正規化された状態
 論理モデル:アプリケーションで使用したいまとまり、上記モデルの合成や集計
 物理モデル:実際にDBMSに作成する定義

リレーショナル型
 リレーショナルとは、縦横の表形式でデータをまとめていることを指す
 表の制約としてカラム定義が固定化される
 他のデータとの関連はキーの一致による
Key-Value型
MS-Azule/SDS, GoogleAppEngine/BigTable, Amazone/C2D など
キーに対して値をとれれば何でも可の形式
 RDBのように見せることもできる

 

CMD.EXE に URL を渡す場合の注意

すこしはまったので、書いておく。

 openURL.cmd などという感じでURLを元にブラウザを開くスクリプトを書いた場合に、渡すパラメータの文字には、CMDとしての制限が存在する。
 Unix系だと、shやcshに渡す場合に 「*」や「$」や「&」がShellに解釈されてしまってそのままの文字としては渡されないのと同じである。
 実は、CMDの場合も同様であり、以下のものは解釈されてしまう。
「% ^ " < > & | ( ) = ; ,」などが特殊な意味をもつものであり、特に「& && || | 」は、クォートされていない場合は、文区切りを意味してしまう。たとえば、以下の例だと、

openURL.cmd http://x.y.z/s?a=b&c=d

「&」の前までと後ろが別の文とみなされるため、CMD.EXEでは以下のような実行をする。

openURL.cmd http://x.y.z/s?a=b
c=d

もちろん、2行目はエラーとなる。クォートすればOKであり、きちんとURLを認識する。

openURL.cmd "http://x.y.z/s?a=b&c=d"


問題はクォートしてもだめな文字が入った場合であり、代表格は「%」であるが、これは「%%」となり、他の多くの特殊文字のエスケープである「^」ではないところが注意点である。

参照:CMD.EXE TIPs

パフォーマンスチューニング

実行速度のパフォーマンスが悪いと感じる場合の対処法をまとめる。
■前提として
 実行速度や処理効率の目安として以下の2つを想定する
  ・反応速度:ある処理を起動してから応答が返るまでの時間
  ・スループット:単位時間あたりに処理できる件数
 単独で測定している場合は、反応速度を見ていることになるのだが、
同時複数の処理をさせる場合にはスループットが重要になる。システムが
理想的なスケーラブル性を持っている場合は、規模を調節することで
スループットを自由に変更できることになるのだが、実際には様々
な要因により、反応速度が速くても、ある件数以上になるとスループット
が落ちてしまうのが普通である。
 速度の早い、遅いは相対的なものであり、絶対的な指標は存在しない。
対象とするシステムにおいて妥当な値から見てどれくらい劣化しているか
と考える必要がある。慣用的に用いられる4秒ルールなどは、人間相手の
反応速度としては妥当であろう。(ちなみに、この4秒はTV放送などの世界で
は黙っていられる限界と思われているようで、これ以上沈黙が続くと視聴者
が違和感を感じる長さのようだ)

■解決のための一般的ステップ
 以下のような順序で対応すれば解決への糸口が見つかるであろう。
1)調査:詳細な情報の収集
2)対象範囲確定:関連のありそうな部分とそれ以外を分離
3)データ収集:ログや設定値など
4)問題個所の推定:3)との繰り返し
5)再現:環境や条件をなるべく合致させて
6)対処:設定変更やコード修正
7)確認:

■調査
 できる限り詳しく状況を聞き取る。早い、遅いは個人的・相対的な値である
場合が多いので、数値の表わせるものとして取得すること。ポイントは下記のもの。

・処理状況:
  どんな状況で、どの処理や操作をした場合にパフォーマンス劣化を認められたか
・データ
  特定のデータを使用した場合に発生するか
・繰返し:
  特定の回数繰り返した場合に発生するか、単独で発生するか
・時系列的推移:
  いつからそうなったのか
・他の処理との関連:
  特定の時間帯でないと発生しないか
  他の処理を同時に行った場合にのみ発生するか

■対象範囲確定
 関連しない部分を切り離し、関連する部分を明らかにする。
・ネットワーク
  実行環境でネットワークに依存する部分がある場合
・データベース
  実行環境がデータベースを使用している場合
・マシン
  該当するマシンすべて

■データ収集
 設定値一覧やログファイルなどの処理実行の定義と経過に関するデータを取得する。
 当該アプリケーションそのものだけでなく、その動作環境において調査対象とした
すべての部分を考慮する必要がある。例を以下に示す。

・システム設定、システムログ
・サーバ設定、ログ:アプリケーションがAppServerなどで動作している場合
・データベース設定、ログ:DBを使用している場合
・ネットワーク設定、ログ:ネットワークを使用していて関連がある場合

 もし、有用な情報が取得できない場合は、フラグを設定して詳細情報を出力するように
変更してから再現させてログを取得するべきである。

■問題個所の推定
 収集したデータから問題となりそうな対象と無関係な対象を切り分けていく。
 関連がある対象に関しての情報を精査し、問題個所を推定する。
・ネットワーク
  同じネットワークを使用する別のアプリケーションの動作状況などを調査して問題性の有無を確認
・データベース
  同じデータベースを使用する別アプリケーションなどを調べる
・マシン
  同じマシンで稼働する別のアプリケーションや、システムログの情報から

 対象がしぼれてくれば、フラグを追加して詳細ログを取ったり、ソースを調査して原因と
なりそうな部分を見つけるなどの方法を試す。

2009年1月30日金曜日

CMD.EXE 変数の評価

CMDなどの変数は遅延評価しないのがデフォルト。
下記のようなコードでは、%ERRORLEVEL%は起動時に値が「0」で入ってしまい、途中では変化しない。

@ECHO ON

@ECHO OFF
::cmd.exe
SET NETADRS=%1
for /L %%i in (1,1,254) do (
CALL ping -l 0 -n 1 -a %NETADRS%.%%i
ECHO ERROR : %ERRORLEVEL%
IF %ERRORLEVEL%==0 ECHO FOUND %%i
)


ただしくは、以下のように「ERRORLEVEL」を裸で使用する。

IF ERRORLEVEL 0 ECHO FOUND %%i


 ところが、これだといつでも「FOUND」となってしまう。調べると「 DOS コマンド一覧 > If 」にあるように、ERRORLEVELの指定はその数値以上という意味であった。
 上記のコードではエラーレベルが0以上ならと解釈されていつでも実行することになった。正しくは、下記のようにする。


@ECHO OFF
REM search network ips with ping
::cmd.exe
SET NETADRS=%1
SET DSPNORES=%2
IF "%NETADRS%"=="" (
ECHO "usage: %0 NETADRS(xx.xx.xx) [DSPNORES]"
GOTO END
)

for /L %%i in (1,1,254) do (
ping -l 0 -n 1 -a %NETADRS%.%%i >:NULL
IF ERRORLEVEL 1 (
IF NOT "%DSPNORES%"=="" ECHO -NORES %NETADRS%.%%i
)ELSE ECHO +FOUND %NETADRS%.%%i
)
:END
@ECHO ON

2009年1月29日木曜日

Teeda(Seasar2) のSelectアイテム

Selectタグに項目を埋めるためにListでフィールドを作成したが、意味不明のエラー。

public List<Map<String, String>> locidItems;


* text

java.lang.NullPointerException: text
at org.seasar.framework.util.AssertionUtil#assertNotNull (AssertionUtil.java#41)
at org.seasar.teeda.core.context.html.HtmlResponseWriter#writeText (HtmlResponseWriter.java#152)
at org.seasar.teeda.core.render.html.HtmlSelectManyListboxRenderer#renderSelectItems (HtmlSelectManyListboxRenderer.java#179)
at org.seasar.teeda.core.render.html.HtmlSelectManyListboxRenderer#encodeHtmlSelectListboxEnd (HtmlSelectManyListboxRenderer.java#91)
at org.seasar.teeda.core.render.html.HtmlSelectManyListboxRenderer#encodeEnd (HtmlSelectManyListboxRenderer.java#68)
at javax.faces.component.UIComponentBase#encodeEnd (UIComponentBase.java#348)
at org.seasar.teeda.core.util.RendererUtil#renderChild (RendererUtil.java#327)
以下省略


ここにも同じ経験の人がいて、解決も乗っていた。(解決を見る前に自分でも解決したが、、、)

 サンプルがいまいち分かりにくかったのだが、ListならDtoでよく、Mapなら単独のMapでよかった。
それを、MapのListにし、各Mapには put(labelStr, keyStr) の形でデータを入れていたのだが、MapのListの場合はDtoと同じ扱いになり、"label","value"という名称のフィールドとして扱えることが必須であった。
 つまり、今回の場合だと、Listに追加するMapには、以下のようにデータを入れる必要があった。
map.put("value",keyStr);
map.put("label",labelStr);

2009年1月23日金曜日

Ejb On GlassFish 続き

GlassFishのACCでのLoad-Balance/Fail-Overに関して、SUNのForumに質問して分かったこと。
1)クラスタ内のEJBに対するLB/FOの設定はORBの機能
2)GFのORMは、DynamicにLBする機能はなく、初期接続時のLBのみである
つまり、InitalContext を作成して、Lookupした時点でLBされるのであり、それ以後はおなじクラスタメンバにアクセスすることになる。JBOSSやWAS、WebLogicでは、Optionが必要な場合もあるが、複数の方式のLBをサポートしている。たとえば以下のようなもの。
接続時にLB
毎回LB
トランザクションごとにLB
UDS/Forteでは、最初から上記の方式をサポートしていたことを考えると、GFのORBは退化してしまっているように感じる。ただし、EJBの世界ではUDSのようなRouterとなるプロセスやスレッドを持たないため、ベンダー毎の独自拡張となっているようだ。

2009年1月7日水曜日

Ejb on GlassFIsh

クラスタを組んだGFにEJBを配置してクライアントから呼び出していたが、以下の原因不明のエラーが発生。


Caused by: java.lang.NullPointerException
at com.sun.enterprise.util.ORBManager$1.run(ORBManager.java:386)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.enterprise.util.ORBManager.setORBSystemProperties(ORBManager.java:381)
at com.sun.enterprise.naming.SerialInitContextFactory.(SerialInitContextFactory.java:65)
... 28 more

結局ソースを調べてわかったのは、System.getProperty("java.vendor") が null になっていた。
これは、SystemPropertiesの設定をするところで、以下のようにしたため。
System.setProperties(prpty);
これをすると、prptyに定義されているものだけが残り、ほかはすべてNULLとなる。
Propertiesの指定をした理由はSunのACCを使用せずにクラスタが使えないかを調べるためだったが、
結局普通のクライアントからだとクラスタ化されたJNDIを引くことができずに撃沈。

ACCを使用すると、関連するインスタンスを探し出してそのJNDIをリストアップし、重みづけをして負荷分散できるように設定しているらしいことがログからわかった。ただし、実際のコードの実行部分になると、以下のようなエラーが発生してしまう。


Caused by: java.lang.RuntimeException: メインクラス内の持続性ユニットの注釈の確認中にエラーが発生しました
at com.sun.enterprise.appclient.StandAloneAppClientInfo.classContainsAnnotation(StandAloneAppClientInfo.java:101)
at com.sun.enterprise.appclient.AppClientInfo.mainClassContainsPURefcAnnotations(AppClientInfo.java:413)
at com.sun.enterprise.appclient.AppClientInfo.appClientDependsOnPersistenceUnit(AppClientInfo.java:382)
at com.sun.enterprise.appclient.AppClientInfo.completeInit(AppClientInfo.java:175)
at com.sun.enterprise.appclient.AppClientInfoFactory.buildAppClientInfo(AppClientInfoFactory.java:149)
at com.sun.enterprise.appclient.MainWithModuleSupport.(MainWithModuleSupport.java:366)

2009年1月5日月曜日

大阪王将が閉店

国道沿いとはいえ、ちょっと入りにくい場所だったのが災いしたのか赤字だったようだ。
30日にASAPASS割引を使って6人で親睦会、アツアツのバイキングを堪能して7500円と
お得だったのに残念だ。