Nucleusでつくる!最強のブログサイト

  4881665707
  http://www.amazon.co.jp/o/ASIN/4881665707/todaysnonsenc-22/ref=nosim/
  Nucleus CMS Japanチーム (著)
  ソーテック社
  ISBN: 4881665707
  2007/04
  3,360 円

  Nucleus の解説本.
  Nucleus に関する書籍ははじめてかも.

MySQL 4.1.22 用の Tritonn パッチをテストしてみる

  Solaris 10 に MeCab と Senna と MySQL をインストールする …… 失敗 の続きです.

  MySQL 4.1.22 用の Tritonn パッチがリリースされたので,テストです.

- mir the tritonn - MySQL 4.1対応版リリース
  http://d.hatena.ne.jp/mir/20070412/p1

  前回も少し書いたのですが,Senna の MySQL パディングは Tritonn という別プロジェクトになっています.
  当初は,MySQL 5.0.x 用のパッチのみの提供でしたが,今回 MySQL 4.1.22 用のパッチがリリースされました.

  まず,MeCab,Senna 本体のインストールをします.インストールは [2007-03-24-1] と同じです.
  Senna は 1.0.4 にバージョンアップして,Solaris 10 では UINT_MAX の未定義のエラーは出なくなっています.

  次に,Tritonn パッチをダウンロードして,MySQL にパッチを当てます.

- SourceForge.jp: Project File List
  http://sourceforge.jp/projects/tritonn/files/

$ tar -zxvf tritonn-1.0.2.mysql-4.1.22.senna-1.0.4.tar.gz
$ tar -zxvf mysql-4.1.22.tar.gz
$ cd mysql-4.1.22
$ patch -p1 < ../tritonn-1.0.2.mysql-4.1.22.senna-1.0.4/mysql-4.1.22.senna.diff

  configure を再生成します.

$ libtoolize -c -f
$ aclocal
$ autoheader
$ automake -c -a -i
$ autoconf
$ touch sql/sql_yacc.yy

  次に configure をします.
  configure の際には,--with-senna と --with-mecab をオプションに追加します.

$ ./configure --prefix=/usr/local/mysql \
              --with-extra-charsets=all \
              --without-readline \
              --enable-assembler \
              --with-low-memory \
              --with-senna=/usr/local/senna \
              --with-mecab=/usr/local/mecab/0.9
$ make

  うーむ.[2007-03-24-1] と同じエラーでした.

sql_yacc.cc: In function `int yyparse(void*)':
sql_yacc.cc:22059: error: expected primary-expression before "__attribute__"
sql_yacc.cc:22059: error: expected `;' before "__attribute__"
make[4]: *** [sql_yacc.o] Error 1

- ちなみに MySQL 5.0.37 では
  まったく問題なく行きました!

$ mysql -uroot -p test
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.0.37-log Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> CREATE TABLE t1 (c1 TEXT, FULLTEXT INDEX ft USING NGRAM (c1)) ENGINE = MyISAM DEFAULT CHARSET ujis;
Query OK, 0 rows affected (0.01 sec)

mysql> INSERT INTO t1 VALUES ("すもももももももものうち");
Query OK, 1 row affected (0.01 sec)

mysql> INSERT INTO t1 VALUES ("生麦生米生卵");
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO t1 VALUES ("東京特許許可局");
Query OK, 1 row affected (0.00 sec)

mysql> SELECT * FROM t1 WHERE MATCH(c1) AGAINST("特許");
+----------------+
| c1             |
+----------------+
| 東京特許許可局 |
+----------------+
1 row in set (0.00 sec)

  ということで,MySQL 5.0.37 で使っています.検索は想像以上に高速です.

  また,折をみて,MySQL 4.1.22 用は試してみたいと思います.

Subversion で作業コピーの URL を変更する方法

  サーバ側の都合で Subversion のリポジトリの場所を変更した場合,その作業コピーでは元の URL にアクセスできなくなります.
  例えば,リポジトリを file:///repos から file:///new-repos に移動した場合,以下のようなエラーになります.

svn: No repository found in 'file:///repos'

  これを解決するには,新しい作業コピーをチェックアウトしてもいいのですが,svn switch を使って,URL を書き換えてしまう方法もあります.

svn switch --relocate file:///repos file:///new-repos

  これは file:///repos から file:///new-repos に URL を書き換えるということになります.
  svn:// や svn+ssh:// の場合もこれでいけます.

- svn switch
  http://subversion.bluegate.org/doc/re28.html

- 追記
  ブランチのように同じリポジトリ内の異なるパスに再配置しようとすると,以下のようにエラーが出ます.

