以前、「ブログにタグクラウドを追加してみた」に書いたとおり、 rNote にタグクラウドの処理を追加したが、そのときは、 rnote.php 本体に実装して実現した。

最近、コールバックプラグインの処理を実装したので、これを使ってタグクラウドの処理もプラグイン化することにした。

rnote.php の CreateHTML() が呼ばれるタイミングで起動されるコールバックプラグインを追加し、これを "createhtml" タイプとして追加した。

このコールバックプラグインが呼ばれると、グローバル変数 $g_keyslist を、タグと参照回数の連想配列として初期化する。

一方で、スキンから呼び出される(コールバックではない)プラグインが、 $g_keyslist の内容をもとにタグクラウドを生成し出力するようにした。

今回ちょっと面白いのは、上記2つのプラグイン(コールバックプラグインとコールバックではないプラグイン)を、1つのクラスとして実装し、1つの .php ファイルの中に記述したことだ。

つまり、1つのクラスで2つの種類のプラグインを表現している。こういうこともできるのだと我ながら感心した。

この記事のリンク元 | 9 | 8 |

この記事のリンク用URL&トラックバックURL : https://red-souls.jp/ichounoki/rnote/works/software/20190815_210316931286.htm


ずいぶん前に一度、この機能を実装した記憶があるのだが、今の rNote を見る限り機能が付いていなかったので、改めて実装した。

今回は、プラグイン機能の拡張から行った。

rNote のプラグイン機能は、基本的に、 PHP で1つのクラスを作ることで行われる。そのクラスには、 exec() というメソッドを実装しておき、クラス名と同名の主ファイル名の php ファイルを plugins/ ディレクトリの中に入れておく。

そして、スキンファイルの中で、 <%=plugin func="呼び出し関数名" opt="呼び出し関数に渡すパラメータ"> タグを書き込んでおくと、その部分が表示されるときに、プラグインが呼ばれる、という作りだ。( func パラメータは無くてもいいが、その場合 exec() メソッドが呼ばれる。)

ただ、このプラグイン形式だと、スキンファイルに記述しておき、そのスキンファイルが表示されるタイミングでしか呼び出すことができない。

今回の場合、「コメントが送信された」というタイミングで、そのコメントに関する情報を管理者にメールする必要があるので、特定の動作をトリガーにして、パラメータを受け取って起動するようなプラグインである必要がある。なので、現状の「スキンに書かれ、スキンが呼ばれるタイミングで実行される」形式では要件を満たせない。

そこで、今回は、 rNote.php 本体に手を入れ、「『コメントが送信された』タイミングで呼び出されるプラグイン」というものを実装した。このように、「ある動作をトリガーとして、その動作が起きた時に呼び出されるプラグイン」のことを、「コールバックプラグイン」と呼ぶことにした。

そして、コールバックプラグインの実装方法は、 rnote_config.php の中に、

$g_strPlugin = array();

array_push($g_strPlugin, array('name' => 'cmntemail', 'instance' => null, 'func' => 'callback', 'type' => 'wbsave'));

のように、呼ばれるプラグインに関する情報をひとまとめにした要素をもつ配列 $g_strPlugin を用意し、その1要素として、 name, instance, func, type を定義し配列 g_strPlugin に追加する。ここで、 name はプラグインのクラス名、 instance は初期値 null 、 func は呼び出されるメソッド名、 type はコールバックプラグインの種類と定義した。現在は、 type は 'wbsave' (コメントが送信され保存されたタイミング)のみが実装されている。

この形式で、 email を送信する cmntemail クラスを記述し、 plugins/ ディレクトリに用意することで実現した。

何度かテストし、問題なく動作することを確認している。

この記事のリンク元 | 9 | 8 |

この記事のリンク用URL&トラックバックURL : https://red-souls.jp/ichounoki/rnote/works/software/20190813_165038581371.htm


rNote は、記事にコメントが付いた場合、有無を言わさず即時公開される。

