画像にテキストを入れるツールを拡張いたしました。

2010/08/06 04:58

ご要望があったこともあり、以前作成したコマンドラインから起動してテキストに画像を入れるツールを、文字色、文字の背景色指定可能にしました。

前記事のリンク先がそのまま最新版となります。

また、わかりやすい?(読み手次第ですが、、、)readme.txtも作成しました。ご活用下さい。

ダウンロード、拡張の詳細は以下記事より↓

コマンドラインから起動しテキストに画像を挿入するツール

EC-CUBEで構築されたサイトのサーバー移行作業手順

2010/06/14 16:58

オープンソースのECサイト構築フレームワークとして人気のEC-CUBE(php)を利用した、ECサイト開発、運用においてデータ移行、サーバー移行手順を以下に示します。
※ LAMP環境からLAMP環境への移行とします。

1. 移行元環境の/eccubeを一式ダウンロード
特に注意点はありません。

2. /eccube/data/install.phpを編集
パスやDB接続情報を新しい環境へ変更します。

3. /eccube/html/user_data以下のphpファイル修正
三行目がrequire_once("移行元環境のルートパス/eccube/html/require.php");等となっている為、全ファイルの「移行元環境のルートパス」を「移行先環境のルートパス」へ置換します。

4. 移行先サーバーへ/eccubeをアップロード
phpファイル、フォルダのパーミッションに気をつけて下さい。

5. 移行元サーバーからDB内容をエクスポート(※1)
phpMyAdmin等から行います。
手順としては、以下の順にするとIOの失敗が少ないです。
5-1・テーブルmtb_zip以外をまとめてSQLファイルでエクスポート
5-2・mtb_zipをSQLファイルでエクスポート

6. 移行先サーバーのDB作成
「2. /eccube/data/install.phpを編集」で設定した通りの名でDBを作成する。

7. 移行先サーバーへDB内容をインポート(※1)
phpMyAdmin等から行います。
手順としては、以下の順にするとIOの失敗が少ないです。
「6. 移行先サーバーのDB作成」で作成したDBに対し、
7-1・mtb_zip以外のSQLファイルをインポート
7-2・mtb_zipを3ファイル程度に分割する(SQLの知識必須)
ファイルが大きいと、こけて壊れる可能性ある為。編集時は文字コードに注意する。
7-3・mtb_zipをそれぞれインポート

以上です。
管理画面は/eccube/html/admin/から移行元環境と同じid,passwordで入れます。
別のやり方であれ、注意すべき点は
・「install.phpを編集」
・「user_data以下のphpファイルのrequire文修正」(※管理画面から再登録という手もあります)
・「DBのエクスポートとインポート(文字コード、テーブルの大きさ)」
でしょう。
方法は他にもいくつかあると思いますが、比較的楽な方法ではないでしょうか。

※1 文字コードは、大抵の場合utf-8で処理すれば問題はないはずです。移行元と移行先のphpMyAdminで確認して下さい。

windows mobileでApache × Perl(Perl開発環境構築)

2010/05/07 17:47

windows mobileでPerlのウェブアプリケーション開発環境を構築する手順を以下に示します。

端末: windows mobile6.1 Professional Edition(AUの端末E30HTを使用)
dll hellさえ気をつければ他の端末でも大丈夫だと思います。
※ こちらは一切責任を取りません。構築する場合は自己責任でお願いいたします。

まずは下記3つをダウンロード

【ApacheCE】
ドキュメント
http://digit.que.ne.jp/work/wiki.cgi?ApacheCE
ダウンロード先
http://www.wince-devel.org/wince/dirlist.html
ファイル名:apache-arm-hpc-wce300-2002-10-18.tar.gz

【PerlCE】
ドキュメント
http://digit.que.ne.jp/work/wiki.cgi?PerlCE
ダウンロード先
http://sourceforge.net/projects/perlce
ファイル名:perl-wince-arm-pocket-wce300.zip
ファイル名:celib-3.11-dll-src.tar.gz

【PerlIDE】
ドキュメント
http://digit.que.ne.jp/work/wiki.cgi?PerlCEDocument#i4
ダウンロード先
http://www.rainer-keuchel.de/wince/dirlist.html
ファイル名:perlide-wince-arm-hpc-wce300.tar.gz

************************手順************************

1.\windows\にあるmfcce300.dllのバックアップをとる
他にインストールしたアプリと干渉した際にdll hellに陥る為必須。
「有効なWindowsCEアプリケーションではありません。」状態になる可能性がある。

2.【apacheCE】【perlCE】【PerlIDE】のインストール
apache-arm-hpc-wce300-2002-10-18.tar.gz
perl-wince-arm-pocket-wce300.zip
perlide-wince-arm-hpc-wce300.tar.gz

インストールと言っても、それぞれを解凍しwindows mobileのディレクトリに展開、exeを実行するだけです。
ディレクトリ構成に特に決まりはありませんが、直下に\usr\というフォルダを作成し、それぞれ、

  • apache → \usr\apache\apache.exe
  • perlCE → \usr\bin\perl.exe
  • perlIDE → \usr\ide\perlIDE.exe

といった形になるよう展開して実行すると、一式まとまるのと、perlのパスがweb serverにhostingする際に一致するパターンが多いので楽かも知れません。

3.perlide.exeと同一階層に、この時点で\windows\にあるmfcce300.dllを入れる
dll hell対策。perlide.exeが自分と同一階層のmfcce300.dllを参照する様にする為。

