/ 最近 .rdf 追記 設定 本棚

脳log[2006-02-14~]



2006年02月14日 (火)

SQLite: logic error or missing database. (解決)

Apacheサービスを HTTPDアカウント(Usersグループ)で走らせるようになってから、sqlite3.dllを使う、Rubyで書かれた CGIスクリプトが「logic error or missiing database」を出すようになった。

エラーを直接投げてるのは Rubyのライブラリの sqlite3-rubyだけど、エラーメッセージは SQLiteのライブラリ(sqlite3.dll)に由来している。

エラーを出す原因となった SQLは以下。

SELECT * FROM sqlite_master WHERE type='table' OR type='view' ORDER BY name;

データベース内のテーブルとビューの一覧を取り出すためのありふれた SQL文。

問題をややこしくしたのは

SELECT * FROM sqlite_master WHERE type='table' ORDER BY name;

だとか

SELECT * FROM sqlite_master WHERE type='view';

でも同じエラーが出るのに

SELECT * FROM sqlite_master WHERE type='table';

だとエラーが出なかったこと。

結論から言うと SQL文は悪くない。

Apacheを SYSTEMアカウントで動かすとエラーが出なくなったので、Apache(と Apacheが CGIとして起動する Ruby)が HTTPDアカウント(Usersグループ)で動いてることに原因があると考えた。それなら書き込み権限がないせいでエラーになってるのかもしれない。

データベースファイルやデータベースファイルを入れるディレクトリには当然 HTTPDに対して書き込み権限を付けてある。

SysInternalsの FileMonを使って確認したところ、ruby.exeが C:\WINDOWS\sqlite_XXXXXX(文字化け) を CREATEしようとして Denyされている。

sqlite-3.3.4の os_win.cに

char *sqlite3WinFullPathname(const char *zRelative)

という関数があり、Cygwinや WINCE以外の WINDOWSプラットフォームではそこから

GetFullPathNameW/A

という APIが呼ばれている。おそらくこの APIが "C:\WINDOWS\sqlite_XXXXXXX" というパスの出所だろう。

ここをいじって

"%TEMP%\sqlite_XXXXXXX"
=> "%USERPROFILE%\Local Settings\Temp\sqlite_XXXXXXX
=> "C:\Documents and Settings\HTTPD\Local Settings\Temp\sqlite_XXXXXXX"

上のような Tempディレクトリにファイルを作成するようにするのもアリだろうが、そういう変更をすると SQLiteのバージョンアップに追従するのが面倒になるので Rubyスクリプトの方で対処する。

sqlite3-rubyでは

db = SQLite3::Database.new('hoge.db');
db.temp_store = 2; # 2=memory, 1=file

SQLでなら

PRAGMA temp_store = MEMORY;

(参照) Pragma statements supported by SQLite

SQLの方は試してないけど、sqlite3-rubyの方で対処したところエラーが出なくなった。

エラーメッセージが的外れなのでここまで来るのに苦労した。

 あっれ〜〜?

PRAGMA temp_store_directory;

PRAGMA temp_store_directory = 'directory-name';

Query or change the setting of the "temp_store_directory" - the directory where files used for storing temporary tables and indices are kept. This setting lasts for the duration of the current connection only and resets to its default value for each new connection opened.

When the temp_store_directory setting is changed, all existing temporary tables, indices, triggers, and viewers are immediately deleted. In practice, temp_store_directory should be set immediately after the database is opened.

The value directory-name should be enclosed in single quotes. To revert the directory to the default, set the directory-name to an empty string, e.g., PRAGMA temp_store_directory = ''. An error is raised if directory-name is not found or is not writable.

The default directory for temporary files depends on the OS. For Unix/Linux/OSX, the default is the is the first writable directory found in the list of: /var/tmp, /usr/tmp, /tmp, and current-directory. For Windows NT, the default directory is determined by Windows, generally C:\Documents and Settings\user-name\Local Settings\Temp\. Temporary files created by SQLite are unlinked immediately after opening, so that the operating system can automatically delete the files when the SQLite process exits. Thus, temporary files are not normally visible through ls or dir commands.

