BlogWrite と mt_convert_breaks 2005-08-27 (土) 00:00:00+09:00

ソフトウェア

しばらく静かといいつつナニなんだが、一件やっておかないといけなかった修正をした。

metaWeblog.newPost, editPost で mt_convert_breaks が 1/convert_breaks だった場合に、改行コードを p タグの組み合わせに変換するようにした。

それで気づいたが BlogWrite で本文を入力し自動改行にチェックを入れてみたところ色々と不思議な動作をする。

  1. 本文を手入力して、新規投稿のときチェックを入れて送信→「投稿&公開」ボタンを押した瞬間にチェックが自動で外れ、 mt_convert_breaks == '0' で送られる。
  2. 本文をテキストエディタからペーストして新規投稿として送信→ mt_convert_breaks == '1' で送られるが、 <br /> が付加された本文のままで送信するので、結果的に br タグの上に更に p タグが付いてしまう。
  3. 編集して再投稿するときチェックを入れて送信→ mt_convert_breaks == '1' で送られるが、 <p></p> が付加された本文のままで送信するので、結果的に p タグが重ねがけされてしまう。

1.に関しては、かならず自動改行OFFでしか送られないようにブロックしているようだ。本文入力中に既に p タグが入力されているから自動改行する必要なしとの判断をしているのだと思う。

2.に関しては、テキストエディタから本文に貼り付けたとき、連続して何か書かれている行末には <br /> が自動挿入され、段落間は p タグが自動挿入される(賢い!)のだが、その状態で自動改行オンにして新規投稿すると、こちらはなぜか強制OFFしないでそのまま送ってしまうので、結果的に改行が二重に効いてしまい間延びした文書になってしまう。既に改行のための処理をしてあるのだから、1.と仕様を合わせて自動改行をOFFにすべきではないか?

3.に関しては、既に投稿済みの文書なので、改行の処理は済んでいると思われるのに、自動改行ONのままで送信するので確実に二重に改行処理がほどこされてしまう。

検証して思ったが BlogWrite のように WYSIWYG 処理の都合上、編集画面上改行されているところは改行用のタグが挿入されているツールの場合、1.から3.いずれの場合も、自動改行は強制的にOFFのはずだ。「自動改行=改行コードを改行に相当するタグに置き換える」処理の意味が成立しないからだ。

もし自動改行ONのモードをもたせるとしたら、手入力で改行した位置と、エディタなどから貼り付けたテキストの改行の位置を内部で保持しておき、送信時にそれらを改行コードとして送信する必要がある。ただそれだと、 html とかを貼り付けられた場合には、タグを解析してどこが改行や段落なのかを把握する必要が生じる。解析して改行を管理するか、常に自動改行OFFか、どちらかに統一が必要な気がする。

[コメントの受付は終了しています ]
この記事のリンク元 | 1 | 1 | 1 |

キーワード: BlogWrite mt_convert_breaks


文字列を1文字ずつみて ACSIIコードを16進表示するスクリプトを PHP で書いた。

side bar に「WEPキー作成補助」として追加した。

単純なものだが WEP キーを無線ルータに設定するとき重宝しそうだ。客先で時間がおしてくると、文字列→16進を紙で照合するのも大変だし間違いが生じそうだからだ。

核の部分はこれだけ。

for ($i = 0; $i < strlen($str); $i++) {
print strtolower(bin2hex($str[$i]));//または strtoupper(...)。
}

それにしても、製作の過程で検算のために ASCII コード表など拝見したが、なつかしい。自分がマイコンに触れた頃は、グラフィック画面などなく、文字コードといえばコレのJIS拡張版(半角カナ等付き)もう少し正確にいうとメーカー独自のセミグラフィックコード(≒絵文字)の入ったコード表が唯一全てだった。今はややこしい…。


以前、既存のカテゴリー分けに左右されず、「重要な記事の一覧」のようなカテゴリーが実現できないか考えたことがあった。

あのときは rNote の投稿記事ファイルの取り扱いに、シンボリックリンクのような機構を追加することで、新規に追加した「重要な記事の一覧」カテゴリーから既存カテゴリーの記事を参照するような構造で実現しようと考えた。

その後考え方がより一般化されて、記事本体に、その記事の属性を表す文字列の集合を保持するタグを追加しておき、その属性とカテゴリーの対応表を作ってやり、本体はその対応に応じてカテゴリーごとの記事への閲覧機能を提供するようにすればよいのではないかと考えた。

例えば:
・ある投稿記事の属性キータグの内容:漫画,美少女,パンヤ,ゲーム
・blogのもつカテゴリー:漫画、ゲーム、健康、アウトドア
・カテゴリーごとの、閲覧対象となる属性:漫画=漫画、ゲーム=ゲーム,パンヤ、健康=健康,健康法,体操,薬、アウトドア=アウトドア
だった場合は、その blog の漫画カテゴリーおよびゲームカテゴリにて、その記事が閲覧可能となる…という寸法だ。

