CentOSにMoinMoinを導入
1.yum install moin
/usr/share/moinが作成される
2.以下のコマンドを実行
mkdir -p /var/www/mywiki cp -a /usr/share/moin/{data,underlay} /var/www/mywiki cp -a /usr/share/moin/server/moin.cgi /var/www/mywiki cp -a /usr/share/moin/config/wikiconfig.py /var/www/mywiki/cgi-bin chown -R apache:apache /var/www/mywiki/{data,underlay}
3.設定ファイルの作成(/etc/httpd/conf.d/mywiki.conf)
ScriptAlias /mywiki "/var/www/mywiki/cgi-bin/moin.cgi"Options Indexes FollowSymLinks ExecCGI AllowOverride None Order allow,deny Allow from all Alias /wiki/ "/usr/share/moin/htdocs/"Options Indexes FollowSymLinks AllowOverride None Order allow,deny Allow from all
4.httpdを起動
5.http://localhost/mywiki/にアクセス
CentOSにvsftpdを導入するときのつまりどころ
CentOS5.4にFTPサーバのvsftpdを導入した。
導入にあたり2点つまった所があったので、それについて書く。
Scalaのvim用の設定
はじめに
Windows用のvimにて、Scalaプログラムの編集時に、シンタックスハイライト、インデントルールを適用するための設定を行った。また、エラーの修正の効率を上げるために、QuickFixコマンドを利用可能にするための設定も行った。細部は異なるが、Linuxなどのvimでも利用できるはず。
記事中で設定ファイルを3つダウンロードし、2つのファイルを記述するけど、面倒くさいので、必要なファイルを用意しておく。
シンタックスハイライトやインデントルールの設定
Scalaのプロジェクトの公式のvim用設定があるのでそれを利用する。
まず、公式vim用設定ファイルのページにアクセスする。このページには、3つのサブディレクトリ「ftdetect」、「indent」、「syntax」があるので、それぞれの配下にある「scala.vim」をダウンロードする。名前が同じで、それぞれの名前を「scala-ftd.vim」「scala-ind.vim」「scala-syn.vim」としておく。
次に、ダウンロードしたvim用の設定ファイルを配置するためのフォルダ「$HOME/vimfiles/ftdetect」「 $HOME/vimfiles/indent」「$HOME/vimfiles/syntax」を作成する($HOMEはホームフォルダを意味する)。そして、3つのvim用の設定ファイル「scala-ftd.vim」「scala-ind.vim」「scala-syn.vim」を対応するフォルダに「scala.vim」というファイル名で保存する。
Scalaプログラムの編集時に独自設定を利用する
上記のシンタックスハイライトやインデントルールの設定を行った後に、「$HOME/vimfiles/ftplugin」を作成する。そして、そのフォルダにScala用の独自設定を「scala.vim」というファイル名で保存する。
Scalaプログラムのエラー修正の効率向上(QuickFixコマンドを利用できるようにする)
Vimには編集-コンパイル-編集のサイクルを加速するための特別なQuickFixコマンド(たとえば、cw、clなど)がある。これを利用すると、編集中のプログラムのコンパイル、エラー箇所の修正が容易になる。QuickFixコマンドは、CやJavaといった有名言語なら最初から利用可能である。しかし、Scalaに対してQuickfixは利用できない。以下、Scalaプログラムの編集中にQuickfixコマンドを利用するための手順を述べる。
まず、Scalaのコンパイラ用の設定ファイル「scalac.vim」を作成する。下にファイル内容を示す。「scalac.vim」を「vimのインストールフォルダ/runtime/compiler」に保存する。これで、Scalaプログラムの編集時でもQuickFixコマンドが使用可能になる。なお、作成にあたり、ほぼJavaのコンパイラの設定ファイル「javac.vim」を流用した。
scalac.vim
if exists("current_compiler") finish endif let current_compiler = "scalac" if exists(":CompilerSet") != 2 " older Vim always used :setlocal command -nargs=* CompilerSet setlocal <args> endif CompilerSet makeprg=scalac CompilerSet errorformat=%f:%l:\ error:\ %m,%-Z%p^,%-C%.%#,%-G%.%#
適当なエラーが含まれるScalaプログラムを開き、以下の手順でコマンドを実行する。すると、コンパイル時のエラーが表示される。エラー表示ウィンドウに移動し、「Enter」を押すと、実際にエラーがある行にジャンプできる(便利!)。
:compiler scalac :make 編集中のScalaプログラムの名前 :cw
Scalaプログラムのコンパイルと実行の簡略化
vimを開くたびに、「:compiler scalac」を実行するのは面倒くさい。また、makeコマンドを実行するのも面倒くさい。なので、Scalaプログラムを開いたときに、自動で「:compiler scalac」を実行し、ワンタッチでmakeコマンドの実行をできるようにする。そのために、「$HOME/vimfiles/ftplugin」に下の設定ファイルを「scala.vim」として保存する。
Scala専用の設定
compiler scalac "コンパイル map <F5> <ESC>:w<CR>:cd %:h<CR>:make -sourcepath . %:p<CR>:cd -<CR> map! <F5> <ESC>:w<CR>:cd %:h<CR>:make -sourcepath . %:p<CR>:cd -<CR> "実行 map <F6> <ESC>:w<CR>:cd %:h<CR>:!scala %:r<CR>:cd -<CR> map! <F6> <ESC>:w<CR>:cd %:h<CR>:!scala %:r<CR>:cd -<CR> "コンパイル+実行 map <F7> <ESC>:w<CR>:cd %:h<CR>:make -sourcepath . %:p<CR>:!scala %:r<CR>:cd -<CR> map! <F7> <ESC>:w<CR>:cd %:h<CR>:make -sourcepath . %:p<CR>:!scala %:r<CR>:cd -<CR>
MS-DOSからjavacとjavaの同時実行する
Scalaの導入時にはまったところ
暇なので、最近話題(?)のプログラミング言語Scalaを使ってみることにした。
そのために、ITProで行われているScala講座の第一回なぜ Scalaなのか?を見ながら、Scalaをインストールし、Scalaプログラム「HelloWorld.scala」を実行させた。
このとき、「scala HelloWorld」を実行しても「no such file: HelloWorld」というエラーが表示されるだけだった。
この原因は、scalaコマンドを実行するときに、カレントディレクトリのクラスファイルをサーチしていないことだと分かった。
これに対する解決方法は2つあった。
1、scalaコマンドの実行時にオプションでクラスパスを指定する。例えば、「scala -classpath . HelloWorld」
2、環境変数classpathにカレントディレクトリを表す「.」を追加
scalaコマンドを実行する度に、オプション指定するのは面倒なので、classpathにカレントディレクトリを指定することにした。これにより、「scala HelloWorld」によりHelloWorld.scalaが実行できるようになった。めでたしめでたし。
Chrome Extentionの作成メモ
現在閲覧中のページに自分のExtentionのContentScriptが埋め込まれているか埋め込まれていないかで、BackgroudnPageでの処理を変える方法についてのメモ。
それには、javascriptの組み込み関数setTimeoutを利用する。そして、BackgroundPageからContentScriptにメッセージを送り、一定時間内に返信が来るかどうかで処理を分けるようにする。
実際には、こんな方法でなくてもAPIとして用意されてそうなので、しっかり調べる。
記述例
ContentScriptsの記述
chrome.extension.onRequest.addListener(function(req, sender, sendResponse) { /* 具体的な処理 ... */ //BackgroundPageへ返信 sendResponse(str); });
BackgroundPageの記述
var timerId; //閲覧中のページにコンテンツスクリプトを埋め込めなかった場合の処理 var f = function(...) { /* 具体的な処理 ... */ } chrome.tabs.getSelected(null, function(tab) { //閲覧中のページから、一定時間(50ミリ秒)返信が来なかったら実行 timerId = setTimeout(f, 50); //BackgroundPageから閲覧中のページのContentScriptsに対してリクエストを送る chrome.tabs.sendRequest(tab.id, req, function(text) { //以下の処理は、一定時間内に返信が来た場合に実行 //つまり、閲覧中のページにContentScriptsが存在する //最初に、閲覧中のページにコンテンツスクリプトを埋め込めなかった場合の処理をキャンセル clearTimeout(timerId); /* 具体的な処理 ... */ }) }); }