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


カレントディレクトリから再帰的に下位の全てのディレクトリをたどって、検索したいことがないだろうか。

これって、ぼくは頻繁に使いたくなるのだが、なぜか解説しているサイトがほとんど見つからなかった。

Grep で特定の拡張子のファイルのみ対象・除外する」の説明を見て、

$ grep -r 検索パターン --include='*.foo'

とすると、拡張子 "foo" のファイルのみ検索対象として、パターンを検索できるのが分かった。

それでも普段ついつい、

$ grep -r 検索パターン *.foo

としてしまう。

他のコマンドでは、指定ファイルのみ対象にしたいとき、このように指定するからだ。

例えば ls の場合、

$ ls *.c

とすると、拡張子が ".c" のファイルのみの一覧を返してくれるのだ。

どうしてこの形式で統一して、 grep でも指定拡張子のみからの検索ができるようにならないのだろう。面倒だ。

・・・と思ったのだが、多分これって、上の "*.c" という指定の結果が展開されるのが、「指定した1つのディレクトリのファイルだけ」だからではないか。

つまり、動作としては、シェル上でコマンドを入力し、その中に、ワイルドカードを使ったファイル名の指定があった場合、そのパターンにマッチするファイル名がシェルによって全て展開され、コマンドに渡される。ただし、当然だが、それは指定した1つのディレクトリのみが対象であり、複数のディレクトリを1つのワイルドカードで指定する方法はない、と。

例えば、 grep -r "foo" ~/bar/baz/*.sh は、 ~/bar/baz/ ディレクトリにある "*.sh" というパターンにマッチするファイルを対象として検索してくれる。ただし、 -r を指定していることの意味はなくなってしまい、 ~/bar/baz/ の下にディレクトリがあっても、それらは検索対象とならない。なぜなら、シェルが ~/bar/baz/*.sh を展開しファイルの一覧をコマンドに渡す結果、対象がそのファイルのあるディレクトリのみに限定されてしまうからだ。

また、 grep -r "foo" ~/bar/*/*.sh などとしてみても、それは ~/bar/ とその下の全てのディレクトリを対象とする、という意味にはならない。

ここまで検証してみて思ったのだが、 find コマンドの場合、

$ find /home/ -name "*.c"

のようにしてやると、指定のディレクトリ /home/ とその下の全てのディレクトリを対象として、 "*.c" というパターンにマッチするファイル名を全て検索してくれる。

grep の場合も、同様に第1オプションで検索を開始するディレクトリを指定するという方法であれば、現在の「 -r 指定により下位のディレクトリも検索できるが、『カレントディレクトリから下位』としか指定できない」という問題も解決できるのだが、どうだろうか。

他の方法としては、

$ sudo cat `sudo find /home/ -name *.c` | grep "foo"

のようにすることで、指定のディレクトリ以下にある指定の拡張子のファイルのみを対象として grep で検索ができる。

さらに他の方法として、

コマンド find ファイル名・タイムスタンプ・ファイルサイズなどを元に、ファイル・ディレクトリを検索する。」によると、

$ grep "foo" `find /home/ -name "*.c"`

のようにすることでも、指定のディレクトリ以下にある指定の拡張子のファイルのみを対象として grep で検索ができる。


ベーシック認証の設置方法 2019-08-10 (土) 11:13:52+09:00

メモ

ネットで検索すると .htaccess と .htpasswd というファイルを作るという説明が多数あった。

まず .htaccess について。

いきなり、認証をかけたい url に .htaccess を用意して、

    AuthType Basic

AuthName "Input your ID and Password."

AuthUserFile /url/.htpasswd

require valid-user

のように書けばよい、と書いてあるサイトがあるが、間違いだ。

ベーシック認証を許可するには、ベーシック認証を実行したい url で AuthType, AutoName, Require, AuthUserFile などの認証処理に必要なディレクティブが許可されていなければいけないのだ。

その方法は2つある。

1つ目は、上記の通り .htaccess を用意する方法だが、その url でベーシック認証に必要なディレクトリ群を使用許可していなければいけないので、 httpd.conf (以前書いた通り ubuntu の apace2 では apache2.conf)にて、

<Directory "/設定したい url /">

AllowOverride AuthConfig

</Directory>

のようにして、ベーシック認証に必要なディレクティブの実行を許可しておく必要がある。

<Directory "/設定したい url /">

AllowOverride None

</Directory>

