2008年12月28日日曜日

CSSで要素を表示したり非表示にしたりする方法

CSSで要素を非表示にする方法をメモしておきます.

display プロパティに none を指定すると,要素は完全に表示されなくなります.

<span style="{display: none;}">要素</span>を非表示

visibility プロパティに hidden を指定すると,要素は表示されませんが,表示領域は確保されます.

<span style="{visibility: hidden;}">要素</span>を非表示

[1] スタイルシート CSS / ボックス / 表示・非表示を指定する
http://www.tagindex.com/stylesheet/box/visibility.html

Subversionにてリポジトリ内のディレクトリを削除する方法

Subversionにてリポジトリ内のディレクトリを削除する方法を以下にメモしておきます.

svn delete -m "コメント" 削除するディレクトリのURL

2008年12月26日金曜日

DojoでHTML要素をドラッグアンドドロップする方法

Dojoを使ってHTML要素をドラッグアンドドロップする方法をメモしておきます.

<script type="text/javascript">
dojo.require("dojo.dnd.Moveable");
dojo.addOnLoad(function() {
  var movable = new dojo.dnd.Moveable(dojo.byId("movable"));
});
</script>
  :
<div id="movable">...</div>
  :


[1] dojoライブラリでドラッグ&ドロップ!, http://kanamehackday.blog17.fc2.com/blog-entry-120.html

TracWebAdminプラグインのインストール

TracWebAdminプラグインをインストールしたので,その方法をメモしておきます.

# su
# yum install yum install trac-webadmin
# vi /var/www/trac/dokan/conf/trac.ini
--
[components]
webadmin.* = enabled
--
# trac-admin /var/www/trac/dokan permission add admin TRAC_ADMIN
# /sbin/service httpd restart


[1] Tracの使い方 - TracWebAdminインストール -
http://ameblo.jp/itboy/entry-10036436354.html

2008年12月20日土曜日

HTTPヘッダのAccept-Encodingフィールド

HTTPヘッダのAccept-Encodingフィールドについてメモしておきます.

Accept-Encodingフィールドは,クライアントが受け入れることのできるレスポンスボディのエンコード方式です.その値には,gzip,compress,identity,*等があります.詳しくは下記の資料に掲載されています.

リクエストヘッダにこのフィールドが記されていて,サーバにその値に対応する能力があれば,その値で指定された方式でレスポンスボディをエンコードします.

[Studying HTTP] Message Bogy 内容コーディング
http://www.studyinghttp.net/body#Content_Codings

2008年12月16日火曜日

TracGanttCalendarプラグインのインストール

TracGanttCalendarプラグイン(for Trac-0.10(trac-ja))をインストールしたので,その方法をメモしておきます.

$ wget http://pw.tech-arts.co.jp/technical/src/ganttcalendar-0.0.1.tar.gz
$ tar zxvf ganttcalendar-0.0.1.tar.gz
$ cd ganttcalendar-0.0.1
$ python setup.py bdist_egg
$ su
# chgrp apache /var/www
# chmod g+rwx /var/www
# cp dist/TracGanttCalendarPlugin-0.0.1-py2.4 /var/www/trac/dokan/plugins
# vi /var/www/trac/dokan/conf/trac.ini
--
[ticket-custom]
due_assign = text
due_assign.label = 開始日
due_assign.order = 1

due_close= text
due_close.label = 終了日
due_close.order = 2

complete= text
complete.label = 進捗率(%)
complete.order = 3
--
# /sbin/service httpd restart


注意点は以下のとおりです.
  • python-setuptools.noarch.rpmをインストールしておく必要あり.
  • /var/wwwディレクトリに.pyhton-eggsというディレクトリを作成するので,/var/wwwディレクトリにapacheが書込み権限を持っている必要あり.

[1] TracGanttCalendarプラグイン for Trac-0.10(trac-ja)
http://pw.tech-arts.co.jp/technical/2008/04/trac_tracganttcalendar_for_tra.html

2008年12月10日水曜日

WordPressのエントリへのpタグの自動挿入機能の解除方法

WordPressのエントリへのpタグの自動挿入機能を解除する方法をメモしておきます.

wp-includes/default-filters.phpの

add_filter('the_content', 'wpautop');

をコメントアウトするだけです.

[1] WordPressエントリ内の<P>タグを無効化
http://blog.sudabon.com/archives/30

2008年12月9日火曜日

Tracのインストール

Tracをインストールしました.その方法をメモしておきます.

yum install apache subversion trac mod_dav_svn mod_python mod_ssl
vi /etc/httpd/conf.d/subversion.conf
--
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so

DAV svn
SVNParentPath /var/www/svn
# Limit write permission to list of valid users.

# Require SSL connection for password protection.
SSLRequireSSL
AuthType Basic
AuthName "Member Only"
AuthBasicProvider ldap
AuthLDAPURL ldap://xx.xx.xx.xx:389/xxxx
AuthLDAPBindDN cn=Manager,xxxx
AuthLDAPBindPassword xxxxxxxx
AuthzLDAPAuthoritative off
Require valid-user


--
vi /etc/httpd/conf.d/trac.conf
--

SetHandler mod_python
PythonDebug On
PythonHandler trac.web.modpython_frontend
PythonOption TracEnvParentDir /var/www/trac
PythonOption TracUriRoot /trac


SSLRequireSSL
AuthType Basic
AuthName "Member Only"
AuthBasicProvider ldap
AuthLDAPURL ldap://xx.xx.xx.xx:389/xxxx
AuthLDAPBindDN cn=Manager,xxxx
AuthLDAPBindPassword xxxx
AuthzLDAPAuthoritative off
Require valid-user

--
mkdir /var/www/svn
chown apache:apache /var/www/svn
mkdir /var/www/trac
chown apache:apache /var/www/trac
svnadmin create /var/svn/test_project
chown -R apache:apache /var/svn/test_project
trac-admin /var/trac/test_project initenv
chown -R apache:apache /var/trac/test_project

VelocityにてResourceNotFoundException

Velocityを使い始めたのですが,早々にResourceNotFoundExceptionという例外に遭遇してしまいました.ちょっと調べると解決できたので,その方法を以下にメモしておきます.