Relocate can only change the repository part of an URL
relocate は、URL のリポジトリ部分しか変更できません

  この場合は,--relocate をつけずに単なるパスの切り替えだけでできます.

svn switch file:///repos/branches/foo .

- 追記 (2009-10-30)
  TortoiseSVN の場合は、単に「再配置」を行えば OK です。

MySQL 3.23 な環境で CakePHP の hasAndBelongsToMany を利用する

  そもそもですが,CakePHP は MySQL 4.0 以上が対象らしいです.
  ただ,公式のドキュメントは見つかっていませんが……

  それでも,MySQL 3.23 な環境で CakePHP を使って,なおかつ hasAndBelongsToMany も使いたい場合の対処法です.
  MySQL 3.23 な環境では,hasAndBelongsToMany を使うとき,SQL のエラーが出ます.具体的には JOIN に失敗しています.

  このとき CakePHP は以下のような SQL 文を発行します.

SELECT  `Tag`.`id`, `Tag`.`tag`
FROM `tags` AS `Tag`
JOIN `posts_tags` ON `posts_tags`.`post_id` = '2'
 AND `posts_tags`.`tag_id` = `Tag`.`id`
WHERE  1 = 1


  MySQL のリファレンスにあるように,JOIN は MySQL 4.0.11 以降で対応なので,この JOIN を INNER JOIN にしてあげればいいわけです.

- ref.: MySQL AB :: MySQL 4.1 リファレンスマニュアル :: 6.4.1.1 JOIN 構文
  http://dev.mysql.com/doc/refman/4.1/ja/join.html

注意:INNER JOIN 構文で join_condition  を使用できるのは、MySQL 3.23.17 以降に限られます。同様に、JOIN  と CROSS JOIN に関しても、MySQL 4.0.11 以降でのみ条件を指定できます。


  ちょうど昨日 CakePHP の最新版 (1.1.14.4797) がリリースされたので,この最新版と,その前のバージョン (1.1.13.4450) での修正箇所を挙げておきます.

- 1.1.14.4797 の場合
  cake/libs/model/datasources/dbo_source.php の 1051 行目を修正します.