などとなっている場合もあるので、 httpd.conf ( apache2.conf ) をよく見て修正する必要がある。

2つ目は、 httpd.conf ( apache2.conf ) に直接、

<Directory /ベーシック認証したいurl/>

AuthType Basic

AuthName "Auth"

AuthUserFile .htpasswd

Require valid-user

</Directory>

のように記述する方法だ。

これらの方法で、ベーシック認証を行いたい url での認証許可や認証に使うファイルを指定しておく。

次は .htpasswd についてだ。

多くのサイトでの .htpasswd の作り方の紹介内容が問題だ。多くのサイトが、自分のページに、「暗号化されたパスワード文字列を生成するツール」を用意していて、それを使って作るように書いてある。

それは、あぶなくて使えない。

ネットのセキュリティを構築するためのパスワードなのに、どこの誰かも分からないサイトに、大事なユーザ名とパスワードを渡してしまえば、暗号化されたパスワードまで知られてしまう。

セキュリティはゼロになる。

暗号化されたパスワードは、自分で作れる。

apache2 のパッケージの中に htpasswd というコマンドがあるので、それで作るとよい。

ubuntu の場合、htpasswd コマンドは apache2-utils パッケージの中に含まれていて、 /usr/bin/ にインストールされる。

使い方は、「ApacheでBasic認証をするhtpasswdのコマンド」にも書かれているが、こちらの解説はユーザ名を指定して .htpasswd ファイルを作るとしか書かれていないので不十分である。

参考サイトに書かれているように

htpasswd -c ファイル名 ユーザ名

と入力したらどうなるかというと、そのユーザ名のためのパスワードを聞かれる。そして、決めたパスワードを入力すると、指定したファイル名でベーシック認証用のファイル(通常は .htpasswd )が作成される。

htpasswd -bc ファイル名 ユーザ名 パスワード

とすると、パスワードまで指定してコマンドを実行し、指定のファイル名でベーシック認証用のファイルを作成できる。

より詳しい使い方は htpasswd --help で自分で確かめてほしい。

おまけ:

アクセス制限ベーシック認証 ~パスワードでページを守ろう~」では、 perl のスクリプトでパスワードの暗号化を行う例が示されている。


最近 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


Libre Office で縦中横は今も無理 2019-08-08 (木) 09:16:47+09:00

メモ

昔から Libre Office では懸案の、縦書き文書を作ったときの動作をひさしぶりに確かめてみた。Libre Office Writer のバージョンは 6.2.5.2 。

縦書き文章中の横文字表示、Libreoffice(Writer) と MS-Office(Word)」を参考に、記事の通りに縦中横を試してみた。

記事と同じように、全て全角で「平成30年」と縦書き文書を打ち込み、「30」を選択し、「文字>位置>回転/倍率」を「90度」にしたところ、用紙の左側が上となるよう3と0がそれぞれ90度左に回転した状態で左右に並び、左側に3、右側に0が表示される状態になった。参考記事の結果と似ているが、文字が左に90度回転している点が異なる。

動作としては、私の結果の方が正しい気がする(表記通りに文字が90度回転したので)が、これだと縦中横としてはダメだ。推測だが、参考記事が書かれた時点の Libre Office では、何らかの実装バグがあり、その結果として「たまたまうまくいく」ように見える状態だったのだろうと思う。

「文字>位置>回転/倍率」は、本来縦中横としての機能ではないので仕方のない結果だと思うが、やはりというか、未だに縦書き文書については懸案のままのようだ。

実は、参考記事の方法とは異なるのだが、「平成30年」の「30」だけを半角文字で入力すると、「30」が用紙の右を上として、全角文字より右に90度回転した状態で上に3、下に0が表示される。この状態の半角の「30」に対して同じ処理を行うと、左に90度回転するので、縦中横が実現するような結果になる。ただしこの方法だと数字は半角でなければならないのと、表示される位置がどうも微妙に右にずれていてかっこうが悪いのだが、それはなおせないようだ。

結果をまとめると、全角・半角関わらず縦中横を実現することは、現状できないし、半角でも位置がずれる。

縦中横を実現するためには、縦中横専用の機能を実装する必要がある、ということだ。

この記事のリンク元 | 15 | 12 | 8 | 5 | 3 | 1 | 1 | 1 |

この記事のリンク用URL&トラックバックURL : https://red-souls.jp/ichounoki/rnote/memo/20190808_091647231519.htm

キーワード: Libre Office Writer 縦中横