資料[1]を参考に以下のようなコードを書いて実行すると,テンプレートファイルが置かれた正しいパスをVelocity#getTemplateメソッドに指定しているにもかかわらず(ちなみにこれは自分の間違った解釈です),そのファイルがないことが原因でResourceNotFoundExceptionが発生し,プログラムが異常終了します.

Velocity.init();
VelocityContext context = new VelocityContext();
context.put("sensorName", sensor.getName());
Template template = Velocity.getTemplate(this.rootPath +"chart.vm", "UTF-8");
StringWriter writer = new StringWriter();
template.merge(context, writer);
buffer.append(writer.toString());


ライブラリに添付されていたドキュメントを読むと,Velocity#getTemplateメソッドの引数に指定するテンプレートファイルのパスは,Velocityのfile.resource.loader.pathというプロパティからの相対パスになるとのことでした.

そういうわけで,必要なプロパティ(file.resource.loader.path以外にもいくつかあります)をセットしたPropertiesクラスのインスタンスをVelocity#initに与えてやると,うまくテンプレートファイルを読み込むことができました.

Properties properties = new Properties();
properties.setProperty("resource.loader", "file");
properties.setProperty("file.resource.loader.class", "org.apache.velocity.runtime.resource.loader.FileResourceLoader");
properties.setProperty("file.resource.loader.path", this.rootPath);
properties.setProperty("file.resource.loader.cache", "true");
properties.setProperty("file.resource.loader.modificationCheckInterval", "2");
Velocity.init(properties);
VelocityContext context = new VelocityContext();
context.put("sensorName", sensor.getName());
Template template = Velocity.getTemplate("/chart.vm", "UTF-8");
StringWriter writer = new StringWriter();
template.merge(context, writer);
buffer.append(writer.toString());


[1] Velocity
http://www.techscore.com/tech/ApacheJakarta/Velocity/index.html

2008年12月5日金曜日

Cygwinの日本語化

Cygwinの日本語化についてメモしておきます.

[lsの日本語表示]
~/.bashrc
alias ls='ls --show-control-chars'

[vimの日本語表示]
~/.vimrc
set encoding=japan
set fileencodings=iso-2002,utf-8,euc-jp,cp932


[日本語入力]
~/.inputrc
set convert-meta off
set meta-flag on
set output-meta on


[1] Cygwin/日本語化
http://co-coa.sakura.ne.jp/index.php?Cygwin%2F%E6%97%A5%E6%9C%AC%E8%AA%9E%E5%8C%96

2008年11月30日日曜日

java.util.Calenarクラスへの値の設定

java.util.Calenarクラスへの値の設定に関する注意点についてメモしておきます.

java.util.Calenarクラスへの値の設定には,setメソッドを使います.
  • 年の値の場合,set(Calendar.YEAR, 年の値)
  • 月の値の場合,set(Calendar.MONTH, 月の値) .月の値は1月を表す0から始まる.
  • 日の値の場合,set(Calendar.DAY_OF_MONTH, 日の値)
  • 時の値の場合,set(Calendar.HOUR_OF_DAY, 時の値)
  • 分の値の場合,set(Calendar.MINUTE, 分の値)
  • 秒の値の場合,set(Calendar.SECOND, 秒の値)

2008年11月27日木曜日

Eclipse Ganymede に Subversive をインストール

Eclipse Ganymede に Subversive をインストールしたので,その手順をメモしておきます.
  1. 「Help」 -> 「Software Updates...」を選択
  2. 「Available Software」を選択
  3. 「Add Site...」を選択
  4. 「Location」に「http://www.polarion.org/projects/subversive/download/eclipse/2.0/ganymede-site/」を入力
  5. 「OK」を選択
  6. 「Ganymede」 -> 「Collaboration Tools」 -> 「Subversive SVN Integration for the Mylyn Project (Optional) (Incubation)」を選択
  7. 「http://www.polarion.org/projects/subversive/download/eclipse/2.0/ganymede-site/」 -> 「Subversive SVN Connectors」を選択
  8. 「Install」を選択
  9. 「Finish」を選択

2008年11月8日土曜日

JavaScriptで選択範囲にある文字列を取得する方法

JavaScriptで選択範囲にある文字列を取得する方法をメモしておきます.
ブラウザによって方法が違うみたいですね.
Internet Explorer
document.selection.createRange().text;
Mozilla Firefox
document.getSelection();
window.getSelection();
Safari
window.getSelection();
Opera
document.getSelection();
JavaScript における選択範囲文字列取得の動向
http://wannabe.sweet-smile.org/ent/eid105.htm

2008年10月24日金曜日

Webページにグラフを描く方法

Webページにグラフを描くWebサービスを見つけたので,メモしておきます.

当初は,Javascriptでそうするライブラリを探していたのですが,ブログのエントリにグラフを収めるには,Google Chart APIを使うのが一番手っ取り早そうなので,使ってみました.

結果はうまくいきました.ただ,現在の案件に必要な機能はやっぱりないみたいなので,結局は自作することになりそうです.でも,とても簡単にグラフが描けるから,これからは重宝しそうです.Googleに感謝ですね.

Google Chart API
http://code.google.com/apis/chart/

WordPressのサイドバーにGoogleMapを表示する方法

WordPressのサイドバーにGoogleMapを表示する方法をメモしておきます.

WordPressでは,サイドバーに置く部品のことをウィジェットと呼ぶみたいです.当初は,ウィジェットとプラグインは別物だと思っていました.だから,インストールするときに,ウィジェットという名前のディレクトリがあるのかと思ってしまい,それを探すのに結構な時間を使ってしまいました.結局,見当たらないので,プラグインのディレクトリに放り込んでみたら,ウィジェットの設定画面に Google Maps Widget が現れました.

WordPress Google Maps Widget
http://shubhhub.com/2007/01/24/wordpress-google-maps-widget/

2008年10月17日金曜日

情報抽出に関する論文

情報抽出に関する以下の論文についてメモしておきます(論文にはない個人的な意見も含んでいます).

Chia-Hui Chang, Mohammed Kayed, Moheb Ramzy Girgis, Khaled Shaalan: A Survey of Web Information Extraction Systems, IEEE Transactions on Knowledge and Data Engineering, Vol. 18, No. 10, pp. 1411-1428, 2006-10.