%TEMP%フォルダでなく %WINDIR%にテンポラリファイルを作ろうとするのは Windowsのせい?俺のせいでした。

httpd.confに次の行を加えるべし。

PassEnv TEMP

[][マンガ][コミック] むんこ【らいか・デイズ 1 (1) (まんがタイムコミックス)】 芳文社

確かに、確かに萌えが存在している。ギャップだとか弱点に萌えが宿るのは真実。何かのインタビューで桜庭さんが仰っていた通りです。

http://www5a.biglobe.ne.jp/~dai_/diary/diary0602.htm#05 (DAIさん帝国)


2006年02月11日 (土)

[][][文庫] 結城 充考【奇蹟の表現〈3〉竜(ドラゴン) (電撃文庫)】 メディアワークス

[][][文庫] 高殿 円【カミングアウト! (ヴィレッジブックスedge)】 ソニーマガジンズ

[][マンガ][コミック] むんこ【らいか・デイズ 2 (2) (まんがタイムコミックス)】 芳文社


2006年02月09日 (木)

[DR250R] コケた。

高速教習のときに、高速降りた後はついついスピードが上がり過ぎるものだと何度か言われたのに。

スピードを相対的にとらえてるから、いつもと同じように減速しただけで十分曲がれると勘違いする。今日は夜で空いてたからいつもより 20km/hは余分にでてたでしょ。

自分の限界もわからんようなのは下手も下手。最下層。


2006年02月07日 (火)

[SN25P] Avast4.6.763 (Feb. 2006): Scan created/modified files が機能しない状況

標準シールドの詳細な設定に「新規作成/修正されたファイルを検査」という項目がある。

これにチェックを入れて、さらにその下のラジオボタンで すべてのファイルを対象にしたとしても、ウィルスファイルが作成されるのを検知できないことがある。

  • Windowsやプログラムは C:\WINDOWS, C:\Program Filesにインストールしている
  • C:\Data Files には別の HDDをマウントしている

こういう状況で C:\Data Files\HOGE.ZIP を解凍(エクスプローラの「全て展開」を使用)して、C:\Data Files\HOGE\VIRUS.FILE というウィルスファイルが作成されても Avastは検知しない。

比較のために C:\Documents and Settings\UserName\デスクトップ\HOGE.ZIP を解凍してみたが、これは検知した。

さらに試すと、Data Files\HOGE.ZIP の展開先をデスクトップにした場合、Avastはウィルスを検知するが、逆に デスクトップ\HOGE.ZIP を Data Filesに展開した場合はウィルスを検知できない。

総合すると、別の HDDがマウントされているフォルダの下にウィルスファイルが作成されても Avastは検知できない

違った。この HDDに Zドライブを割り当てて C:\...\デスクトップ\HOGE.ZIPを Z:\HOGE\VIRUS.FILE に解凍してみても検知しなかった。Cドライブから、同じ HDD上の違うパーティションである Dドライブに解凍したら検知した。

結局のところ、ウィルスファイルの解凍先がパーティションをまたいでいたとしても同じ HDD内なら検知するが、解凍先が違う HDDのときは検知しない。それとは別に、解凍先が、別の HDDが割り当てられたフォルダ*の下であった場合は、ウィルスの入った ZIPファイルとその解凍先が同じ HDDであろうがなかろうが検知しない。

* `dir`によると<DIR>ではなく<JUNCTION>


2006年02月04日 (土)

[SN25P] Subversion1.3, Apache2.0.55

ファイルの変更履歴が保存できるのが嬉しくて、前から入れたかった Subversion。リポジトリのブラウズに最初は ViewCVSを使うつもりで Pythonまでインストールしたのにローカルでの CGIの実行環境が整わずに挫折していた。

今度は WebDAVを使ってエクスプローラの Webフォルダ(マイネットワーク→ネットワークプレイスの追加)と ウェブブラウザの Firefoxでブラウズすることにした。

ダウンロードしてきた Subversionのバイナリパッケージに含まれてた mod_dav_svn.soが Apache2.0.54向けだってので、Apache2.2.0にはロードできなかったので 仕方なく、最新(の安定版)じゃないけど仕方なく Apache2.0.55をインストール。