これでいい場合は構わないのだが、公開して良いコメントかどうかを確認してからOKなら公開するようにした方がよいと思う管理者もいると思う。自分もその一人だ。コメントスパム対策にもなると思う。(コメントスパムがつくこと自体を回避はできないが、スパムだらけの記事にならないように管理することはできる。)

そこで、管理者画面に追加するタイプのプラグインとして一つ、「コメント承認」プラグインを追加した。

このプラグインの実装のために、まず rNote 本体に手を入れ、コメントの内容を保存したログファイルのフォーマットを拡張した。このログファイルは、コメントのつく先の記事1つにつき1ファイル作成され、1つのコメントが1行になるようになっている。1行の形式は、

投稿者名 [tab] mail/url [tab] 本文 [tab] 投稿日時 [\n]

となっていたので、1項目追加し、下のような形式にした。

投稿者名 [tab] mail/url [tab] 本文 [tab] 投稿日時 [tab] コメント承認フラグ[\n]

コメント承認フラグは「0:未承認, 1:承認済み」というフラグとした。

rNote に手を入れた場所はもう1箇所あって、管理者画面用の「動作設定」プラグイン ( config.php )

だ。ここに、「コメントを承認制にするかどうか」のラジオボタンを追加し、状態を保存するため、他の項目と同様に、グローバル変数の配列 $g_config[] に 'confirm_comment' というキーで値を保存するようにした。このフラグの設定状態を見て、 rNote.php 本体でコメントが送信されたときの処理に、コメント承認制であれば先程のコメント承認フラグを 0 にセットし、承認制でなければコメント承認フラグに 1 をセットしてログファイルを書き込むように動作を修正した。

ここまでの準備ができたので、いよいよコメント承認プラグインを書いた。ぷにゅさんが公開されている「Entries List Plug-in v1.01 & rNote LogViewer lot.041025」を参考に実装した。

ぷにゅさんのプラグインでは、コメントのログファイルを一覧表示し、中身を編集したり、ログファイルを削除したりできるようになっているが、自分のプラグインでは、ログファイルの一覧ではなく、コメントの一覧を表示し、コメントごとに「承認・未承認」の状態を切り替えられるリンクをつける形にした。1ページ分の表示件数は、ぷにゅさんと同じ30件にしたが、この30件はログファイルの件数なので、コメントの多く付いた記事があった場合、実際に1ページに表示される項目数は30を超える。

とりあえずこれで安心してコメント管理ができる。

この記事のリンク元 | 9 | 8 |

この記事のリンク用URL&トラックバックURL : https://red-souls.jp/ichounoki/rnote/works/software/20190813_165002332041.htm


最近 wordpress などを使った他の人のブログに共通のアイコンが使われているのに気づいた。

調べてみると、 font awesome というサイトのフリーアイコンを使っているのが分かった。

分かりやすいアイコンな気がしたので、自分のブログにも設置してみた。

まずは、ブログ左側の「コーナー」のツリー表示にフォルダアイコンを設置したかったのだが、いきなり壁にぶちあたった。 rNote はこの部分のツリー表示は ul, li などで実現しており、フォルダアイコンを表示させたい部分は ul に対するスタイルシートで list-style-type:square; を指定して「・」として表示させているのだが、 font awesome がアイコンを表示させる通常の方法はスタイルシートではなく <i> などの無効タグに class="hoge" の形でクラス要素を指定することで実現しているので、この場合、通常の方法では font awesome のアイコンが表示できないのだ。

いろいろ検索して、「FontAwesomeのiconをulやolのlist-styleに使う方法」という記事を見つけた。スタイルシートで、

li:before {

font-family: FontAwesome;

content: '\f073'; /* icon unicode */

}

のようにして li:before を定義し、アイコンフォントの文字コードを指定するという形で実現できることが分かったので、フォルダを設置することができた。

