『プログラミングRuby 第2版』は二分冊に

No Comments »

プログラミング言語Rubyの定番の解説書『プログラミングRuby 第2版』が、いよいよ日本でも発売されるようです。オーム社のホームページで、詳細目次などが公開されています。

原書では一冊にまとまっていましたが、日本語版では言語編とライブラリ編の二冊に分かれたようです。ライブラリはクラスごとにメソッド名と使用例が見やすくまとまっていて重宝しているので、二分冊でかえって使い勝手が良くなるかもしれないですね。

ただ、難点はこの価格。言語編が3990円、ライブラリ編が4410円と、結構良いお値段がします。『Programming Ruby Second Edition』をすでに買った身としては、ちょっと手が出ない価格で残念です。

原著を持っていない方には、間違いなくおすすめです。

プログラミングRuby 第2版 言語編

プログラミングRuby 第2版 言語編

プログラミングRuby 第2版 ライブラリ編

プログラミングRuby 第2版 ライブラリ編

初心者向けには、『たのしいRuby 第2版』がイチオシ。この本の初版のおかげで、Rubyを使えるようになりました。

たのしいRuby 第2版

『はじめてのPHP5プログラミング エキスパート編』

No Comments »

はじめてのPHP5プログラミング エキスパート編

ふつうの、PHPを解説した書籍を読み終えてから読む本。初心者向けの本だと端折られがちな、PHPを使った「オブジェクト指向プログラミング」「デザインパターン」「セキュリティ」「例外処理」なんかを扱っています。

あとの半分は、PEAR、Smarty、Mojavi、PDOなどの外部モジュールの解説。こちらの方は、割と初歩的な内容で、実際に使用する際にはもうすこし詳しい解説が欲しくなる感じ。でも、わかりやすくまとまっていますから、取っかかりとしては良いと思います。

特に、PHP 5.1から標準添付されるようになったPDOをあつかった部分は古い本には載っていないこともあり、参考になりました。欲を言えば、この部分にもう少しページ数を割り当ててほしかったところではありますが。

ちょっと気になったのは、全体を通しての統一感をあまり感じないところ。細かいところですが、「セキュリティ」の章だけブレースを置く場所のスタイルが違ったり、変数の命名法が異なっていました。

また、Singletonパターンを用いてPDOによるデータベースアクセスをするクラスの実装例が出てきますが、「デザインパターン」の章と「データベースアクセスの実装」の章で実装方法が違うのもちょっと疑問に思いました。後者ではPDOクラスを継承したクラスを作成しています。

ただ、一冊でいろいろなトピックの知識が手に入ったのは良かったです。

『入門OpenSSH』

No Comments »

SSH。数年前、契約していたレンタルサーバにアクセスするために、必死になって使い方を覚えたツール。Webで公開されていたWindowsのPuTTYの導入手引書を、意味もわからずなぞって接続できるようになったものでした。

その後、『入門SSH』で一通りの知識と、便利な使い方などを学びました。特に、scpとssh-agentを使えるようになって、随分と使い勝手が向上して助かりました。

使い方はわかってきたものの、仕組みの方は相変わらず良くわからないまま。結局、ツールの使用法以前に、暗号技術について理解していなかったのも大きかったことを痛感。暗号化技術について定評のある入門書『暗号技術入門 - 秘密の国のアリス』を読むことで、「全然わからない」から「多少はわかる」位には理解が進みました。

そして今回、『入門OpenSSH - Linux/FreeBSD/Solaris/Mac OS X対応』のおかげで、sshとその関連プログラムの働きや使い方など随分と理解できるようになりました。

本書の前半では、SSHのオープンソース実装であるOpenSSHのインストールから仕組み、使い方など、基本をすべて網羅しています。それぞれのトピックには適切な見出しと解説、実行例が載っていいて、随所に理解を助ける図も挿入されています。特に、実行例は本文とは背景色が異なっているのと、自分の入力したコマンドが太字で強調されているため、かなり見やすくなっています。その都度大事な部分に注釈がついているのも良かったです。前半部分を読むだけでも、SSHを通常使う分には十分な理解を得られると思います。

後半になると、Subversionなど他のプログラムでsshを利用する際の方法や、主にサーバー管理者がsshdを運用する際に必要となる知識など、一歩進んだ使い方が紹介されています。この辺りは当面必要なさそうなので、今回は飛ばし読みで済ませました。

この本、対応OSにMac OS Xまで含まれているのもポイント。紹介されていたMac用のsftpクライアントのFuguも、早速ダウンロードしておきました。

Mac OS Xで記述されていた実行例と一カ所だけ違っていたのは、ssh-keygenが生成する鍵のビット長。本書で使用されているバージョン4.3p2では、デフォルトで2048ビットの鍵を生成しますが、Mac OS X 10.4 TigerにインストールされているOpenSSHのバージョンは3.8.1p1なので、デフォルトのビット数は1024ビットになっています。そのため、2048ビットのRSA鍵を生成するには、明示的に”-b 2048″とオプションを付けてssh-keygenを実行する必要がありました。