そこまで考えて、そこで放置した。というのも、それはまさに DB の導入がうってつけの事例だと気づいたからだ。記事ごとの属性文字列を DB で管理し SQL で検索する形になろう。rNote は DB を使っていないので、これの実現は保留した。(しかし最近、 DB 無しでも静的にキャッシュ生成するときに同等の処理をしてやれば実現できるんだろうなと思いつつ…。実現するといいなぁ。)

前置きが長くなったが今回は、 blog 自体の記事属性ごとのカテゴライズの話ではなく、外部に記事の情報を伝えるためのカテゴライズに、同じ考えが応用できると気づいたという話だ。

ちょうどタイミングよく、亜細亜ノ蛾さんの「ブログの記事にタグを付ける利点と方法」を発見した。どうやら、同じようなことはみな考えるらしい。

同記事を参考に、TechnoratiTechnorati: Tags に対応するように実装内容を考えてみた。

・記事にタグ <Keys></Keys> を追加する。
・同タグの内容は、タグの埋め込まれた記事のもつ属性を表す文字列の集合とする。区切り文字は半角のカンマ ( ',' ) とする。
・rNote 本体は、投稿記事の表示にあたって、同タグに列挙された属性の数だけ、 Technorati: Tags 形式のタグに順番に置き換える。

本体に手を入れないようにスキンでとりあえず実装したみた。(抜粋)

<div class="text">
<%=$Text%>
</div>
<%=$WriteBack%>
<if def_tag="Keys">
<div class="keys">
この記事の属性キー
<?php
$string = '<%=$Keys%>';
$tkn = strtok($string,",");
while($tkn) {
print "[ <a href=\"http://technorati.com/tags/".$tkn."\" rel=\"tag\">".$tkn."</a> ]";
$tkn = strtok(",");
}
?>
</div>
</if>
</div>
しかしこのままでは、属性が複数の場合に対応できない。スキンの中に php を書いて実現できそうだが方法がまだわからないのでいったん保留。やり方は他にもあるかも知れない。rinn@rNote 掲示板で php 内の変数に記事のタグの値を受け渡すやり方を教えていただけたので、上のスキンの記述を修正してあります。これで複数キー列挙に対応できました。(感謝~)

自分がどのようなカテゴリーの情報を発信しているかを相手に適切に伝えるというのは確かに有効な手段だと思う。ただ、その仕組みは標準化されていないようだから Technorati の実装だけでなく色々出てくるものに対応できるように…と考えると、やはり上で考えたように「属性キー」という上位のレベルで情報を保持しておき、下位の個々の実装に対する仕組みは適宜追加・置換して組み込んでやれる体勢にしておくのが良さげな気がした。

[コメントの受付は終了しています ]
1: sabakan (06/25 22:32)
どうも、はじめまして。
鯖Memoの運営をしているsabakanです。
コメント有難う御座いました。
御言葉に甘えて冬星さんのアイディアを流用させて戴きました :-)
2: 冬星 (06/27 05:30)
こちらこそありがたく。逆に参考にさせて頂く事も。
1エントリーが複数属性を主張するのは私的には大いに有りだと思いますが、Technoratiで1エントリーが複数のタグをもつことを考慮しているかイマイチわからずです。複数タグを埋めた記事の更新ping打ったら1個目のタグだけエントリーされるのかも知れませんが…。
この記事のリンク元 | 6 | 3 | 3 | 2 | 1 |

しばらく前から skype 1.2.0.48 がjunk になり下っている。

音が小さすぎるのだ。

自分の声が相手にとって小さすぎ、相手の声も自分にとって小さすぎるという状態だ。

Eriane さんの blog などからたどって、 skype 公式サイトのフォーラムの投稿をみたところ、以下が判った。

