2010年5月26日水曜日

Virtual PC の画面からマウスを取り返す

VirtualPCに拡張コンポーネントが入っていないと、マウスがVirtualPCのウインドウから出せなくなる。
マウスをVirtualPCから抜ける方法。

Windows 7 = Alt + Ctr + カーソル右
Windows 7 以前 = 右Alt

2010年5月24日月曜日

TracLightning のインストール

・ダウンロードしたファイルをインストールする。「次へ」か「インストール」を何も考えずに、クリックするだけでよい。インストール終了後、再起動が必要。
・Trac のサービス化。スタート => すべてのプログラム => Trac => サービスのインストール をクリック。
・プロジェクトの作成。スタート => すべてのプログラム => Trac => コマンドプロンプト をクリック。次のコマンドを入力する。

C:\TracLight\bin>create-project hogehoge

・ユーザーの追加
http://localhost/trac/hogehoge/ にアクセスする。ID=admin、パスワード=admin でログインする。


動作確認 WindowsXP TracLightning-2.5.0.exe

TracLightning のバックアップ

付属のツールを使い、バックアップを行う。
スタート => Trac => バックアップ をクリックする。
C:\TracLight\backup.bat を実行するのと同じ。

全てのプロジェクトがバックアップされる。ファイルは C:\TracLight\backup に作成される。
復元する際は、C:\TracLight\Projects を空にして張り付ければよい。

バッチファイルでフォルダの存在を調べて条件分岐を行う。

バッチファイルを実行したときにフォルダの存在を調べて、存在確認の成否によって処理を分けます。

「Trac」のサーバを動かしていて、ネットワーク接続のPCにタスクでバックアップを行っていました。バックアップ先PCがたまに起動していないことがあるので、起動しているときはそのままバックアップ。起動していない時はローカルにバックアップするようにするため、このバッチファイルを考えました。

=====ここからサンプルコマンド=====

SET TargetDirectory=\\TargetPC\share

IF EXIST %TargetDirectory% (
:: %TargetDirectory%が存在した場合のコマンド。
) ELSE (
:: %TargetDirectory%が存在しない場合のコマンド。
)

=====ここまでサンプルコマンド=====

ネットワークで接続されている「TargetPC」の「Share」フォルダの存在を判断します。

DOSコマンドで年月日の文字列を作成する。

下記のコマンドをバッチファイルで実行すると、実行したときの年月日_時分が表示される。時間は24時間制、ゼロ埋めされる。
EX. 20100524_1014

@ECHO OFF
SET time2=%time: =0%
SET MyTimestamp=%date:~-10,4%%date:~-5,2%%date:~-2,2%_%time2:~0,2%%time2:~3,2%

ECHO %MyTimestamp%
PAUSE

2010年5月21日金曜日

バッチファイルで次の行に進まない

バッチファイルの中でバッチファイルを起動した場合、次の行に進まなくなった。

EX.
--Sample.bat--

MyFunction.bat

--Sample.bat--

MyFunction.bat 以降の処理が実行されなかった。
CALL MyFunction.bat に書き直す。

Linux でファイルの中身を検索する サンプル

find、grep コマンドを使う。

$ find /var/www/html/ -iname '*.php' | xargs grep -i 'delete' > grep_result_delete

・/var/www/html/ ディレクトリの中から
・拡張子が php のファイルを大文字小文字区別せずに探し出し
・大文字小文字の区別をせずに delete という文字列が含まれるファイルを探し出し
・結果は grep_result_delete に出力する

2010年5月20日木曜日

Lhaplus を使いDOSコマンドから圧縮する。

Windows のコマンドラインからファイルを圧縮する方法のメモ。
フリーソフトの Lhaplus を使う。

>"C:\Program Files\Lhaplus\Lhaplus.exe" /c:zip /o:C:\ "C:\Documents and Settings\user\デスクトップ\test"

/:c 圧縮形式の指定
/:o 出力先の指定

上のコマンドを実行すると、
"C:\Documents and Settings\user\デスクトップ\test" 配下のファイルを、
zip 形式で圧縮し、C:\test.zip で出力される。

動作確認 WindowsXP Lhaplus 1.57

Windows 7 のキーボードを英語キーボードに変える

USB 日本語キーボードを使っていたが、USB 英語キーボードに差し替えた。差し替えただけでは、キーボードの配列が更新されない。日本語のキー配列のままになっている。解決策は以下の通り。