以前 Apacheをコンパイルしようとして apr, apr-iconv, apr-utilといった Apacheから利用されるライブラリのコンパイルの段階で失敗してたので今回は素直にインストーラを利用。Windowsの何が困るって ./configure できないのがそうとう痛い。configure の一行目に #!/bin/sh とか書いてあってもシェルスクリプトが実行できないし、実行してくれるシェルもないし。Microsoftは wshに続いて、Vistaの後には mshを出してくるみたいだけど、シェルスクリプトの実行できないシェルは要らないですよ。

Apacheの設定は簡単。モジュール毎のディレクトリリファレンスと目的別に書かれた記事が使いやすいし、セキュリティ上注意を要する設定には囲みで目立つように注意が書かれてるし、ドキュメントの大部分が日本語に翻訳されてるし。

http://localhost, http://localhost/~user/, http://localhost/svn/の表示に成功。詰まった箇所は二つ。

  • SVNPathディレクティブは Subversionのリポジトリを引数にとるが、その代替として使える SVNParentPathディレクティブは複数のリポジトリをサブディレクトリとして持つような、(自身は普通の)フォルダのパスを引数にとる。
  • mod_dav + mod_dav_fsで特定のフォルダを公開するには、Dav filesystemの設定をした "Location" を公開したいフォルダに "Alias" する。

せっかく Apacheをサービスとして常時動かすのだからと、無料の DDNSサービスを利用して外部に公開することにした。この PCが起動していれが https://sn25p.dip.jp でアクセスできるはず。

mod_sslの設定は右を参照。The Apache + SSL on Win32 HOWTO

公開の目的は不特定多数の人間にアクセス/攻撃してもらうためでなく、ネット越しに自分の PCにアクセスできたら録画予約も HDDに保存したファイルの編集も 貯まってる aviの視聴も思いのままだな、ってことなので

  • 全ての "Location"に Digest認証。
  • オレオレ証明書を使って SSL。httpsだけを使って httpは受け付けないことにするので 443ポートだけ LISTEN。
  • 万一の保険に、Apacheの権限を特定のディレクトリに限って読み込みだけ可能なように制限しようと、Apacheサービスのログオン先を変更しようとしたのだけど……

XP Home Editionでそういうことをやろうと思ったら (ようこそ画面にも表示される)「ユーザー」を新しく作成するしか方法がなさげ。ASPNETという見えないユーザーが既に存在しているのでできるないことはないはずなんだが。

Home Editionは関係なかった。Apache用のアカウントを作成してから、HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList をいじれば非表示にできる。

とりあえず HTTPDというユーザーを作って Apacheのサービスをこのアカウントで実行しようとしたがログオンエラーになる。どうも「サービスとしてログオン」する権限を与えないといけないらしい。XP Homeには「ローカルセキュリティポリシー」なんて GUIの管理ツールがないので Windows 2000 Resource Kitをダウンロードしてきてコマンドラインで

ntrights -u HTTPD +r SeServiceLogonRight

とする。パスワードが空の時もログオンに失敗するのでパスワードも設定した。OK。

(以下、ぼやき) Home Editionだからって \WINDOWS\System32\lusrmgr.msc(ローカルユーザーとグループ) が実行できないのは非常に困る。さらにいえば今回の様な目的では、(XP Proの機能である)リモートデスクトップさえ使えれば Apacheを使う必要もなく、Apacheを使った以上のことができるのだけど。MSは Homeと Professional Editionをうまく分けてると思うよ。買う前はそんなに機能が削減されてるとは思わなかったけど Home Editionを実際使ってみると、おさえるべき所はきっちり Professional専用の機能としておさえられている。

もう少し下位のレベルでと思って IPSecについても検索したけど Home Editionは「ローカルセキュリティポリシー」が管理ツールとコンパネに含まれてないので設定できない。こんな所にも Homeの制限が。企業と違って個人ユーザーは通信内容が漏れても構わない(というか致命的ではない)よね、っていうのが Home Editionの「Home」の意味なんだと理解。

[][マンガ][コミック] 桃森 ミヨシ【ハツカレ (7) (マーガレットコミックス (4020))】 集英社