sshやその関連ツールのオプション一覧も巻末に掲載されており、解説を読み終えた後もリファレンスとして使えるのもうれしいところ。SSHを効果的に使えるようになりたい方に、おすすめです。

【関連サイト】

以下は、読書メモ。解説は『入門OpenSSH - Linux/FreeBSD/Solaris/Mac OS X対応』を参照。


- .sshディレクトリのパーミッション
~/.ssh/ 700 (drwx------, 所有者のみ読み書き実行可)
id_rsa  600 (-rw-------, 所有者のみ読み書き可)
authorized_keys 600 (-rw-------, 所有者のみ読み書き可)
- 特定の秘密鍵を使ってログイン
$ ssh [-p ポート番号] [-i 秘密鍵ファイル] [ユーザー名@]ホスト名
- 秘密鍵と公開鍵ペアを生成する(2048ビットのRSA鍵)
$ ssh-keygen -b 2048 -t rsa
- 秘密鍵のパスフレーズを変更する
$ ssh-keygen -p
- 公開鍵の指紋を確認する
server$ ssh-keygen -l -f id_rsa.pub
- 転送した公開鍵をauthorized_keysに追加する
server$ mkdir ~/.ssh
server$ cat id_rsa.pub >> ~/.ssh/authorized_keys
- リモートコマンドを実行する
$ ssh username@server.example.com ls -l
- 認証エージェントを起動
$ ssh-agent bash
- 認証エージェントに秘密鍵を追加
$ ssh-add [秘密鍵ファイル]
- 認証エージェントが保持している鍵を確認
$ ssh-add -l
- 生存期間を指定して秘密鍵を追加
$ ssh-add -t 3600
1時間だけ有効
- 認証エージェントの鍵をすべて削除
$ ssh-add -D
- SSH_AUTH_SOCK の値を確認
$ echo $SSH_AUTH_SOCK
- 認証エージェントの転送を許可してログイン
$ ssh -A username@server1.example.com
server1$ ssh username@server2.exemple.com
- rsync ("/" の有無に注意。)
$ rsync -a username@server.example.com:/opt/username backup
サーバー上の/opt/username というディレクトリのコピーを、ローカルのbackupディレクトリの中に作成する。
$rsync -a username@server.exemple.com:work/ work/
サーバー上のusernameホームディレクトリの中のworkというディレクトリを、ローカルのworkディレクトリと同期させる。
[option]
-a  archival
-u  update
-b  backup
-v  verbose
-z  gzip
-e "コマンド"   sshの代わりに実行するコマンドを指定する。
--delete    転送元にないファイルが転送先のディレクトリにあった場合、そのファイルを削除する。
--exclude パターン  指定されたパターンに合致するファイル名を無視する。

PDOの共有モジュールでハマったこと

Mac No Comments »

これまで、PHP5でPDO(PHPのデータベースアクセス用インターフェイス)は静的にビルドしていました。ただ、共有モジュールとしてのビルドが推奨されていることもあり、改めてビルドし直すことにしました。

configureオプションはこんな感じ。CGI版です。

./configure --prefix=/usr/local --with-config-file-path=/usr/local/etc --with-mysql=/usr/local/mysql --enable-pdo=shared --with-pdo-mysql=shared,/usr/local/mysql --enable-force-cgi-redirect --enable-mbstring --enable-zend-multibyte --enable-mbregex --enable-sqlite-utf8 --enable-xml --enable-simplexml --with-libxml --with-xmlrpc --with-dom --with-xsl --with-soap=yes --with-zlib --with-curl

マシンはMac OS X 10.4のiBook G4で、MySQL 4.1.16をインストールしています。1.33GHzのPowerPC G4だと、PHPのビルドは結構時間がかかります。おまけに、ハードディスクの収まっているパームレスト左下がどんどん熱くなるのが毎回きつくて困ります。

ビルドが終わり、php.iniに以下の二行を加えました。

extension=pdo.so
extension=pdo_mysql.so

これで動くはずが、なぜかMySQL用PDOドライバを認識せず。configureオプションを変えて何度もビルドするも、一向に解決しません。もう共有モジュールにしなくても良いかと、あきらめようとした矢先、ある重大なことに気がつきました。

何のことはない。忘れてました、php.iniに加えるのを。

extension_dir = "/usr/local/lib/php/extensions/no-debug-non-zts-20050922/"

はぁ、疲れた……。

P_BLOGで検索すると、Manualページがヒット

Web No Comments »

GoogleやYahoo!で”P_BLOG”を検索すると、結構目につくのがP_BLOGのマニュアルページ。こんな感じのアドレスです。

var/help/man/index.php

Googleでの検索例

(上はGoogleでの検索例。)