1)レジストリエディタを起動
2)[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\i8042prt\Parameters]とたどる
3)[LayerDriver JPN] の値を [kbd106.dll] から [kbd101.dll] に変更
4)[OverrideKeyboardIdentifier] の値を [PCAT_106KEY] から [PCAT_101KEY] に変更
5)[OverrideKeyboardSubtype] の値を [2] から [0] に変更
6)レジストリエディタを終了して再起動

参考
へーいち の うぇぶろぐ
http://blog.heiichi.com/?eid=792239

検索用キーワード
101 104 106 109

2011/11/02 追記
WindowsXPでもレジストリは同じ。

2010年5月18日火曜日

配列の要素数を調べる

count($test);

Linux ディスク容量を調べる

ディスク全体の容量を調べるコマンド。

$ df --human

特定のディレクトリの容量を調べるコマンド。

$ du /var/lib/pgsql/data/base/ -s --human

上は、ポスグレのファイル使用量を調べる例。
--human オプションは、人が読んで分かりやすいように単位をつけてくれる。
du -s は -s オプションをつけないと、合計値が表示されない。

2010年5月17日月曜日

UTF-8 と BOM

ファイルを保存する場合、BOM 有/無 のどちらがよいのか。
BOM とは Byte Order Mark の略。Unicode でエンコーディングしていることを示すために、ファイルの先頭に 0xEF 0xBB 0xBF を付ける。

■ BOM 無の利点
BOM がゴミとして扱われ、不具合が起こる場合がある。
EX.
Unix シェルの #!bin/sh が読み込めない。

■ BOM 有の利点
エンコーディングの識別が容易。
EX.
・日本語が入っていないファイルを UTF-8 BOM 無で保存した。
・Windows のソフトで更新したところ、日本語が無いので文字コードの判別不能 SJIS として保存された。
・UTF-8 のつもりで操作したところ、不具合発生。
 …という問題を防げる。

■ UTF-8N の表記について
UTF-8 => BOM 有
UTF-8N => BOM 無
という使い方は、日本のローカルルールとのこと。世界ではどうやって区別しているかは不明。

■ 結局どちらがよいのか
時と場合による。

■ 参考
http://bearmini.net/blog/View.aspx?bid=1&aid=144

2010年5月14日金曜日

Gnome の解像度を変える in Virtualbox.Windows

Windows マシンがホストで、VirtualBox に CentOS をインストールすると、Gnome の解像度が 800x600 になった。
狭くて不便なので、少し大きくする。

CentOSの
システム > 管理 > ディスプレイ > ハードウェア > モニタータイプ
と、たどり少し大きめのモニターを選ぶ。
モニタ設定のタブで、解像度を変更する。

自分の環境では、解像度が 1152x864 以上に上がらない。
Windows、VirtualBox もしくは CentOS のドライバ設定がおかしいと思われる。

MDB2 で Error: unknown error

■ ファイルを SJIS で保存していた場合。
クエリに日本語を使用していた場合に、発生する。

■ プリペアードステートメントでミスしていた場合。
プレースホルダの ? の数と、データ配列の要素数が一致していない。
コードを安易にコピーすると、よく起こる。

ブラウザで、"<" ">" を表示させたい。

<pre> ~ </pre> の中で "<" ">" を使うと、タグとして認識される。そのまま書くと、意図した表示ができない。
"<" は "&lt;" に、">" は &gt; に置換する事。
&gt; とブラウザに表示させるには、ソースに&amp;gt; と記述する。