[][マンガ][コミック] 空知 英秋【銀魂 (第11巻) (ジャンプ・コミックス)】 集英社


2006年01月31日 (火)

[][][文庫] 桜庭 一樹【荒野の恋 第二部 bump of love (ファミ通文庫)】 エンターブレイン


2006年01月29日 (日)

[][][文庫] 高殿 円【ジャック・ザ・ルビー―遠征王と双刀の騎士 (角川ビーンズ文庫)】 角川書店

[][][文庫] ジョン グリシャム【スキッピングクリスマス〔文庫〕 (小学館文庫)】 小学館

[][][文庫] 京極 夏彦【嗤う伊右衛門 (中公文庫)】 中央公論新社

[][][文庫] 夢野 久作【ドグラ・マグラ (上) (角川文庫)】 角川書店

[][][文庫] 夢野 久作【ドグラ・マグラ (下) (角川文庫)】 角川書店

[][][文庫] フランツ カフカ【城 (新潮文庫)】 新潮社

[][マンガ][コミック] 河内 和泉【機工魔術士-enchanter 9 (9) (ガンガンWINGコミックス)】 スクウェア・エニックス


2006年01月27日 (金)

[][マンガ][コミック] 宮野 ともちか【ゆびさきミルクティー 6 (6) (ジェッツコミックス)】 白泉社

[][マンガ][コミック] 林家 志弦【はやて×ブレード 4 (4) (電撃コミックス)】 メディアワークス

[][マンガ][コミック] 私屋 カヲル【こどものじかん 1 (1) (アクションコミックス)】 双葉社

[][][文庫] 熊谷 雅人【ネクラ少女は黒魔法で恋をする (MF文庫J)】 メディアファクトリー


2006年01月25日 (水)

[][][文庫] 高殿 円【銃姫(6) (MF文庫J)】 メディアファクトリー

[][][文庫] 山形 石雄【戦う司書と雷の愚者 (スーパーダッシュ文庫)】 集英社

[][マンガ][コミック] 長沢 智, 今野 緒雪【マリア様がみてる 5 (5) (マーガレットコミックス)】 集英社

[][マンガ][コミック] 安藤 慈朗, かとり まさる【しおんの王 3 (3) (アフタヌーンKC)】 講談社

[][DR250R]純正部品いろいろ

  • パーツリスト
  • 右レバー
  • 右ミラー
  • 右ハンドガード
  • ドレンボルト
  • スピードメーターケーブル

2006年01月21日 (土)

[][マンガ][単行本(ソフトカバー)] 紺野 キタ【ひみつの階段 (1) (ファンタジーコミックス)】 偕成社

[][マンガ][単行本(ソフトカバー)] 紺野 キタ【ひみつの階段 (2) (ファンタジーコミックス)】 偕成社

[][][文庫] フィリップ・K. ディック【マイノリティ・リポート―ディック作品集 (ハヤカワ文庫SF)】 早川書房

[][][新書] 京極 夏彦【塗仏の宴 宴の支度 (講談社ノベルス)】 講談社

[][][文庫] 筒井 康隆【家族八景 (新潮文庫)】 新潮社

[][][文庫] 筒井 康隆【七瀬ふたたび (新潮文庫)】 新潮社

[][][文庫] ハーマン メルヴィル, 田中 西二郎, Herman Melville【白鯨 (上) (新潮文庫 (メ-2-1))】 新潮社


2006年01月20日 (金)

総合音楽サービス「au LISTEN MOBILE SERVICE」の提供開始および「CDMA 1X WIN」7機種の発売について (KDDI ニュースリリース)

上のリンク先から興味のある部分だけ抜き出した。

au携帯電話とPCで音楽の共有を可能にするPC音楽管理ソフト「au Music Port」

  • PCへのCD音源の読み込み、およびau携帯電話への転送、再生。
  • 本年4月に開設予定の「DUOMUSIC STORE」から楽曲のダウンロード、およびau携帯電話への転送・再生、着うた®設定。
  • アドレス帳、スケジュール、フォト、ムービー、Eメールなどのバックアップに対応。

