SAStrutsのフォワード用URLにどうしても"."を入れたい場合
SAStrutsで別のアクションにフォワードする場合、URLにクエリーを付けることもできますが*1、こういうURLだと動作しませんでした。
return "/foo?num=1234.56";
理由は、org.seasar.struts.config.S2ActionMapping#createForward(String, boolean)で、"."が含まれるURLはJSPと見なされて、頭に"/WEB-INF/view"が付いたURLに変換されるため。
S2ActionMappingをそのまま使う場合は、以下の方法で回避可能。
対策1. "."を"%2e"に置換する。
URLデコード不要で特に問題なく使えました。
対策2. requestのParameterMapに項目追加。
SAStrutsで管理されてるrequestのgetParameterMap()は変更可能なようなので、クエリーの代わりにパラメータをput。
パラメータをログ出力するのとかは面倒。
対策3. Struts形式のURLにして":"を含める。
":"があるとURLが一切変換されなくなるので、自前でS2ActionMapping#createRoutingPath(String)を呼んでURLを変換した後、クエリーとかフラグメントとして適当に":"を追加。
動くけど汚い。
対策4. 適当な文字に置換して、フォワード先で戻す。
対策1で十分。
結論
なるべくなら、ちゃんとActionFormでなんとかした方が良さそう。
どうしようもないときは1か2で。
QNAP TS-659にTwonky Media Serverを入れる
PS3からDLNAで音楽を再生する場合に、PS3 Media Serverを使う場合、FLACのトランスエンコーディングは問題ないのですが、ファイル単位かディレクトリ単位での再生しかできず、あまりに使い勝手が悪いので、メタデータを解釈してくれるTwonky Media Serverを導入しました。
1.Twonky Media Serverを導入
大まかには以下のような手順。
トランスエンコーディング設定は PS3 + FLAC solution? - QNAP NAS Community Forum を参照。
flac.locationの中身を/opt/binに変えるだけで動作しました。
成功すればhttp://サーバーアドレス:9000/ で参照できます。
ただし、コンテンツディレクトリの再スキャンやDB再構築を行っても、メタデータが正しく読み込まれない不具合が発生。
どうも、FLACにID3v2タグを使っているのが良くなかった模様
2. ID3v2タグの削除
Removing id3 tags from .flac files - robinbowes.comにあるように、ipkgでid3v2をインストールして、下のコマンドをsshコンソール上から実行すればOK。
find . -name "*.flac" -exec id3v2 --delete-all {} \;
ただし、id3v2をインストールしてそのまま使うと、以下のエラーが発生
# id3v2 --help id3v2: error while loading shared libraries: libid3-3.8.so.3: cannot open shared object file: No such file or directory
ipkgでインストールされる共有ライブラリの配置先は /opt/lib ですが、これが /etc/ld.so.conf に記載されていないのが原因の模様。
/etc/ld.so.conf を修正して、共有ライブラリキャッシュを再構築することで解決。
# echo "/opt/lib" >> /etc/ld.so.conf # /sbin/ldconfig # id3v2 --help Usage: id3v2 [OPTION]... [FILE]... ...(以下略)...
これで、ID3v2コマンドが使えるようになりましたが、標準のbusybox v1.01だとfindのexecオプションが使えないため、ipkgでbusyboxを入れてfindのシンボリックリンクを張り替える作業も必要です。
ランダム抽出
親テーブルのデータに関連する子テーブルのデータから一件ランダム抽出して表示する場合
SELECT x, (SELECT y FROM test_b WHERE test_a.x = test_b.x ORDER BY RANDOM() LIMIT 1) AS y FROM test_a;
でも出来るけど、親の件数分サブクエリが実行されてしまい、コストが予想外にでかくなるので
SELECT DISTINCT ON (x) x, y FROM ( SELECT x, y, RANDOM() AS r FROM test_a JOIN test_b USING (x) ORDER BY x, r ) AS a
の方が良さげ
CSVの各要素をシングルクォートで囲む
s/([^,]+?)(?=(,|$))/'$1'/
QNAP TS-239へのWordpress 3.1インストール
ほぼhttp://www.qnap.com/jp/pro_application.asp?ap_id=206のとおりです。
TS-239のファームウェアは3.4.1を使用しています。
MySQLサーバーの用意
- phpMyAdmin QPKGのインストール
- Web Serverを有効にする。
- MySQL Serverを有効にする
- ブラウザでhttp://NAS-IP-Adress/phpMyAdmin/ *1にアクセス
- root/adminでログイン
- wordpress用のデータベース(e.g. wordpress)を作成
- 照合順序は utf8-unicode-ci
- wordpress用のユーザー(e.g. wordpress)を作成し、wordpressデータベースの権限を設定
- Grant all privileges on database "wordpress"を選択すれば、良いようにやってくれます。
ipkg info mysql5 も確認してみたんですが、バージョン5.0.88-1で、デフォルトのMySQL(Ver 14.14 Distrib 5.1.36, /usr/local/mysql/bin/mysql --versionで確認)より低かったので、特に弄ってません。
Wordpress QPKGのインストール
とりあえずQPKGをインストールし、QPKG InstalledタブのWordpressアイコンをクリックして、Installation PathとWeb Pageの内容を確認してください。
ついでに、Web Pageを表示してインストール用の画面が出ることも確認。
Wordpress日本語版への差し替え
日本語 — WordPressから最新版(今回は3.1-ja)のtarボールを落としてきて、差し替えます。
一応QPKG版のアクセス制限を確認しておいてください。
少なくともグループの書き込み権限がないと面倒くさそうです。(インストール時にconfファイル作成に失敗する。)
# cd /tmp # wget http://ja.wordpress.org/wordpress-3.1-ja.tar.gz # tar -zvf wordpress-3.1-ja.tar.gz # rf -rm /share/Qweb/wordpress # mv wordpress /share/Qweb/ # chown -R admin:administrators /share/Qweb/wordpress # chmod -R g+w /share/Qweb/wordpress
Wordpressのインストール
http://NAS-IP-Adress/wordpress/ にアクセスして、DB情報とユーザー情報等を設定したら完了。
考察
確認しなかったけど、Wordpress QPKGって要らないような気もする…。どうなんだろう?
*1:QPKG PluginsのQPKG InstalledタブのphpMyAdminのアイコンからリンクの確認ができます。
Windowsへのgitのインストール
今更ですが備忘録として、以前の職場で使っていた時の内容をまとめ
msysgitをインストールする
http://code.google.com/p/msysgit/ から実行ファイル(2011-03-21現在だと、Git-1.7.4-preview20110204.exe)をダウンロードして実行。
この際に、「Use a TrueType font in all console windows (not only for Git Bash)」はオフにした方が良いです。
オンにした場合、コマンドプロンプト全般でフォントが変わります。
msysGitをインストールしたらコマンドプロンプトが文字化け - Silent Powerを参照。
msysgitの多言語対応(任意)
WindowsでのGit環境構築とその注意点 | OSDN Magazineを参照し、下記のようにコマンドを置換する。
- Downloading lessからWindows用のバイナリ(2011-03-21時点では、less436w.zip)を取得。
- less436w.zipを解凍し、中のless.exeを _Gitインストール先_\bin に上書きする
- http://www.asuka.cx/software/nkf/からnkf-2.0.8b.bin.tar.gzを取得。
- nkf-2.0.8b.bin.tar.gz を解凍し、中のnkf.exeを _Gitインストール先_\bin に移動する
- _Gitインストール先_\etc\gitconfig ファイルを以下のように修正。
- [core]セクションに、以下を追加
pager = nkf -s | less
Gitの環境設定
Git bashを起動し、以下を設定。
$ git config --global user.name "自分のユーザー名" $ git config --global user.email "自分のメールアドレス" $ git config --global color.ui auto
TortoiseGitをインストールする
TortoiseGitの設定
コンテキストメニューから、[TortoiseGit] - [Settings] を選択し、以下を設定。
- [External Programs] - [Diff Viewer] に WinMergeを指定する場合、以下のように入力
C:\Program Files\WinMerge\WinMergeU.exe /e /x /ub -dl %bname -dr
%yname %base %mine
- [External Programs] - [Diff Viewer] に WinMergeを指定する場合、以下のように入力
C:\Program Files\WinMerge\WinMergeU.exe %merged
- TortoiseGitを入れたら重くなった場合、[Icon Overlays]で制限をする
- [Status Cache]を"None"に変更
- [Drive Type]を全てOFFにする
- [Include Paths]に、作業ディレクトリを指定する。(例:c:\path\to\git\*)
ツリーハウスのルール
アクション
原則:
- アクションの前と後で形が変わること。
- 同じ場所にHOPや、AIMで向きを変えない等は禁止
- 他のピラミッドに被ったら立たせること。
TIP
- 立っている or スタックしているピラミッドを倒す。
- どっちに倒してもOK。
- スタックを倒した場合、スタックすべてを重なっている順にばらす。
- 部分的に倒すことは不可。
HOP
SWAP
- 任意の2つのピラミッドを入れ替える。
- ピラミッドの状態は、そのまま引き継ぐ。
- ただし、SWAPでスタックか入れ子になった場合は、元の状態を無視する
- スタック単位での入れ替えは不可。
- 小 -> 中 -> 大 から 中 -> 大 -> 小 は不可。
- 小 -> 中, 大 から 大, 小 -> 中 は不可
- 立っていても寝ていてもOK
AIM
- スタック・入れ子でないピラミッド1つの向きを変える。
- 立っていても寝ていてもOK
DIG
- 寝ているピラミッドを、他のピラミッドの横か下に移動する。
- 移動したピラミッドは立たせる。
- 対象のピラミッドの先端方向にのみ移動可能。(バック不可)
WILD
他のアクションのどれか1つを実行