ただ、この方法だと、コード番号しか指定できないのだが、 font awesome のアイコン一覧を見ると、同じコード番号でありつつ、違うデザインのアイコンも存在している。例えば、カレンダーのアイコンである calender-alt は2種類あって、どちらもコード番号は \f073 なのだが、片方は fas(solid style) で、もう片方は far(regular style) である。 i タグを使う場合は、このスタイルを普通に記述すればよいのだが、今回のようにスタイルシートで実装しないといけない場合、 fas, far の違いを指定する方法がないので、表示させたいアイコンを指定する方法がない。これは困ったが、とりあえずフォルダアイコンについては同じコード番号のアイコンが複数あるというわけではなかったため設置できた。

その他にも、日時の表示部分に時計のアイコンなどを設置してみた。これららは i タグで実現できたので問題はなかった。

この記事のリンク元 | 9 | 8 |

この記事のリンク用URL&トラックバックURL : https://red-souls.jp/ichounoki/rnote/works/software/20190809_140605375060.htm

キーワード: font awesome icon blog parts


久しぶりに timidity を使って midi の曲を聴こうとしたら、音色が正しく鳴っていないことに気づいた。

どうも、 timidity が使っている音源ファイルである soundfont の設定が正しくないようだ。

soundfont "foo.sf2"

の様な書き方しかしていなかったが、この形だと、1つの soundfont ファイルでバンク内の全ての preset の音色を持っている場合は大丈夫だが、 soundfont によっては、特定の楽器のみの音色で構成されるものもあるし、そのような soundfont の場合、 preset の番号が 0 だったりするものもあるので、それをそのまま読み込んだだけではうまくない。必要な preset の音色だけ置き換える必要がある。

そのような場合の記述の仕方として「Timidity導入解説」などによると、

p1 %font "foo.sf2" bank p2

のような書き方があるのが分かった。 bank は soundfont 内の音色の bank 番号、 p2 は soundfont 内の音色の preset 番号、 p1 は、 timidity がその soundfont を読み込んだ際に割り当てる preset 番号。

ただ、これを設定するためには、 soundfont ファイルの中にどんな音色が用意されているかと、それらの音色に設定されている bank 番号と preset 番号を知る必要がある。

検索して、 SoundFont Librarian というツールを使えば soundfont の内部の設定を見ることができるのが分かったが、どうもこのツール、配布先が全くのバラバラで、配布されているバージョンもバラバラ、挙句にどこが開発しているのかも不明・・・という、非常に胡散臭い状態のようだ。検索してみた感じだと、随分前に E-MU Systems というサンプラーや音源、 MIDI キーボードなどを作っていたメーカーがあって、そこが作っていたようだが、10年近く前に解散して Creative Labs の一部署となってしまったようだ。なので、今ネット上で開発配布されている SoundFont Librarian は、 E-MU ではない誰かがソースをどうやったか分からないがどこからか入手して配布しているか、または、そっくりのツールを一から書き起こしたか、どちらかだと思うが、いずれにせよ、どこの誰が何をやったか分からないようなツールにはウイルスやトラップなどが仕込まれていても全然不思議ではないのでインストールするわけにはいかない。

なので、ネットで soundfont の仕様を見つけて調べて、自分でツール( sf2show )を作成した。

拡張子が .sf2 の soundfont ファイルを開くと、その内部構造を下のようにリストに表示してくれる。

sf2show

timidity を使っていて、 soundfont の内部を見て設定するためにこれを必要とする人がどれだけいるかは知らないが、一応公開しておく。 .Net を使っているので、 .NET Framework 4.6.1以降が必要。

 sf2show 1.0.0.0

各 Chank の意味などについて詳しく知りたければ、上に挙げた URL の仕様を見て欲しいが、 timidity.cfg を記述する際に必要となる soundfont 内の音色と bank 番号、 preset 番号については、 ‘pdata phdr’ Chank の行を見れば分かる。

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

キーワード: soundfont sf2 sf2show timidity