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

以上です。

SKYPEチャットログの場所と、外部アプリからの照会、削除、バックアップ方法に関して

2010/05/01 12:16

SKYPEチャットログの場所と、外部アプリからの照会、削除、バックアップ方法に関して以下に記述します。

申し訳ありませんがwindows vista限定です。

まず、SKYPEのチャットログは以下に格納されています。

C:\Users\"PCユーザ名"\AppData\Roaming\Skype\"SKYPEユーザ名"\main.db

main.dbファイルはsqlite3のデータベースなので、CSE等のSQLクライアントを使用してデータを取得することになります。つまり、SKYPEのチャットログを削除する際はSQLでdelete~を投げる、照会する際はselect~を投げるといった具合になるわけです。

※ 本ブログではCSEで取得する手順を説明いたします。

 

1.sqllite3のドライバーを入手

日本語文字コード対応版が望ましいので、以下のサイトからダウンロードして下さい。
※ 日本語文字コード未対応だとCSEからODBC経由時に文字化けします。

http://kzworks.at.webry.info/200908/article_41.html

サイトに書いてある手順でインストールまで行って下さい。

※ リンク先はURIが無くなる恐れがあります。その際はgoogleで「sqlite3 odbc 日本語」等と検索してみて下さい。

 

2.CSEを入手

http://www.vector.co.jp/soft/dl/win95/business/se180732.html

※ リンク先はURIが無くなる恐れがあります。その際はgoogleで「CSE ダウンロード」等と検索してみて下さい。

 

3.ODBC データソース アドミニストレイターでユーザーデータソースを登録

ODBCデータソースアドミニストレイターを起動、「ユーザーDSN>追加」を押下し以下の画面へ。

SQLite3 ODBC Driverがインストールされていることを確認。ダブルクリック。

Data Source Name: 任意(ここではskypeとしている)
Database Name: C:\Users\"PCユーザ名"\AppData\Roaming\Skype\"SKYPEユーザ名"\main.db

としてOK押下。ユーザーデータソースに追加されていることを確認。

 

4.CSEを起動

CSEを起動、「データベース>接続」を押下し、以下を指定。(データソースのDDLには、上記で指定したData Source Nameが存在しているはず)

OKを押下し、正常に接続されることを確認。チャットの内容はMessagesテーブルに入っているので、CSEからselect * from MessagesのSQL文を実行、body_xmlのカラムが目的のチャット内容、dialog_partnerが相手です。

以上です。

削除する際は delete * from Messages where dialog_partner = '削除したい人のskype名' を実行すればOKです。

Tags:

DB | IT | skills | テクニック

EC-CUBEのユーザ名、パスワードを忘れた場合の対処

2010/04/29 19:13

phpでECサイトを構築する際によく使われているEC-CUBEで、ユーザ名、パスワードを忘れた場合の再設定方法を説明致します。

※ データベースの値をphpMyAdmin等外部からいじれる事が前提
※ 簡単なphpプログラムが書ける、実行環境がある前提

まずはデータベースを開きましょう。接続文字列、認証情報は/eccube/data/install.phpに書いてあります。

define ('DB_USER', '~~~~~~');
define ('DB_PASSWORD', '~~~~~~');
define ('DB_SERVER', '~~~~~~');
define ('DB_NAME', '~~~~~~');

ユーザ情報はdtb_memberテーブルに入っています。ユーザ名はlogin_id、パスワードはpasswordのカラムです。

ユーザ名はそのままで使用すればOK。

ん、パスワードは見慣れない数字とアルファベットの羅列ですね。これは暗号化という奴です。あなたが指定したパスワードは暗号化されてDBに入っているということです。

※ これは常識です。もしもあなたがユーザ認証を使用するタイプのアプリケーションを何かしら利用した際にパスワードが平文のままDBに入っていたら、即そんなものを使うのはやめましょう。開発者が稚拙か、単なる面倒くさがりや、もしくは悪用しようと企んでいる人です。

さて、話がそれましたが、上記から、パスワードはそのままでは使えませんのでDBのデータを更新しましょう。

更新内容ですが、まずはあなたが新しくパスワードに選ぶ文字列をsha1で暗号化する必要があります。

eccube/data/mtb_constants_init.phpを開き、

/** 認証用 magic */
define('AUTH_MAGIC', "~~~~~~~~~~~(以降※1)");

となっている箇所を見つけてください。※1は数字とアルファベットの羅列。

phpで以下を実行。

echo sha1("新規アルファベット用文字列" . ":" . "※1");

出力された数字とアルファベットの羅列をdtb_member.passwordにセット。

以上で再びログイン!!