[背景]
・Webの爆発的成長と普及により,膨大な量の情報源がインターネット上に存在するようになった.
・Web上の情報源の異種性や構造の欠落によって,情報探索や情報検索は限定されたものになっている.
・入力ページを構造化データに自動変換するために,情報抽出の分野では,多大な労力が捧げられてきた.
・情報抽出は,Webマイニングや検索ツールには不可欠である後処理に必要な構造化データを生成する(情報検索は,文書集合から関連する文書を特定することに関心がある.).

[情報抽出タスク]
・入力と出力によって定義できる.
・入力は,自然言語で書かれたテキストや半構造化文書である.
・出力は,k組のリレーションや階層的構造をもった複合オブジェクトである.
・属性の様々な組み換えや入力エラーが生じたときに難しくなる.
・Webを対象とした情報抽出タスクは,伝統的な情報抽出タスクとは異なる.

[伝統的な情報抽出タスク]
・非構造なフリーテキストが対象である.
・自然言語処理技術が有効である.

[Web情報抽出タスク]
・半構造化テキスト(アプリケーションが自動作成したものも多い)である.
・機械学習やパターンマッチング技術が有効である.

[ラッパー]
・情報抽出タスクを実行するプログラムをextractorあるいはwrapperと呼ぶ.
・もともとは,情報統合システムの要素だった.
・情報統合システムでは,ラッパーは,システムの検索モジュールが変更なしに,異なる方式の情報源にアクセスできるように,情報源をラップするプログラムのことである.
・通常は,抽出ルールの集合に基づいてパターンマッチングをする.

[ラッパー帰納]
・ラッパ帰納システムとは,ラッパーを生成するソフトウェアツールである.
・再利用性を最大化,保守性を最小化するため,訓練可能なWIシステムを設計することは重要である.

[関連研究]
・MUCがIEの初期の成果に貢献した.
・多くの研究者がラッパーを分類している.
・IEシステムの評価には,3つの次元(対象とするタスクの種類,利用する技術,自動化の程度)がある.

[タスク]
・構造:非構造(unstructured),半構造(semi-structured), 構造(structured)
・対象:レコード,ページ,サイト
・表現:missing attributeの有無,multi-valued attributeの有無,multi-ordering attributeの有無,disjunctiveルールの有無,抽出対象の粒度(区切り文字によってトークンが区切られている程度)

[利用技術]
・tokenization/encoding schemes:タグレベル,語レベル
・learning algorithm:top-down generalization,bottom-up generalization,pattern mining,logic programming
・extraction rule type:正規文法,論理規則
・features involved:パス表現,構文規則,意味制約,区切り制約
・scan pass:シングルパス,マルチパス

[自動化]
・user expertise
・applicability
・limitation
・page-fetching support
・output support and API support

[WI Systems]
・分類:手作業で構築,教師付き,半教師付き,教師なし

[手作業で構築される WI System]
・ユーザが通常のプログラミング言語や特別なプログラミング言語を使ってWebサイトごとにラッパーをプログラミングする.
・ユーザにプログラミングやコンピュータのスキルを要求する.
TSIMMIS,Minerva,WebOQL,W4FXWrap

[教師付き WI Systems]
・抽出するデータの例をラベルづけしたページの集合を受け取り,ラッパーを出力する.
・ユーザは,ラベルづけされた例の初期セットを提供する.
・ラベリングGUIの利用を訓練するだけでいいので,ラッパー生成のコストを減少できる.
・SRV,RAPIER,WHISK,WIEN,STALKER,SoftMealy,NoDoSE,DEByE

[半教師付き WI Systems]
・教師付き法とは反対に,ユーザから粗い例を受け取る.
・レコードレベル抽出タスクである.
・学習フェーズでは,抽出対象は指定されない.
・IEPAD,OLERA,Thresher

[教師なしIE]
・ラベル付けされたトレーニングデータを用いない.
・ラッパーを生成するのにユーザインタラクションを必要としない.
・入力ページのデータが豊富にある領域からページやテキストを生成するのに使われるデータとして抽出対象は定義される.
・RoadRunner,EXALG,DeLa,DEPTA


つづく.

2008年10月16日木曜日

WordPressにおけるXML-RPCのサポート

現在とある用件でブログクライアントを作成しています.テストのために,とりあえずRollerというブログソフトウェアを使い始めたのですが,レスポンスが遅い,エラーをよく返す,自前のブログクライアントの投稿が結構失敗するなどが原因(すべて私に問題があるかも知れないのですが,それは問わないことにしています)で,ブログソフトウェアをWordPressに変更しようかなと考えています.

そこで,WordPressのXML-RPCの対応状況を調べてみましたが,以下のAPIに対応しているとのことです.Rollerは,metaWeblog APIだったので,パラメータを変えるだけで済みそうです.Happy!

Blogger API
metaWeblog API
Movable Type API

XML-RPC Support
http://codex.wordpress.org/XML-RPC_Support

2008年8月27日水曜日

Bleu

Bleuとは,機械翻訳の評価尺度の一つです.詳しくは,下記のURLの資料に述べられています(読んでないけど).

[1] Bleu: a Method for Automatic Evaluation of Machine Translation
http://www1.cs.columbia.edu/nlp/sgd/bleu.pdf

2008年7月19日土曜日

Apache Commons HttpClient 3.1で「host parameter is null」

Apache Commons HttpClient 3.1でとあるサイトにアクセスすると,次のメッセージが表示されてエラーとなりました.

host parameter is null

少しググってみると,どうも下記のメソッドにスキーマを省いたURLを記述すると,そうなるとのことでした.

HttpMethod method = new GetMethod(url);

つまり,url=www.google.co.jpだと,上記のエラーが発生し,url=http://www.google.co.jpだと,成功します.

2008年7月8日火曜日

LDAPが起動失敗

LDAPを起動すると次のようなメッセージが表示され,起動に失敗するようになりました.

# /sbin/service ldap start
slapd の設定ファイルをチェック中: bdb_db_open: unclean shutdown detected; attempting recovery.
(中略)
slap_startup failed (test would succeed using the -u switch)
[失敗]
/var/lib/ldap に古いロックファイルがあるかもしれません [警告]