CD音源が PCを経由して携帯へ、ってことで えせ着うた(mmf)、自作着うた(.amc, .3g2)の出番が無くなるのかと期待したのに、行末を読むには違うみたい。まぁ当然か。そんなことできたらパケ代も着うたの利用料も節約できてしまうもんね。

au Music Portは新機種に同梱されるらしいので、3番目のバックアップだけは MySyncを買うよりハードルが低くなって良し。Eメールも保存できるし。


2006年01月18日 (水)

[][マンガ][コミック] 林家 志弦【ストロベリーシェイクSWEET 1 (1) (IDコミックス 百合姫コミックス)】 一迅社

[][マンガ][コミック] 森永 みるく【くちびるためいきさくらいろ (IDコミックス 百合姫コミックス)】 一迅社


2006年01月17日 (火)

[SN25P] Windows XP Home Edition で セキュリティ タブを表示

Displaying The Security Tab In XP Home Edition

Microsoftのサイトから Security Configuration Manager x86(Intel) Version をダウンロード。SCESP4E.EXEをダブルクリックしてファイルを解凍、setup.infを右クリックして「インストール」。再起動したら完了。

出たよ出ましたよ、セキュリティ タブが。

これでファイルをコピーすることなく所有権を自分のものにできる(制限ユーザーは自分の所有するファイルしか自由にできないから所有者名を制限ユーザーのものにしておきたいことが時々ある)し、マイドキュメントと Documents and Settings\<ユーザー名>の下層以外の場所にプライベートフォルダを作ることもできる。

[][マンガ][コミック] 赤松 健【魔法先生ネギま! (13)】 講談社

[DR250R]スピードメーターが動かない

タイヤ側でスピードメーターケーブルが外れてる、とかだと楽なんだけど、やっぱり中でケーブルがちぎれてるのかな。

[tDiary] 新Wikiスタイル(HikiDoc):引用の中で<pre>。できるやん

20050929p02で引用の中で <pre>を使いたい言うてましたが、どうやら最初から可能だったご様子。

hikidoc.rbからの引用。

 ######################################################################
 # blockquote

 BLOCKQUOTE_RE = /^""[ \t]?/
 BLOCKQUOTES_RE = /(#{BLOCKQUOTE_RE}.*\n?)+/

 def parse_blockquote( text )
   text.gsub( BLOCKQUOTES_RE ) do |str|
     str.chomp!
     str.gsub!( BLOCKQUOTE_RE, '' )
     "\n<blockquote>\n%s\n</blockquote>\n\n" % block_parser(str)
   end
 end
  1. BLOCKQUOTES_RE(行頭が""と 1つか0個の空白・タブ文字で始まる行の連続)にマッチする文字列が見つかったら
  2. BLOCKQUOTE_RE(各行頭の ""とそれに続く 1つか0個の空白・タブ文字) を取り除いた後
  3. block_parser()を呼び
  4. その結果を <blockquote>タブで囲む。
 ######################################################################
 # block parser
 ######################################################################

 def block_parser( text )
   ret = text
   ret = parse_plugin( ret )
   ret = parse_pre( ret )
   ret = parse_comment( ret )
   ret = parse_header( ret )
   ret = parse_hrules( ret )
   ret = parse_list( ret )
   ret = parse_definition( ret )
   ret = parse_blockquote( ret )
   ret = parse_table( ret )
   ret = parse_paragraph( ret )
   ret.lstrip
 end

block_parser()は見ての通り、整形済みテキスト(pre)、見出し、リスト、引用、テーブル、段落などを解釈する。

つまり、引用の中には (<pre>も含めて) block_parserが解釈するブロック要素が全て書ける。

何故今日まで気付かなかったのかというとコレ↓

 BLOCKQUOTE_RE = /^""[ \t]?/

ドキュメントでは一般的に、「行頭に "" を付ければ引用になります」と書かれるけど、hikidoc.rbの実装では それに続く空白・タブ文字も引用を表す記号の一部として扱われている。行頭の空白は整形済みテキストを表すりっぱな Wiki記法の一部なのに。

そういうわけで

 引用の中で整形済みテキストを書くときは 行頭を「""  」(注:スペースは 2つ)で始めます。