Manualページが検索結果でヒットされても困るので、環境設定で非表示にしようとしたところ、変更できそうなところは見あたらず。grepをかけて当たりをつけた”include/fnc_base.inc.php”をのぞいてみると、848行目でそれらしき箇所を発見。

  if (file_exists($cd . '/var/help/')) {
        if ((preg_match('/help/index.php/', $request_uri)) && (empty($id))) {
            $content_menu .= '<li class="cur-menu">'.$lang['help']."</li>n";
        } else {
            $content_menu .= '<li class="menu"><a href="'.$cd.'/var/help/index.php" class="menu">'.$lang['help']."</a></li>n";
        }
    }

フォーラムやフィードバックフォームは$cfgを参照してるけど、Help Menuはそうではないみたい。7行分をコメントアウトしてみたら、「ヘルプ」が表示されなくなりましたが、あんまりソースをいじり回していると、将来P_BLOGをアップデートする際に面倒なことになりそうでなるべく避けたいところ。

要はサーチエンジンで表示されなければいいわけなので、ヘルプの入ったディレクトリをインデックス対象から外すように”robots.txt”に記述してみることにしました。

User-agent: *
Disallow: /macosx/var/help/

すぐには反映されないでしょうが、これで様子を見ることにします。

『UNIXという考え方 - その設計思想と哲学』

No Comments »

UNIXという考え方―その設計思想と哲学

UNIXという考え方―その設計思想と哲学

シェルスクリプトとASCIIフラットファイルの移植性・柔軟性の良さがわかる本。

将来は予測できないのだから、変化に適応できるようなプログラム、データフォーマットが大事ということ。特定のハードウェアに最適化するチューニングを施してしまうと、次世代のハードウェアが台頭してきた際に移植が困難になってしまう。

そういった点をいくつもの実例を挙げながら、力説しています。話の内容がちょっと古かったり、筆者の考えに疑問を感じたりするような例もありますが、テンポ良く読み終えることができました。きちんとした主張がある本は、読んでいておもしろいですね。

あと、原書だと続編が出ています。後半に、LinuxやJavaなどをあつかった章が加筆されている模様。

Linux and the Unix Philosophy

Linux and the Unix Philosophy

P_BLOGをXHTML 1.0 Transitionalに

Web No Comments »

P_BLOGはW3C勧告に完全準拠したXHTMLを出力してくれます。これは大変ありがたいことなんですが、サポートしているXHTMLのバージョンが1.0 Strictと1.1なんですよね。普段使っている1.0 Transitionalが抜けているのがちょっと困った。

XHTML 1.0 Transitionalでないと、使えないタグがいろいろと出てきてしまいます。

aタグにtargetつープロパティーは無い?!?! 調べてみたらxhtml Strictにはtargetの指定は無いんです。 ええええじゃあページをblankであけるにはどうするのよ!!

こちらのサイトでも書かれているように、

 target="_blank"

を書けないため、リンクを別ウィンドウで開くように記述できなくなります。まだ1.0 Strictに移行する気はないため、またP_BLOGの方をいじって対処してみます。

include/fnc_base.inc.php 394行目に挿入

} else if ($cfg['xml_version'] == '1.0t') {
      $dtd =<<<EODTD
      <?xml version="1.0" encoding="{$cfg['charset']}"?>
      <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
                       "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="{$cfg['xml_lang']}" lang="{$cfg['xml_lang']}">
EODTD;
        $content_type =<<<EOCT
        <meta http-equiv="content-type" content="text/html;
         charset={$cfg['charset']}" />
<meta http-equiv="content-script-type" content="text/javascript" /><meta http-equiv="content-style-type" content="text/css" />
EOCT;

admin/preferences.php 管理画面で1.0 Transitionalを選択できるようにする 18行目を変更

    switch ($cfg['xml_version']) {
        case '1.0t':
            $xml_ver_1t  = 'checked="checked" ';
            $xml_ver_1    = '';
            $xml_ver_11   = '';
            $xml_ver_11cn = '';
            break;
        case '1.1':
            $xml_ver_1t  = '';
            $xml_ver_1    = '';
            $xml_ver_11   = 'checked="checked" ';
            $xml_ver_11cn = '';
            break;
        case '1.1cn':
            $xml_ver_1t  = '';
            $xml_ver_1    = '';
            $xml_ver_11   = '';
            $xml_ver_11cn = 'checked="checked" ';
            break;
        default   :
            $xml_ver_1t  = '';
            $xml_ver_1    = 'checked="checked" ';
            $xml_ver_11   = '';
            $xml_ver_11cn = '';
            break;
    }

665行目に挿入

<input tabindex="1" accesskey="x" type="radio" size="40" name="xml_version" value="1.0t" id="xhtml1.0t" {$xml_ver_1t} /><label for="xhtml1.0t">1.0 Transitional</label><br />

以上で、DTDをXHTML 1.0 Transitionalに変えられました。管理画面の様子はこんな感じになります。

変更前: XHTML 1.0 Strict

変更後: XHTML 1.0 Transitional

WP Theme & Icons by N.Design Studio
Entries RSS Comments RSS ログイン