すぐに対処方法を記したページ[1]を見つけたので,メモしておきます.

# /usr/sbin/slapd_db_recover -v -h /var/lib/ldap

[1] More OpenLDAP recovery...
http://techarold.blogspot.com/2006/07/more-openldap-recovery.html

2008年6月18日水曜日

HTMLにおけるtitle要素の位置

title要素は,MIME型と文字コードを指定するmeta要素の後に記述する必要があるとのことです.次のような感じです.知らなかった...

<html>
<head>
<meta meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/>
<title>直前のmeta要素以降に記さないと文字化けする可能性があるんだってさ</title>
</head>
<body>...</body>
</html>


[1] エンジニアのためのWebデザイン教室 第4回 Webデザインの基本を学ぶための環境について
http://itpro.nikkeibp.co.jp/article/COLUMN/20080221/294371/?ST=swd-design

2008年6月15日日曜日

Seasarでjava.lang.UnsupportedOperationException

Seasarを使ったプログラムを作成中に次のようなメッセージのエラーに遭遇してしまいました.

致命的: getInstanceDef
java.lang.UnsupportedOperationException: getInstanceDef


とあるActionクラスにHttpSessionオブジェクトのgetterを設けていたのですが,どうもそれがあると,上記のような症状(Seasarの不具合ではなく,単に自分の知識不足によるものだと思います)に遭遇するようです.当該クラスからgetterを削除すると問題は解消しました.

[1] [Seasar-user:2720] [S2JSF] HttpServletRequest の自動バインディングを行うとエラー
http://ml.seasar.org/archives/seasar-user/2005-October/002719.html

[2] ■[S2JSF]S2JSF1.1での例外発生について2
http://d.hatena.ne.jp/wataka/20060807#1154924242

2008年6月11日水曜日

プロキシ経由でHTTP接続する方法

Squeak上でプロキシを経由してHTTP接続する方法を以下にメモしておきます.

proxyHost := 'hogehoge'.
proxyPort := 8080.
"使用するプロキシサーバと除外するホストの設定"
HTTPSocket useProxyServerNamed: proxyHost port: proxyPort.
HTTPSocket addProxyException: 'hagehage'.

url := 'http://www.google.co.jp'.
HTTPSccket httpGet: url.

"プロキシサーバの解除と除外するホストの消去"
HTTPSocket removeProxyException: 'hagehage'.
HTTPSocket stopUsingProxyServer.


プロキシの設定は,消去しないと残ってしまうみたいなので,それを忘れないように注意すること.

[1] ど素人のためのど素人によるSquek入門
http://squeak.qp.land.to/wiki/

2008年5月29日木曜日

Squeak上でObserverパターンを適用する方法

Squeak上でObserverパターンを適用する方法を以下にメモしておきます.

Observerパターンは,あるオブジェクトの内容に関与するオブジェクトに,その内容の変化に応じて何らかの処理を行わせたいときに使われるデザインパターンです.

Observerパターンでは,Subjectという役割のクラス(あるオブジェクトが所属するクラス)とObserverという役割のクラス(あるオブジェクトの内容に関与するオブジェクトが所属するクラス)が登場します.Squeakでは,それら両方の役割を最上位のクラスであるObjectクラスに与えています.したがって,Objectクラスを継承したクラスは,その時点でどちらの役割も果たせる状態になっています.ただし,Objectクラスのメソッド名は,デザインパターンの資料[1],[2]で紹介されているメソッド名と異なっているので,その対応関係を以下に記しておきます.
  • Subject::attach <-> Object::addDependent:
    SubjectにObserverを追加
  • Subject::detach <-> Object::removeDependent:
    SubjectからObserverを削除
  • Subject::notify <-> Object::changed:
    SubjectがObserverに通知.
  • Observer::update <-> Object::update:
    SubjectがObserverに通知した際に呼び出されるメソッド.中身は空っぽ.
[1] Observer pattern
http://en.wikipedia.org/wiki/Observer_pattern

[2] オブジェクト指向における再利用のためのデザインパターン改訂版
Erick Gamma, Richard Helm, Ralph Johnson, John Vlissides: ソフトバンクパブリッシング, 1999

[3] 7. Squeak演習:Observerパターン
http://www.ogis-ri.co.jp/otc/hiroba/technical/Squeak5/S5-7-1.html
http://www.ogis-ri.co.jp/otc/hiroba/technical/Squeak5/S5-7-2.html

WebアプリケーションをJettyに配備する方法

WebアプリケーションをJettyに配備する方法を以下にメモしておきます.

import org.mortbay.jetty.Server;
import org.mortbay.jetty.webapp.WebAppContext;

public class Test {

    public static void main(String[] args) throws Exception {
        Server server = new Server(8080);

        WebAppContext context = new WebAppContext();
        context.setContextPath("/test");
        context.setResourceBase(".");
        server.setHandler(context);

        server.start();
    }

}


「.」に対応するディレクトリは以下のような構成になっています.

.
+- WEB-INF
   +- classes
   +- web.xml

2008年5月22日木曜日

SqueakMapパッケージローダーのトラブル

ある日,SqueakMapパッケージローダーを起動すると,下記のメッセージが表示されるようになり,パッケージローダーでパッケージをダウンロードできなくなりました.

Reading an instance of SMMaintainableObject.
Which modern class should it translate to.

少しググってみると,どうやらsmディレクトリを複数のイメージで共有した際に生じる問題だということが分かりました.

"Don't make me think"...
http://lists.squeakfoundation.org/pipermail/squeak-dev/2006-April/102705.html

解決方法を以下にメモしておきます.

1. SMSqueakMap bootStrapを実行

2008年5月21日水曜日

JavaScriptでスライドショー

JavaScriptでスライドショーを作成するライブラリを探しています.
今のところ見つけているライブラリは以下の3つです.

1.Slideshow
2.FrogJS
3.JonDesign's Smooth SlideShow

今回必要なのは,ぱちぱちと瞬時に切り替わるものなので,3のライブラリを使おうかなとおもっています.

2008年5月11日日曜日

TeXのインストール

TeXのインストールを自動で行ってくれるツールがあるので,メモしておきます.

TeXインストーラ3
http://www.ms.u-tokyo.ac.jp/~abenori/mycreate/