--- cake_1.1.14.4797-orig/cake/libs/model/datasources/dbo_source.php    2007-04-06 04:21:05.000000000 +0900
+++ cake_1.1.14.4797/cake/libs/model/datasources/dbo_source.php    2007-04-06 08:46:09.015389000 +0900
@@ -1048,6 +1048,7 @@
                     'joins' => array(array(
                         'table' => $joinTbl,
                         'alias' => $joinAssoc,
+                        'type' => 'INNER',
                         'conditions' => array(
                             array("{$joinAlias}.{$assocData['foreignKey']}" => '{$__cakeID__$}'),
                             array("{$joinAlias}.{$assocData['associationForeignKey']}" => '{$__cakeIdentifier['."{$alias}.{$linkModel->primaryKey}".']__$}')


- 1.1.13.4450 の場合
  cake/libs/model/datasources/dbo_source.php の 1043 行目を修正します.

--- cake_1.1.13.4450-orig/cake/libs/model/datasources/dbo_source.php    2007-02-03 11:55:49.000000000 +0900
+++ cake_1.1.13.4450/cake/libs/model/datasources/dbo_source.php    2007-04-06 09:13:16.018886000 +0900
@@ -1040,7 +1040,7 @@
                 }
                 $sql .= ' ' . join(', ', am($this->fields($linkModel, $alias, $assocData['fields']), $joinFields));
                 $sql .= ' FROM ' . $this->fullTableName($linkModel) . ' ' . $this->alias . $this->name($alias);
-                $sql .= ' JOIN ' . $joinTbl;
+                $sql .= ' INNER JOIN ' . $joinTbl;
 
                 $joinAssoc = $joinTbl;



  上記の修正はあくまで,hasAndBelongsToMany を使いたい場合で,そのほかの項目はあまりテストしていませんのでご注意を.
  可能であれば,MySQL 4.0.x にアップデートするのが一番だと思います.

Consolas フォントと M+2VM+IPAG circle フォントを FontLink する

- [O] ConsolasフォントとモトヤシーダフォントをFontLinkして使う
  http://overlasting.dyndns.org/2006-11-07-3.html

  この記事を見て,モトヤシーダを試してみたのですが,いまいちフォントが薄い(?)ような気がして落ち着きません.

  そこで,「M+ と IPA フォントの合成フォント」である M+2VM+IPAG circle を FontLink してみました.

1. Consolas フォントをインストールする

 - Consolas Font Pack for Microsoft Visual Studio 2005
   http://www.microsoft.com/downloads/details.aspx?familyid=22e69ae4-7e40-480 ...

  一応,正式には Visual Studio 2005 がインストールされていないと Consolas フォントはインストールできないようです.

2. M+ と IPA フォントの合成フォントをインストールする

 - M+ と IPAフォントの合成フォント : ダウンロード
   http://mix-mplus-ipa.sourceforge.jp/download.html

  どのフォントを選ぶかは好みですが,M+2VM+IPAG-circle.ttf を選びました.

3. FontLink の設定をする

  レジストリエディタで

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLink

  の Consolas を

M+2VM+IPAG-circle.ttf,M+2VM+IPAG circle

  に変更します.もし,Consolas が無かったら,右クリックして [新規] - [文字列値] か [複数行文字列値] を作成します.

  あとは,コンピュータを再起動すれば完了です.

# レジストリをいじるので,自己責任でお願いします.

- スクリーンショット
  こんな感じになりました (クリックすると大きくなります).

  

WEB+DB PRESS 総集編 Vol.1~36

  4774130729
  http://www.amazon.co.jp/o/ASIN/4774130729/todaysnonsenc-22/ref=nosim/
  WEB+DB PRESS 編集部
  技術評論社
  ISBN: 4774130729
  2007/3/30
  1,974 円

  本屋に行ったらあったので,早速購入してみました.

  これは,かなりいいです.

  創刊から 36 号までの全ての記事が PDF で収録されています.
  各号の目次は PDF にありますし,誌面にもカラーで一覧があります.

  収録された PDF は印刷可,内容抽出可なので,Google Desktop などのデスクトップ検索アプリケーションでも検索することができます.大変太っ腹なことです.
  そして,PDF が 収録された CD-ROM のみではなくて,いくつかの書き下ろしの記事があるのもポイントが高いです.

  これは,買いですよ.

DB Designer 4 の HTMLReport プラグインの改造

  オープンソースの DB モデリングツール DB Designer にバンドルされている HTMLReport を少し改造してみました.

  改造前の HTMLReport は,出力される HTML ファイルのモデル名が,以下のように強制的に「plugin_tmp.xml」という文字列になります.

  改造前の HTMLReport の出力

  本来ここは,[オプション] - [一般設定] - [モデル名] で指定した文字が入るのが妥当だと思います.
  また,[オプション] - [一般設定] - [コメント] で入力したコメントがどこにも反映されません.

  HTML レポートを出力するたびに,モデル名を書き換えて,さらにコメントを加えるのは大変面倒なので,きちんとモデル名が反映されて,コメントも出力できるように改造してみました.

  改造対象は,日本語化された DB Designer で,ソースコードは日本語化サイトからダウンロードすることができます.

- DBDesigner 4 日本語化サイト
  http://dbdesigner.iimp.jp/

- パッチ
  http://pocari.org/tools/DBDesigner/HTMLReport.diff

--- HTMLReport-orig/Main.pas    2003-09-20 17:10:14.000000000 +0900
+++ HTMLReport/Main.pas    2007-03-31 14:26:59.000000000 +0900
@@ -504,7 +504,10 @@
   try
     aReportFile.LoadFromFile(theFilePath+'ReportHeader.txt');
     theReport:=DMMain.ReplaceText(aReportFile.Text,
-      '<?=$Modelname?>', 'Database Model '+ExtractFileName(EERModel.ModelFilename));
+      '<?=$Modelname?>', EERModel.GetModelName);
+
+    theReport:=DMMain.ReplaceText(theReport,
+      '<?=$ModelComments?>', EERModel.ModelComments);
 
     aReportFile.LoadFromFile(theFilePath+'Report.css');


- パッチを当てたバイナリ (Windows 版)
  http://pocari.org/tools/DBDesigner/DBDplugin_HTMLReport.zip

  (パッチを当てたバイナリは,DB Designer がインストールされたフォルダに上書きコピーしてください.)

  このパッチを適用すると以下のように,モデル名,コメントが反映されるようになります.
  テンプレート変数 $Modelname にモデル名が割り当てられて,$ModelComments にコメントが割り当てられます.

  改造後の HTMLReport の出力

  また,標準で付いているテンプレートを日本語化したファイルも以下に置いておきます.
  DBDesigner\Data\Plugins\HTMLReport 以下にディレクトリごとコピーしてください.

- テンプレートの日本語化
  http://pocari.org/tools/DBDesigner/Standard-ja.zip

  ライセンスは,オリジナルと同じ GPL です.