4.1でバックアップをとったmfcce300.dllを\windows\直下に上書き

5.celib-3.11-dll-src.tar.gzを解凍後celib.dllを\windows\直下へ入れる

6.定義ファイル、UIで環境設定
【apacheCE】
\conf\httpd.conf ※設定内容はapacheとほぼ一緒
【perlIDE】
UIからPerl>>Options>>PerlPathに【perlCE】内のperl.exeのパスを設定
【perlCE】
libを使うならPerlCEの/lib/Config.pm内のパスを自分の環境に書き換える


1~6までが終了したら、まずはドキュメントルート(デフォルトだとhtdocs)直下に適当なindex.htmlを置き、http://localhost/index.htmlでアクセス。表示されたらapacheCEの環境は成功です。
次は適当なcgiファイルを作成して上記と同様にアクセスしてみましょう。

設定ファイルのミスを除き構築上問題はないはずです。何かありましたらコメントを下さい。
尚、windows mobileに環境を作るくらいなので、mobile環境以外でも構築経験のある方が対象です。

で、実際開発なんですが、サラリーマン時代、通勤中にPerlのクラスライブラリを作るくらいにしか使ってなかったのでapacheは意味をなしませんでした。。。

E30HTも当時後続でしたがスペックがいまいち。

AI対戦型オセロのバージョンアップを行いました。

2010/05/06 02:46

好評頂いているAI対戦型オセロゲームですが、戦績を残せる様になりました。

http://www.atohi.com/osg

テンプレートエンジンfreemarker2.*で自作のタグを作成

2010/05/02 18:15

軽量テンプレートエンジン、freemarker2.*でJavaのカスタムタグ等の様に、特殊な動きを実装した自前のタグを定義しテンプレートの中で使える様にする方法を以下に示します。

テンプレートからの呼び出し方法は<@定義名 />となります。

まず、現時点で方法は2つあります。

一つはTemplateDirectiveModel、もう一つはTemplateTransformModelを実装する方法です。

freemarkerのバージョンが2.1くらいまではTemplateDirectiveModelが使えない為、TemplateTransformModelでやることになりますが、現在TemplateTransformModelは非推奨なので、なるべくTemplateDirectiveModelを使用しましょう。以下に実装方法を両方とも記載いたします。

【TemplateDirectiveModelでの実装】

1.TemplateDirectiveModelを継承したクラスを作成

/** ここから */

import java.io.IOException;
import java.util.Map;

import freemarker.core.Environment;
import freemarker.template.TemplateDirectiveBody;
import freemarker.template.TemplateDirectiveModel;
import freemarker.template.TemplateException;
import freemarker.template.TemplateModel;

public class CustomDerectiveModel implements TemplateDirectiveModel{   
    @Override
    public void execute(Environment env, Map map, TemplateModel[] tms,
        TemplateDirectiveBody tdb) throws TemplateException, IOException {
    }
}

/** ここまで */

 

2. freemarker.template.Configurationクラスのインスタンス生成

Configuration config = new Configuration();
config.setSharedVariable("cdm", new CustomDerectiveModel());

※1 "cdm"は任意。テンプレート呼び出し時の名前
※2 CustomDerectiveModelは上記で作成したクラス

 

3. freemarkerのテンプレートは以下の通り記述

/** ここから */

<@cdm attrA="属性値1" attrB="属性値2">bodyです</@cdm>

/** ここまで */

上記からCustomDerectiveModelのexecuteメソッドが呼び出されます。

attrA~の属性値1~はMap、「bodyです」はTemplateDirectiveBodyに入っています。

あとはWriterに書き込んでいくいくだけです。そこでの実装で注意する点はスレッドセーフにすることです。

サンプルソースは、英語ですが本家ドキュメントが詳しいので参考にして下さい。http://freemarker.sourceforge.net/docs/pgui_datamodel_directive.html

 

【TemplateTransformModelでの実装】

1.TemplateTransformModelを継承したクラスを作成

/** ここから */

import java.io.IOException;
import java.io.StringReader;
import java.io.StringWriter;
import java.io.Writer;
import java.util.Map;
import freemarker.template.TemplateModelException;
import freemarker.template.TemplateTransformModel;

public class CustomTransformModel implements TemplateTransformModel{

    @Override
    public Writer getWriter(final Writer out, Map map)
            throws TemplateModelException, IOException {
        final StringBuilder buf = new StringBuilder();
        return null;
    }
}

/** ここまで */

 

2. freemarker.template.Configurationクラスのインスタンス生成

Configuration config = new Configuration();
config.setSharedVariable("ctm", new CustomTransformModel());

※1 "ctm"は任意。テンプレート呼び出し時の名前
※2 CustomTransformModelは上記で作成したクラス

 

3. freemarkerのテンプレートは以下の通り記述

/** ここから */

<@ctm attrA="属性値1" attrB="属性値2" />

/** ここまで */

上記からCustomTransformModelのgetWriterメソッドが呼び出されます。

attrA~の属性値1~はMapに入っています。当方式ではタグのネストは許されない様です。※ java.io.IOException: This transform does not allow nested content.

あとはWriterに書き込んでいくいくだけです。こちらも注意点はスレッドセーフにすることです。

サンプルソースは、英語ですが本家ドキュメントが詳しいので参考にして下さい。http://freemarker.sourceforge.net/docs/api/freemarker/template/TemplateTransformModel.html

以上です。