今まで,各サイトを訪ねて,必要なファイルをダウンロードし,インストールしていたのですが,先のツールを使うと,それらを一発で行うことができます.

2008年4月29日火曜日

RollerのサイトURLの設定方法

RollerのサイトURLを設定する方法を以下にメモしておきます.

1. 「Server Admin Page」を表示する.
2. 「Absolute URL to site (if required)」に設定したサイトのURLを入力する.
3. 「Save」ボタンを選択する.

Rollerを外部で公開しているポートとは違うポートで動かしていた場合,RSSフィードに公開していないほうのポート番号を持つURLが含まれてしまい,RSSリーダに登録できないという症状が生じていました(もちろんRollerの責任ではないです).

上記の設定を施すと,設定したURLがRSSフィードに含まれるようになるので,その症状を解消することができます.

2008年4月22日火曜日

MySQLで実行されたSQL文等のログを取る方法

MySQLで実行されたSQL文等のログを取る方法をメモしておきます.

# vi /etc/my.cnf
----------------
log=/var/log/mysqld-query.log
----------------
# touch /var/log/mysqld-query.log
# chown mysql.mysql /var/log/mysqld-query.log
# chmod 640 /var/log/mysqld-query.log
# /sbin/service mysqld restart


MySQLの小技
http://tomo.ac/goodstream/database/mysql/linux/tips.htm

2008年4月17日木曜日

XPathでXML文書の要素にアクセスする方法

XPathでXML文書の要素にアクセスする方法をメモしておきます.


document := XMLDOMParser parseDocumentFrom: xml stream.
xpath := XPath for: path.
nodeList := xpath in: document.


[/]の位置がSqueakとJavaでは違うようです.
Squeakだと,「/」は「/eivs/」を指し,Javaだと「/」は「/」を指します.
どちらが,XPathの仕様に準拠しているのかはわかりませんが,このおかげでちょっとはまりました.


<?xml version="1.0" encoding="UTF-8"?>
<eivs>
<robot name="eisl01" type="FieldServerRobot">
</robot>
</eivs>

2008年4月3日木曜日

wgetで名前を指定してファイルをダウンロードする方法

wgetで名前を指定してファイルをダウンロードする方法をメモしておきます.

wget http://XXX/YYY.html -O YYY.html

wgetでファイルをダウンロードするとき,URLが長すぎるとエラーになるのですが,上記のオプションで保存先のファイル名を指定すると,それを避けることができます.

2008年4月1日火曜日

ブログマイニングに関する論文

ブログマイニングに関する以下の論文についてメモしておきます(論文にはない個人的な意見も含んでいます).

長谷川 真吾, 藤村 考: ブログマイニングによるマーケットシェア推定―ブログと既存統計指標の関係の分析―, 情報処理学会研究報告, Vol. 2007 No. 56, pp. 37-42, 2007


・背景
 ・ブログマイニングに期待が集まっている