( => parenthesis / 丸括弧 / まるかっこ
[ => bracket / 角括弧 / かくかっこ
{ => curly bracket / 波括弧 / なみかっこ
「 => corner bracket / 鉤括弧 / かぎかっこ

シンプルな jQuery サンプル

ボタンを押せば、画像が 1.jpg から 2.jpg に切り替わる。

<html>
 <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js"></script>
 <script type="text/javascript">
 <!--
 $(function(){
  $("#button").click(function(){
   $("#img").attr("src","2.jpg");
  })
 });
 -->
 </script>
 <input type="button" id="button" value="change"></input>
 <p><img id="img" src="1.jpg" /></p>
</html>

2010年5月11日火曜日

Blogger でアクセス解析をする。

アクセス解析設置方法
http://www.google.co.jp/intl/ja_ALL/analytics/
にアクセスする。

・Google のアカウントで、ログインする。
・Blogger のアドレスを登録する。
・氏名等を登録する。
・最後に表示される JavaScript をコピーしておく。
・Blogger でレイアウト変更 > ガジェットの追加 > HTML/JavaScript
・タイトルは任意、本文にコピーしてあった JavaScript を張り付ける。

アクセス確認方法
http://www.google.co.jp/intl/ja_ALL/analytics/
にアクセスする。

2010年5月5日水曜日

foreach array の使い方

配列を作成する。
while($row = $res -> fetchRow()){
 $items[] = array(
   'col1' => $row['col1']
   ,'col2' => $row['col2']);
}
配列を読み込む。
foreach($items as $item){
 echo $item['col1'] . ' ' . $item['col2'] . '<br />';
}
配列に書き込む。
foreach($items as $key => $item){
 items[$key]['col1'] = CreateData1();
 items[$key]['col2'] = CreateData2();
}
CreateData1()、CreateData2() はサンプルの関数です。

PostgreSQL コマンドメモ

■ 手続き言語 plpgsql を登録する。
# su - postgres
-bash-3.2$ createlang -d testdb plpgsql
-bash-3.2$ exit
■ データベースをバックアップする
$ pg_dump -d testdb > output.dmp
■ データベースを復元する
$ dropdb testdb
$ createdb testdb
$ psql -d testdb < input.dmp
■ テーブルをバックアップする
$ pg_dump -d testdb -t testtable > output.dmp
■ テーブルを復元する
$ psql testdb
testdb=# drop table testtable;
testdb=# \q
$ psql -d testdb < input.dmp
■ クエリのファイルを実行する。
$ psql -d testdb -f filename.sql
■ 文字コードの変更(Windows)
postgres=# \encaoding sjis

CentOS 設定メモ

■ コンソールの解像度を変更する。
/boot/grub/grub.conf を編集する。kernel... の行末にスペースを空けて vga=773 を追加する。
8bpp(256色)で表示するときの設定値一覧。
800x600=771;1024x768=773;1280x1024=775

■ 101キーボードを使う時の注意
システム > 管理 > キーボード で設定。
英語(U.S. インターナショナル)に設定しては行けない。シングルクォート、ダブルクォートを入力するときに、2回キーを押す必要がある。英語(アメリカ合衆国)に設定する。

■ IP アドレスを変える
/etc/sysconfig/network-scripts/ifcfg-eth0 を編集する。

Apache 設定メモ

■ 各ディレクトリの .htaccess ファイルの設定を有効にする。
httpd.conf を編集する。AllowOverride None を AuthConfig にする。

PostgreSQL の設定

■ 設定ファイル
/var/lib/pgsql/data/pg_hba.conf
/var/lib/pgsql/data/postgresql.conf

■ ログファイル
/var/lib/pgsql/data/pg_log/postgresql-曜日.log

■ データベースファイルの実体
/var/lib/pgsql/data/base/

Linux コマンドメモ

■ グループにユーザーを追加する。
# gpasswd -a ユーザー グループ
■ ファイルの所有者を変更する。
# chown 所有者:グループ ファイル名

index.html の所有者を apache に変更する。
# chown apache:apache /var/www/html/index.html
■ 前のコマンドの実行結果を、次のコマンドの引数にする。
$ 前のコマンド | xargs 次のコマンド

カレントディレクトリ以下の templates_c を探し、所有者を apache に変更する。
# find -name templates_c | xargs chown apache:apache
■ SSH を使用したファイルの転送。
$ scp 送信元のパス ユーザー@送信先のホスト名:送信先のパス
■ 文字コードを変更する。input output ファイルは同一にしない事。
UTF-8 に変換する。
nkf -w input > output
Linux 改行コードに変換する。
nkf -Lu input > output
■ ファイルを圧縮・解凍する。
InputDir ディレクトリを圧縮する。
tar -cvf filename.tar InputDir
tar -cvzf filename.tar.gz InputDir
tar、tar.gz ファイルの解凍。
tar -xvf filename.tar
tar -xvzf filename.tar.gz

シェルスクリプトで bad interpreter エラー

改行コードが原因で、このようなエラーが発生する。Windows で作成したファイルを Linux に移動したときによく起きる。Windows では CR LF、Linux では LF が使われている。Windows で作成したファイルを Linux で使えるようにするためのコマンド。
$ nkf -Lu inputfile > outputfile
入力と、出力のファイルを同一にすると、ファイルが消えてしまうので注意が必要。
LF = Line Feed
CR = Carriage Return

pear の使い方

■ pear をインストールする。
# yum -y install php-pear

■ pear のデータベースを最新状態に更新する。
# pear channel-update pear.php.net

■ pear のライブラリをインンストールする。
# pear install MDB2
# pear install MDB2_Driver_pgsql

CentOS でLAPP その2

その1では、最低限の動作が出来るまでの手順を記述した。その 2 では追加の手順を記述する。

■ 手続き言語 plpgsql を登録する。
# su - postgres
-bash-3.2$ createlang -d testdb plpgsql
-bash-3.2$ exit
■ Smarty のインストール。http://www.smarty.net/ から Smarty-n.n.n.tar.gz をダウンロード。
# tar vxf Smarty-n.n.n.gz 
# cp /解凍したファイル/Smarty-n.n.n/ /インストール先/smarty -R
■ localhost 以外からPHPの動作をテストをするには。
# system-config-securitylevel-tui
> カスタマイズ > www(http) にチェックを入れる。

■ マシンが起動したときに、PostgreSQL Apache を起動する。
# chkconfig postgresql on
# chkconfig httpd on

CentOS で LAPP その1 インストール

CentOS で、PHP PostgreSQL の開発するための手順を記述する。その 1 では、最低限 PHP と PostgreSQL が連携し、動作するまでの手順を記述する。

root 権限でコンソールを起動する。

PHP のインストール
# yum -y install php php-gd php-postgres php-mbstring php-pgsql php-pear
# PHP -v
PHPのバージョン情報が表示されれば OK 。

PostgreSQL がインストールされているか確認する。
# rpm -qa |grep postgres
postgresql、postgresql-server、postgresql-libs がインストールされていれば、次の手順(PostgreSQL をインストールする。)は行わない。

PostgreSQL をインストールする。今回は確認したときに postgresql、postgresql-server がインストールされていれなかった場合の例 。
# yum -y install postgresql postgresql-server
PostgreSQL のポートを開き、PHP からアクセス出来るようにする。
# vim /var/lib/pgsql/data/postgresql.conf 
listen_addresses = 'localhost' のコメントアウトを外す。

SELinux の設定。PHP から PostgreSQL にアクセスできるようにする。
# getsebool -a | grep db
httpd_can_network_connect_db -->; off
httpd_can_network_connect_db が off なら、次のコマンドを実行する。
# setsebool -P httpd_can_network_connect_db on
httpd_can_network_connect_db が on になったのを確認する。
# getsebool -a | grep db
httpd_can_network_connect_db -->; on
Apach を起動する。
# /etc/init.d/httpd start
Apache の起動を確認する。ブラウザに http://localhost/と入力する。Apache2 Test Page が表示されれば OK 。

データベースを操作する毎に su するのは面倒なので、postgres 以外のユーザーでもデータベースを操作できるようにする。また、PHP から PostgreSQL に接続できるようにする。
# vim /var/lib/pgsql/data/pg_hba.conf
local all all ident sameuser
host all all 127.0.0.1/32 sameuser
の2箇所の ident sameuser を trust に変える。

PostgreSQL を起動する。
# /etc/init.d/postgresql start
テスト用のデータベースを作成する。
# su - postgres
-bash-3.2$ createdb testdb
-bash-3.2$ psql testdb
testdb=# create table testtable (col1 int,col2 int);
testdb=# insert into testtable (col1,col2) values (123,456);
testdb=# insert into testtable (col1,col2) values (567,789);
testdb=# \q
-bash-3.2$ exit
テスト用の PHP を作成する。
# vi /var/www/html/dbtest.php
下記の内容で作成。
<?php
 define('DB_CONNECT'
  ,'host=localhost
  port=5432
  dbname=testdb
  user=postgres
  password=pass');
 $con = pg_connect(DB_CONNECT) or die('pg_connect is error');
 $sql = 'SELECT col1,col2 FROM testtable;';
 $rs = pg_query($con ,$sql) or die ('pg_query is error');
 while($row = pg_fetch_array($rs)){
   echo $row['col1'] . ' ' .  $row['col2'] . '';
 }
 pg_close($con);
?>
ブラウザに http://localhost/dbtest.php と入力する。123 456 ... が表示されれば OK 。

動作環境 CentOS 5.4

参考

Lets' postgres - CentOS で PostgreSQL を使ってみよう!
http://lets.postgresql.jp/documents/tutorial/centos/

PostgreSQL メモ

■ TOP n を使う。
SELECT TOP 10 * FROM testdb => SELECT * FROM testdb LIMIT 10

■ SQL をチューニングする。
EXPLAIN SELECT * FROM ... でクエリプランが表示される。
Seq Scan on ... と表示される部分で遅くなっている可能性あり。

■ 数値型文字列型に変換し、文字列を連結する。
SELECT
 'teststring' || CAST(col1 AS char)
FROM
 testdb
■ psql を使う。
\? psql コマンド一覧
\h クエリの一覧
\l データベース一覧
\c dbname データベースへの接続
\z テーブル一覧

サクラエディタで改行を置換する

置換 > 正規表現にチェックを入れる。

改行を検索・置換したいところに「\r\n」を入力する。

認証が掛かったページで 404 が出る。

.htaccess で認証が掛かったページを、InternetExplorer でアクセスすると 404 エラーが発生する。http;//localhost/test.php?id=0 のように、url に ? が入っているときにエラーが発生する。

原因は、InternetExplorer のバグとのこと。Apache-2.0.51 以降なら Apache 側のオプションを変えれば回避できる。
# vi /etc/httpd/conf/httpd.conf 
BrowserMatch "MSIE" で検索し、下記のように書き換える。
BrowserMatch "MSIE" AuthDigestEnableQueryStringHack=On
Apache の再起動。
# /etc/init.d/httpd restart

2010年5月3日月曜日

VirtualBox のハードディスクをコピーする

GUIにコピーする機能がないので、コマンドラインから実行する。

■Windows編
コマンドプロンプトを開いて、下記コマンド(「>」は不要)を実行する。
> "C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" clonevdi コピー元.vdi 複製先.vdi

・複製先.vdi のパスを指定しなかった場合は、C:\Users\実行ユーザ名\AppData\Local\VirtualStore\Program Files\Oracle\VirtualBox にファイルが作成される。
・検証環境は Windows 7 x86、VirtualBox 4.0.0 。

■Linux編
コンソールを開いて、下記コマンド(「$」は不要)を実行する。
$ /usr/bin/VBoxManage clonevdi コピー元.vdi 複製先.vdi

・複製先.vdi のパスを指定しなかった場合は、実行ユーザのホーム/.VirtualBox/HardDisks/ にファイルが作成される。
・仮想メディアマネージャーで、コピー元の仮想ディスクをいったん除去しないとコピーできない。
・検証環境は CentOS 5.4 64bit、VirtualBox 3.1.6 。

※補足
Virtual PC では、仮想ハードディスクをエクスプローラでコピーして、別の仮想マシンのハードディスクとしてマウントし起動することができた。しかし、VirtualBox では同じ手順が使えない。仮想ディスクに ID が振られ、二重登録ができない仕様になっている。

Cannot register the hard disk '追加しようとしたディスクのパス' with UUID {追加ディスクの ID} because a hard disk '既にあったディスクのパス' with UUID {既存ディスクの ID} already exists in the media registry('VirtualBoxのインストール先/VirtualBox.xml').

上記のようなエラーが出る。

Gnome でワークスペースを切り替える

Ctr + Alt + 矢印キーで、ワークスペースが切り替わる。

欲をいえば、ワークスペースの 1 と 4 をつなげてほしかった。Mac では 4 に居る状態で右を押すと、1 に移動できる。Gnome では、行き止まりになる。

ファンクションキーを同時に二つ押すのも面倒である。しかし、キーの数がそもそも違うので、いたしかたあるまい。

ショートカットの変更で対処できるとも考えたが。キーの割り当ては出来るだけデフォルト優先という方針にしたいし、実用上問題はなさそうなのでこのまま本件は放置。

CentOS をインストールするときに固まる

インストール時に、

Loading ata_piix driver...

のメッセージが表示されたまま固まる場合の、解決方法。
BIOS 設定画面で、

Integrated Peripherals > OnChip IDE Device > LEGACY Mode Support

と移動し、Disabled を Enabled に変更する。

マシンは Shuttle SP35P2 、OS は CentOS 5.4 64bit 。

Gnome で新しいウインドウを作らない。

デフォルト状態の GNOME デスクトップ環境において。GUI でファイルをブラウジングしようとすると、サブフォルダに移動するたびに新しいウインドウが表示されてうっとおしい。

解決方法は、

システム > 設定 > ファイル管理 > 動作 > 常にブラウザ・ウィンドウで開く

にチェックを入れる。