1.同障害は、1.2.0.37 以前から発生している。
2.修正方法として、1.2.0.37 以前の版を使っている場合:
2.1. 1.2.0.37 or newer にアップデートして、最低1回起動してログインする。
2.2. 'Documents and settings/(Your profile name)/Application data/Skype/(Skype User name)/' にある config.xml, shared.xml(もしあれば…という意味だろう。) を削除する。
2.3. config.xml をエディタで開き、以下のように(無ければ追加)してやる。
|<Call>
|<AGC>1</AGC>
|<General>
|<AEC>1</AEC>
|<AGC>1</AGC>
2.4.ただし、これで skype を再起動して音声に変化がなかったら AGC ( Automatic Gain Control ) を無効にする。「ノートPCではほとんどの場合 AGC は機能しないし、ヘッドセットを使っている場合不要だ。」と gerhard33628 が言っている。この場合上記の修正内容は aec=1, agc=0 になる。(当たり前。) xml の修正時には「空白を適切にあけるように注意。」という意味のことも gerhard33628 は書いている。xml をエディタで開いたらわかるがインデントの空白のことだろうか。インデントなんてどうでもいいんじゃないの?
2.5. skype を再起動する。
2.6. ただし XP SP2 を使用している場合 tcpip.sys のコネクション数の最大値が 10 に制限されてしまっているので、これに patch をあてろ、と言っている。張られているリンク先はもう消されているので google で検索したら、あちこちで情報や修正済みファイルが見つかったが、情報が乗っているバージョンが 5.1.2600.2505 ばかりで、古くて使えない。うちの tcpip.sys の版は 5.1.2600.2631 (xpsp_sp2_gdr.050313-1526) になっている。1箇所だけ同じ版の修正済みファイルがあがっているところがあったが、そこのは xpsp_sp2.050313-1526 だった。つまりブランチが違う tcpip.sys なのでバイナリを置き換えるのが危険で使用できなかった。

上の投稿の後に、うちで入れている 1.2.0.48 が出てからの公式フォーラムに上がったの質問(音声が数秒間延びする障害)でも、同様に tcpip.sys に制限解除のパッチを自力であてればなおる、と回答がよせられている。

2.3 まで作業しておいた。残念だが tcpip.sys を逆アセンブルしてコードを把握しないことには patch の当てようがないので、当面 skype の fix 待ちか。参照記事の原投稿者が「新しい版にしたら、なんでこんなことをユーザー側に強いるようになったの?理解できないよ」と言っていたのが 2.0.37 より古い版でのことなので長期間そのままの障害のようだ。治す気がないようなら残念ながら MSN Messenger に戻さないといけないな。音質が段違いなので skype でいきたいんだがなぁ…。

[コメントの受付は終了しています ]
1: 冬星 (05/16 20:04) (05/17 05:04)
2.4. まで作業(agc=0)。加えて:
2.7. 255 を config.xml に記述。
2.8 xkype を起動してGUI上からオプション設定状況を確認。 agc=0にも関わらずなぜか「音量の自動調整」にチェックが入っているので、チェックを外す。
以上で、音量の問題に関しては解決した。
2: ice (06/02 06:37) (06/02 15:37)
解決してそうですが↓パッチはtcpip.sys(5.1.2600.2631)に対応しているようです。
http://www.lvllord.de/
3: 冬星 (06/04 18:17) (06/05 03:17)
はじめまして。
確かに音量の問題は解決しておりましたが、ご紹介のツールを試したところ、どうやらパッチ箇所の自動認識に成功したようです。
iceさん情報ありがとうございます。

snort with mysql と ACID 2005-04-24 (日) 16:08:34+09:00

ソフトウェア

対象 OS は CentOS4 。

snort.org から snort-2.3.2 の tar ball をダウンロードしてビルド。

# ./configure --with-mysql=yes
# make; make install

当初 snort.org の download から snort , snort-mysql の rpm バイナリをインストールしてみたのだが、原因不明で snort から mysql へのレコード追加など DB アクセスがまったくされないという症状が発生し、設定上何の問題もないにも関わらず解消しなかった。 ML の記事を見つけたが、同様の構成で同様の結末になり解決していないようだ。 tar ball からソースをビルドして全く同じ設定にしたところ、何の問題もなくサクサク動作した。

ACID をインストール。GD , ADOdb, JpGraph など必要なモジュールがインストールされていなければしておく。

ACID 設定の注意点:acid_conf.php の $db_connect_method を 2 (normal connection) に変更する。初期設定の persistent connection だと、ブラウザで更新するたびに mysql への接続スレッドが1つ増えブラウザを閉じても永続的に残り続ける。何のためにこんなモードが初期設定されているのか全くわからないのだが、この設定のままだとリソースを圧迫して最悪システムダウンを招く原因となるので必ず変更しよう。

snort と ACID のインストールについては @IT の「Snortでつくる不正侵入検知システム」と、「とりあえず動く MySQL + Snort+ ACID(BASE)メモ」が参考になった。

snort の侵入検知ルールは *.rules という名前のファイルで管理されているが、これの最新版を入手したければ snort.org で Regist ( 無料 ) または Subscribe ( 有料 ) が必要となる。 Regist すると、最新ルールを入手できる URL が手に入る。

ルールの更新、 snort.conf への反映などの処理は oinkmaster が便利だ。grin 氏の blog記事、情報が古いが、日本 snort ユーザー会の「oinkmaster を使う ~ 楽々簡単ルールファイルメンテナンス ~」が参考になった。