・生活水準の向上 or 余暇時間の増大
→ 人々の価値観の多様化
→ 多様な分野で消費者動向を分析するニーズが高まっている
・マーケットシェアを示す既存の統計指標(視聴率)は一部の分野に限定
・ブログマイニング
・消費者一人ひとりのマーケティング情報抽出が可能
・ブログマイニングをマーケティングに生かそうというサービス
・kizasi.jp(http://kizasi.jp/)
  ・BuzzPulse(http://www.nifty.com/buzz/)
  ・Dentsu Buzz Research(http://www.dentsu.co.jp/business/teritory02/solution/Buzz/)
・新たなブログ検索機能
・Yahoo!ブログ検索(http://blog-search.yahoo.co.jp/)
・goo-ブログ(http://blog.goo.ne.jp/)
・先行研究
・ブロガーの感情と映画の興行収益との関係の研究
・ブログの言及数とAmazonにおける本の売り上げとの関係の研究
・問題
・言及数と既存の統計指標との関係性に関する報告は少ない.
・目的
・ブログマイニングにより抽出される様々な統計データを分析し,マーケットシェア推定に有用な指標を明らかにすること
・内容
・ブログマイニングにより抽出されたテレビ番組情報の統計データとテレビ視聴率との関連性を分析する
・東京都知事選や音楽CD売上のマーケットシェアデータに関しても相関関係を分析する
・ブログマイニングによるマーケットシェア推定がどの分野において有用化を調査する

2008年3月29日土曜日

HttpUnitの実行に必要なライブラリ

HttpUnitの実行に必要なライブラリを以下にメモしておきます.

httpunit.jar
nekohtml.jar(Tidy.jarでもいいみたい)
xercesImpl.jar
xmlParserAPIs.jar
js.jar(JavaScriptが含まれていなければ必要がないみたいだけど,コンソールにメッセージが出るので含めました)

2008年3月24日月曜日

JettyをWebサーバとして実行する方法

JettyをWebサーバとして実行する方法を以下にメモしておきます.


public class WebServer {

static int PORT = 8080;

static String DOCUMENTROOT = "./WebContent";

public static void main(String[] args) throws Exception {
Server server = new Server(PORT);

ResourceHandler resourceHandler = new ResourceHandler();
resourceHandler.setResourceBase(DOCUMENTROOT);

HandlerList handlerList = new HandlerList();
handlerList.setHandlers(new Handler[] {resourceHandler,
new DefaultHandler()});
server.setHandler(handlerList);

server.start();
}

}

2008年3月23日日曜日

MetaWeblog APIを使ってRollerに記事を投稿する方法

MetaWeblog APIを使ってRollerに記事を投稿する方法を以下にメモしておきます.


Hashtable<Object, Object> entry = new Hashtable<Object, Object>();
entry.put("title", title);
entry.put("description", content);

Vector<Object> parameterList = new Vector<Object>();
parameterList.add(this.blogId);
parameterList.add(this.username);
parameterList.add(this.password);
parameterList.add(entry);
parameterList.add(true);

String endpoint = this.url + this.endpoint;
XmlRpcClient client = new XmlRpcClient(endpoint);
Object result = client.execute("metaWeblog.newPost", parameterList);

2008年3月15日土曜日

四則演算に登場する数の名前

四則演算に登場する数の名前を以下にメモしておきます.

addition: augend + addend = sum
subtraction: minuend - subtrahend = difference
multiplication: multiplicand * multiplier = product
division: dividend / divisor = quotient (... remainder)

可視化ツール

可視化ツールについて報告しているページをメモしておきます.

The Best Tools for Visualization
http://www.readwriteweb.com/archives/the_best_tools_for_visualization.php

2008年3月14日金曜日

Subversionにてリポジトリ内のディレクトリを移動する方法

リポジトリ内のディレクトリを移動する方法を以下にメモしておきます.

svn move -m "コメント" 移動元のディレクトリのURL 移動先のディレクトリのURL

Subversionでは,リポジトリ同士間あるいは作業コピー同士間での移動はできますが,リポジトリと作業コピー間での移動はできないようです.

情報抽出に関する論文

情報抽出に関する以下の論文についてメモしておきます(論文にはない個人的な意見も含んでいます).

張建偉, 石川佳治, 北川博之: トピックを考慮した大規模文書情報源からのレコード抽出, 情報処理学会論文誌:データベース, Vol. 48 No. SIG14 TOD35, 2007

・背景
・情報抽出の研究が重要視されている.
・様々な情報発信手段の発達→電子化されたテキスト文書が急激に増加
・テキスト文書には有用な情報が含まれているが,構造化されていないので,計算機では容易に取り扱えない
・情報抽出
・テキスト文書から有用な情報を自動的に,あるいは,半自動的に抽出する
・ブートストラッピング型が注目を浴びている
・ブートストラッピング型
・抽出パターンと抽出レコードを交互に繰り返し学習することにより,
少数のサンプルレコードから大量のレコードを抽出する手法
・従来のブートストラッピング型手法の着目点
・大量のレコードの獲得
・レコードのノイズの削減
・レコード
・一つないし複数の属性からなるデータで,各属性には同種のデータが含
まれるもの
・問題
・文書が大量にある場合,多大な処理コストがかかる.
・文書に対してタグ付けなどの前処理を行う.
・文書をスキャンする.
・単なるパターンマッチングで抽出されたレコードは,
必ずしもユーザが興味のあるトピックと合致しない
・目的
・構造化されたレコード構造の情報を抽出する
・抽出されたレコードの集合は一種のデータベースと考えられ,既存のデー
  タベースとの統合など,様々な形で応用することが可能となる.
・提案
・ユーザの意図にあった情報を効率よく抽出するためのレコード抽出法
・少ない処理コストで早くレコードを獲得する
・ユーザがほしいレコードを獲得する
・ユーザの意図に適合した情報を含んでいる可能性の高い文書群を特定し,
選択された文書を優先的にレコード抽出の対象とする.
・レコードにノイズが含まれているかどうかだけでなく,
ユーザの意図に合致するかどうかも考慮する.
・情報抽出研究の分類
・構造に基づくウェブ抽出手法
単一のページから,あるいは構造が類似するページから情報を抽出する
・ブートストラッピング型
・トピック主導型
 ・あらかじめ欲しいトピックを与えて,そのトピックに合致するページを
重点的に収集する.

2008年3月13日木曜日

JUnitによる例外のテスト

例外がスローされることをチェックしたい場合,Assertクラスのfailメソッドを使うそうです.

public void testXXXX() {
try {
// 例外 XXXXException をスローするコードを書く
Assert.fail("例外がスローされないときに表示するメッセージ");
}
catch(XXXXException expected) {
Assert.assertTrue(true);
}
}


Tips02 例外が正しく投げられることをテストする――例外のテスト手法の基本形――
http://www.itarchitect.jp/technology_and_programming/-/34141-2.html

Squeak本

オンラインかつ無料で見れるSqueak本が「The Weekly Squeak」で紹介されていました.

その本のURLは以下のとおりです.
http://www.squeakbyexample.org/

Squeak by Example, 2.0!
http://news.squeak.org/2008/03/12/squeak-by-example-20/

2008年3月10日月曜日

部分文字列の取得

Squeakで部分文字列を取得する方法をメモしておきます.

[Java]
String string = "tr[3]";
string.substring(0, 2); // -> "tr"

[Squeak]
string := 'tr[3]'.
string copyFrom: 1 to: 2.

更新クローラに関する論文

以下の論文に関してメモしておきます(論文に記述されていない個人的な意見も含んでいます).

田村 孝之, 喜連川 優: 大規模Webアーカイブのための更新クローラの設計と実装, 日本データベース学会 Letters, Vol. 6, No. 1, pp. 173-176, 2007

・クローラの分類
・一括クローラ(batch crawler)
・更新クローラ(incremental crawler)
・クローラの目的
・Webの大域的構造と時間変化の分析を主眼とするWebアーカイブの
収集
・社会知の抽出に使用
・クローラの要件
・網羅性と時間分解能を両立することが求められる
・更新クローラが不可欠<-網羅性も高まる<-時間分解能が高まる
・問題
・網羅性より再現性が重視されている.
・網羅性や時間分解能を向上させる試みもあるが,誤判定の問題が生
じている.
・スケジューリングする際に,アクセス先の状態が考慮に入れられて
いない.
・スケジューリングができても,リソースの状態により,そのとおり
にいかないケースがある.
・リソースは,クローラを動作させているマシンやネットワークだけ
でない.
・アクセス先のサーバの負荷等も影響する
・先行研究
・既出のWebアーカイブプロジェクト
・網羅性より,再現性(スクリプトやプラグインの動作)を重視し
ている
・網羅的に収集しているプロジェクトもある
・コンテンツの入手を外部に依存しているため,時間分解能に問題
・先行研究1
・WebサイトやWebページ群を単位として更新の有無を推定
・誤収集,収集漏れ
・提案
・上記の問題を解決するために,アクセス先のWebサーバの負荷状態
を考慮しながら,Webページの更新頻度に基づくアクセス
スケジュールリングを行う方式

ループとループの中断

ループとループの中断の方法をメモしておきます.

Java:

List nameList = new ArrayList();
nameList.add("html");
nameList.add("body");
nameList.add("table");
nameList.add("tr");
nameList.add("td");

Iterator iterator = nameList.iterator();
while(iterator.hasNext()) {
String name = iterator.next();
System.out.println(name);
if(name.equals("table")) {
break;
}
}

Squeak:

nameList := OrderedCollection new.
nameList add: 'html'.
nameList add: 'body'.
nameList add: 'table'.
nameList add: 'tr'.
nameList add: 'td'.

nameList do: [:name |
Transcript cr; show: name.
name = 'table' ifTrue: [^ nil].
].

2008年3月9日日曜日

デリミターによる文字列の分割

デリミターにより文字列を分割する方法をメモしておきます.

Java:

String path = "/html/body/table/tr[position()=1]";
String[] name = path.spilit("/");

Squeak:

path := '/home/body/table/tr[position()=1]'.
nameList := path findTokens: '/'.

授業撮影のためのカメラの自動制御

授業撮影のためのカメラの自動制御についての論文を読みました.その論文についてメモしておきます(論文には書いていない個人的な意見も含んでいます).

Qiong Liu, Yong Rui, Anoop Gupta and JJ Cadiz: Automating Camera Management for Lecture Room Environments, Technical Report of Microsoft, 2000.

・提案
・撮影スタッフのノウハウが反映されたルールに従ってカメラを制御することで,遠隔地の受講者に対して人が撮影するのと同品質の映像を配信する方式
・遠隔授業の種類: live(同期型), on-demand(非同期型)
・急速な技術革新,生涯学習の高まり -> 大学,企業において講義をする機会が増加 ->
時間的および空間的に講義がバッティング -> 必要な講義が受けられない ->
同期・非同期の遠隔講義で解決
・遠隔講義を実施する上での問題
・設備にかかるコスト
  単発的,低価格化が進行
・人材にかかるコスト
継続的,撮影スタッフともなると,ノウハウを会得するのに時間を要する.
これをカットできれば,遠隔講義を大規模に実施できる
・先行研究との相違点
・被写体を追跡する技術
先行研究:カメラ1台
本研究:カメラ複数台
・授業撮影のためのカメラ自動制御
先行研究1:非同期型授業が対象,講師に特別な機材を装着する,
映像の編集ルールがスライドの切り替えに基づいている
本研究1:同期・非同期の両方が対象,講師は何も装着しない,
映像の編集ルールがプロの撮影スタッフのノウハウに基づいている
先行研究2:受講生を撮影するカメラがない,ビデオ解像度が変化する,
user studyの報告がない
・プロのルール
・ライン(line of interest)を交差しない
 ・話者の視線の先あるいは頭の向いているほうに空間を多くもうける
・話者を追跡しているカメラはあまり動かさない
・話者の頭の上に話者の頭の半分程度の空間をもうけるように話者を撮影する
・最初は全体の映像を撮影する.遠隔の受講者は,環境全体の雰囲気を味わうことができる
・ジャンプカット(同じ場所を微妙に動かして撮影する場合は切れ目なくそうするということか?)をしない.
・暗すぎるカメラの映像を使わない.意味を取り違えているかもしれないので,原文を(Don't cut to a camera that is too dark.)
 ・最低ほげほげ時間以上は同じところを撮影する.
・最高ほげほげ時間以上同じところを撮影しない.見ている人が飽きてしまうから.
・すべてのカメラの調子が悪い場合にバックアップカメラを用意しておく.
・質問している受講者は,即座に撮影する.
 ・質問している状態になくても,教室にいる受講生の様子を定期的に撮影する.

2008年3月7日金曜日

javadocの文字コードに関するオプション

javadocの文字コードに関するオプションをメモしておきます.

-locale ja ナビゲーションバーなどのメッセージの言語を指定
-charset UTF-8 HTMLファイルのヘッダで文字コードを指定
-encoding UTF-8 ソースファイルの文字コード
-docencoding UTF-8 HTMLファイルの文字コード

Javadocで日本語APIリファレンスを作る
http://endeavour.cocolog-nifty.com/developer_room/2008/01/javadocapi_0b61.html

2008年2月27日水曜日

SELinuxの無効化

SELinuxを無効化する方法は以下のとおりです.

# setenforce 0
# vi /etc/sysconfig/selinux
----------
SELINUX=disabled
----------

Fedora 8初期設定 - Fedoraで自宅サーバー構築
http://fedorasrv.com/fedora8-init.shtml

mysqlが使用するポート番号を変更する方法

mysqlが使用するポート番号を変更する方法は以下のとおりです.

vi /etc/my.cnf
----------
[client]
port=ポート番号

[mysqld]
port=ポート番号
----------

yumでパッケージを自動更新する方法

yumでパッケージを自動更新する方法

# /sbin/service yum-updatesd stop
# yum -y remove yum-updatesd
# yum -y install yum-fastestmirror
# yum -y update
# yum -y install yum-cron
# /sbin/chkconfig yum-cron on
# /sbin/service yum-cron start

Fedora 8初期設定 - Fedoraで自宅サーバー構築
http://fedorasrv.com/fedora8-init.shtml

yumでプロキシを利用する場合の設定

yumでプロキシを利用する場合の設定

# vi /etc/yum.conf
----------
proxy=プロキシのURL
proxy_username=ユーザ名
proxy_password=パスワード
----------

Q:プロキシを設定するには?:ITpro
http://itpro.nikkeibp.co.jp/article/COLUMN/20070227/263383/

2008年2月21日木曜日

PHPからリモートMySQLサーバへの接続時にエラー

リモートのMySQLサーバにアクセスするPHPのスクリプトを動作した際に,次のエラーに遭遇しました.

Can't connect to MySQL server on '192.168.2.3' (13)

MySQLクライアントでリモートにアクセスすると接続できるのに,PHPのスクリプトからはできないのです.

具体的には,192.168.2.6のマシンから

mysql --user=hogehoge --password=hogehoge --host=192.168.2.3 --port=3306 hogehoge

というコマンドを入力すると, MySQLサーバとの接続に成功し,SQL文も実行できるのですが,

<?php mysql_connect("192.168.2.3:3306", "hogehoge", "hogehoge"); ?>

というPHPスクリプトを192.168.2.6のマシンで動作させると,上記のエラーメッセージが表示されます.

いろいろ試行錯誤をした結果,クライアント側(192.168.2.6)のSELinuxを解除することで接続することができるようになりました.SELinux全体を解除しなくてもいいと思うのですが,SELinuxについてはまったくの素人なので,解除で済ませました.

2008年1月27日日曜日

授業分析の方法

授業分析の方法をいくつか見つけたので,以下にメモしておきます.

Flanders法
Flanders, N. A : Analyzing Theaching Behavior, Addison-Wesley, 1972.
授業中の発話を以下の10のカテゴリに分類して,分析を進めるみたい.
1. 感情を受け入れること
2. ほめたり勇気づけたりする
3. アイディアを受け入れたり利用すること
4. 発問すること
5. 講義すること
6. 指示すること
7. 批判したり正当化したりすること
8. 生徒の発言-応答
9. 生徒の発言-自発性
10. 沈黙あるいは混乱

西之園法
授業中の発話を以下の20のカテゴリに分類して,分析を進めるみたい.
西之園晴夫: 4章 授業の流れ-授業過程, 授業をつくる, 授業技術講座1, ぎょうせい, pp.112-158, 1988
1.学習課題の提示
2.情報の提示
3.実験実習による
4.観察による
5.発問
6.発問の繰り返し
7.問い返し
8.行動の指示
9.作業の指示
10.助言
11.説明
12.励まし
13.沈黙
14.指名
15.指名の切り替え
16.わりこみ
17.賛否の問い
18.体験の有無の問い
19.マネージメント
20.間巡視

http://www11.ocn.ne.jp/~kanasaki/mypage4-1.htm

オンラインシソーラス

現時点で把握しているオンライン上のシソーラスを以下にメモしておきます.

言語工学研究所シソーラス(類語)検索
http://www.gengokk.co.jp/thesaurus/

JST(JICST)科学技術シソーラス1999年版
http://jois.jst.go.jp/JOIS/html/thesaurus_index.htm

Express Finder シソーラス辞書
http://wms2000.ntt-at.co.jp/thesaurus.exe

Digital Library シソーラス辞書検索
http://digilib.silkroad.net/modules/thesaurus/

2008年1月26日土曜日

遠隔授業の素性

遠隔授業(遠隔講義)の素性として,現時点で把握しているものを以下にメモしておきます.等号の左側が素性名で,右側が素性値です.

? = 同期型(リアルタイム型,ライブ型)or 非同期型(オンデマンド型)
? = 双方向 or 一方向(単方向)
拠点数 = 2地点 or 多地点(3地点以上)

2008年1月22日火曜日

多人数インタラクションに関する情報源

多人数インタラクションに関する情報源を以下に記します.

坊農 真弓, 高梨 克也: 多人数インタラクション研究には何が必要か?―インタラクション研究の国内外の動向と現状, 人工知能学会誌, Vol. 22, No. 5, pp. 703-710, 2007

AMI corpus
http://corpus.amiproject.org/

CHIL
http://chil.server.de/servlet/is/101/

インタラクションコーパス


IMADEプロジェクト
http://www.ii.ist.i.kyoto-u.ac.jp/IMADE/

2008年1月19日土曜日

Webラッパーに関する情報源

Webラッパーに関する情報源をメモしておきます.

特集「WWW上の情報の知的アクセスのためのテキスト処理」
人工知能学会誌 Vol.19, No.3, pp.295-323 (2004)

Web内容マイニング
http://www.ai-gakkai.or.jp/jsai/journal/mybookmark/22-2.html

2番目のサイトでフリーのWebラッパー生成ツールが紹介されていますが,現時点での入手状況は以下のとおりでした.

W4F
(ざっとさがしてみた結果)入手不可.ただし,論文は下記のURLに発見.
http://db.cis.upenn.edu/DL/www8.pdf

XWRAP
下記のURLから入手可能(みたい).
http://www.cc.gatech.edu/projects/disl/XWRAPElite/

2008年1月12日土曜日

ログ

commons logging + log4jでログを出力するコードを書きました.簡単な手順を以下に記しておきます.

1. commons loggingとlog4jのライブラリを入手し,classpathの通ったフォルダに配置する.
2. classpathに通ったフォルダにlog4jの設定ファイルを配置する.
3. ログを出力したいクラスにLogクラスのインスタンスを持たせる.
private Log log = LogFactory.getLog(Shinobi.class);
4. ログを出力したい位置でLogクラスの該当するメソッドを呼び出す.
if(this.log.isInfoEnabled()) {
this.log.info(this.targetUrl);
}

ログについては思いのほか簡単に実装できたのですが,ログファイルの場所の設定がうまくいきませんでした.具体的には,下記のように記すと,
<param name="file" value="shinobi.log"/>
Tomcatのルートディレクトリに出力されてしまいます.絶対パスで決め打ちすることもできるのですが,そうなると異なる環境では動作できなくなります.一応,解決方法を見つけはしたのですが,なんかすっきりしないので,とりあえず放置しておきます.

以下に参考にしたページを記しておきます.
http://www.atmarkit.co.jp/fjava/rensai2/jakarta09/jakarta09.html
http://www.atmarkit.co.jp/fjava/rensai4/programer10/programer10_1.html

2008年1月9日水曜日

ルートURL

パスがルートのURLをルートURL(root URL)と呼ぶらしい.「"root URL"」でググると,結構な件数がヒットするので,たぶんこのフレーズは使ってもよさそう.具体例は,以下のとおり.

http://www.google.com/

「/」で終わるのではなく,パスが「/」だけのURL.

RFCのURLページに定義がのっているかと思ったので,検索してみたのだが,見つからなかった.

URLのRFC
http://www.ietf.org/rfc/rfc1738.txt

URLの正規化

重複コンテンツへの対処方法の一つにURLの正規化がある.

URLの正規化とは,複数存在する重複コンテンツのURLをそのうちの一つに置き換えることである.この処理により,重複コンテンツを何度も訪問することを防ぐことができる.

ある重複コンテンツが次の二つのURLを持ち,かつ,最初の方を代表URL(そのうちの一つに該当するURL)とすると,

http://hogehoge/
http://boribori/

URLの正規化とは,次のようにURLを置き換えることである.

http://hogehoge/ -> http://hogehoge/
http://boribori/ -> http://hogehoge/

重複コンテンツ
http://www.semilog.jp/6/20061120212701.html