リリース中のMovableType/WordPressプラグイン一覧ページを作りました

October 28,2024 11:55 PM
Category:[自作プラグイン, 自作プラグイン]
Tag:[]
Permalink

当ブログでリリース中のMovableTypeおよびWordPressの主なプラグインについて、一覧ページを作りました。

プラグイン一覧ページ
プラグイン一覧ページ

現在掲載しているのは、販売実績のある、あるいは最近リリースした下記のプラグインです。

MovableType

WordPress

上記各プラグインのページの先頭にも一覧へのリンクを貼ってます。

Comments [0] | Trackbacks [0]

スタバにタンブラー持ち込みで安く飲める裏ワザ

October 15,2024 11:55 PM
Category:[小品文]
Tag:[Cafe]
Permalink

突然ですが皆さん、スターバックスやタリーズ、エクセルシオールといった、いわゆる「シアトル系カフェ」でタンブラーを使ったことはありますか?
私はここ2年ほど、ずっとタンブラーを使っています。

タンブラーを使い始めたきっかけは、新幹線に持ち込んだスタパのカフェを車内で盛大にひっくり返してしまったことです笑。そのとき「これからは蓋がロックできるタンブラーで持ち込むことにしよう」と心に誓い、すぐに購入しました。

そんな出来事から使い始めたタンブラー、出張や旅行はもちろんですが、次第に普段使いもするようになりました。

そうすると、こぼさない以外にもメリットがあることに気がつき、みなさんに是非知ってほしいと思い、タンブラーを使ったカフェの購入方法なども加え、本記事で紹介したいと思います。

タンブラーを使うメリットは2つ。1つは「タンブラー割り」というものがあり、タイトルに書いたとおり、スタパ・エクセルシオールでは1杯につき20円、タリーズでは30円割引になります。

もう1つはすでにお分かりかと思いますが、使い捨てのカップを使わないことによる、環境への配慮です。

カフェでのお客さんのタンブラー利用率は、おそらく1割以下ではないでしょうか。

私が注文で並んでいるときや、飲みながら店内を見回したときなど、タンブラーを持参している人やタンブラーで飲んでいる人を一度も見たことがありません。そのくらい利用率は低いと思われます。

それではタンブラーを使った具体的な注文方法を紹介します。

というほどのことではありませんが、注文するときに店員さんにタンブラーを渡せばOKです。蓋付きの場合は蓋を外した状態で渡します。

渡した際に「消毒してもいいですか?」と聞かれることが多いので、「はい」と答えましょう。会計は消毒が終わってからなので、焦らず待ちましょう。

500mlのタンブラーなら、スタバのグランデサイズまでOKです。どのサイズまで入るかはタンブラーの形状によるので、その場で店員さんに確認すると良いでしょう。トッピングなどする場合も適用可能か、確認しましょう。

受け取りは使い捨てのカップのときと同じですが、細長いタンブラーだと注ぎ口が狭いためか、外側にコーヒーの拭き残しがついていることがときどきあるので、予めナフキンを1枚持っておくと良いでしょう。

さて、私はスタバのロゴが入った、サーモス製の500ml用のタンブラーを買って使ってますが、定価5000円近くしました。

いくらタンブラー割りがあるといっても、元のタンブラー代が高いので、なかなか元が取れないのですが、私は週1~2回ほどカフェを利用しているので、この2年でほぼほぼ元は取れましたし、これからもずっと安く飲めます。

タンブラーのゴム部分はパーツとして販売されていますが、まだまだ取り替える必要はなさそうです。

タンブラーを持っていかないといけない、使い終わったら自分で洗わないといけない…といった手間もありますが、この記事を読まれた方、一度タンブラー持参でカフェに行かれてみてはいかがでしょうか。

Comments [0] | Trackbacks [0]

当プラグインのMTクラウドのPerlバージョン5.38.2対応状況

September 10,2024 11:55 PM
Category:[自作プラグイン]
Tag:[]
Permalink

当プラグインのMTクラウドのPerlバージョン5.38.2対応状況です。

1.はじめに

2024年9月4日、Movable Typeクラウド(MT7/MT8)の、Perl5.36.0からPerl5.38.2へのバージョンアップが行われました。

Movable Type クラウド版の Perl のバージョンを変更しました
Movable Type クラウド版の Perl のバージョンを変更しました

バージョンアップにあたり、考えられる影響は以下の通りです。

  • サードパーティー製プラグインおよび独自CGIスクリプトが正常に機能しなくなる

ということで、当ブログで販売している主なプラグインの動作確認状況です。

2.主なプラグインの対応状況

  • Workflow(MT7/MT8):動作確認済
  • CSVDataImExporter(MT7/MT8):動作確認済
  • PublishDraft(MT7/MT8):動作確認済
  • ListingFieldEditor(MT7/MT8):動作確認済
  • PowerListingFieldEditor(MT7/MT8):動作確認済
  • SaveWithoutRebuild(MT7/MT8):動作確認済
Comments [0] | Trackbacks [0]

Finaleで2音のトレモロを入力する方法

August 31,2024 11:55 PM
Category:[Finale]
Tag:[Finale]
Permalink

Finaleで2音のトレモロを入力する方法を紹介します。

Finaleで2音のトレモロを入力(完成イメージ)

なお、米国時間2024年8月26日、Finaleの開発/販売終了がアナウンスされました。
国内販売代理店契約の即日終了に関して

1.問題点

Finale(バージョン27)で冒頭のような2音(またはそれ以上)のトレモロを入力したいのですが、方法がわかりません。

ということで、Finaleで2音のトレモロを入力する方法を紹介します。

2、Finaleで2音のトレモロを入力する

2音のトレモロを入力するには、トレモロさせたい音符を選択。

トレモロさせたい音符を選択

メニューバーより「プラグイン」→「TG Tools」→「簡易トレモロ...」を選択。

メニュー

ダイアログが開くので、連桁(れんこう)の本数等を指定して「適用」をクリック。ここでは「2」を設定します。連桁とは連続した音符の旗をつないで記述することです。

ダイアログ

これで2音のトレモロが設定できたので、ダイアログの「閉じる」または×印をクリックして閉じます。

トレモロ設定完了

3.連桁を符尾から離す

前述の手順では連桁と符尾がつながっています。

ここではさらに冒頭の画像のように連桁を符尾を離す手順を説明します。

連桁を符尾を離したい音符を選択。

連桁を符尾を離したい音符を選択

メニューバーより「ウインドウ」→「道具箱ツール・パレット」を選択。

メニュー

右側に表示された「道具箱ツール・パレット」のアイコンより「連桁伸縮ツール」を選択。

「道具箱ツール・パレット」のアイコン

選択した音符の符尾の先端にハンドルが表示されるので、どちらかのハンドルをダブルクリック。ハンドルが表示されない場合、符尾のあたりをクリックしてみてください。

選択した音符の符尾の先端にハンドルが表示

ダイアログが開きます。デフォルトでは「8分音符」のみにチェックが入っていると思いますが「16分音符」にもチェックをいれてOKをクリック。

ダイアログ

これでハンドルをドラッグすれば連桁を伸縮できます。上下の移動はできないので、ドラッグ位置が上下にずれても問題ありません。

ハンドルをドラッグ

もう一方のハンドルもドラッグします。これで冒頭のトレモロ記号の入力が完成です。

トレモロ記号の入力が完成

なお、さきほどのダイアログで「16分音符」にチェックをいれずにハンドルを操作すると。一番上の連桁しか操作できません。

失敗例

4.連桁を符尾から一部離さない

応用ですが、前項のダイアログで「8分音符」のチェックを外し、「16分音符」と「32分音符」をチェックすれば、一番上の連桁を符尾から離さないことも可能です。

連桁を符尾から一部離さない

Comments [0] | Trackbacks [0]

セブンイレブンのネットプリント不具合でお金を多く取られた件

August 14,2024 11:55 PM
Category:[小品文]
Tag:[Blog]
Permalink

セブンイレブンのネットプリント不具合で、お金を多く取られた件の顛末です。

楽譜を印刷しようと、セブンイレブンのネットプリントアプリに、A3白黒、計21枚をに登録(下図)。

(クリックで拡大)

ファイルの詳細画面で、カラーモードは白黒に設定していることがわかります。

ネットプリントのA3白黒は、下の料金表にある通り、1枚20円です。

21枚なので合計420円ですが、お金が認識されないことも考えて、小銭で100円玉4枚に50円玉4枚と、やや多めの計600円を持ってセブンへ。

最初100円4枚を入れて、上から順番に印刷を開始すると、投入したお金の残額が早いことに途中で気づきました。

通常、1枚プリントされるごとに20円引かれていくのですが、3ファイル目か4ファイル目で残額が0になってしまったと思います。

なぜなら、プリントを実行しようとしたときに残額不足のエラーが表示されたからです。

最初に400円を投入しているので、21枚であれば、最後のファイル(計3枚)のプリント実行時まで残額不足のエラーは出ないはずです。

「おかしいな?」と思いながらも残りの50円玉も順次投入していき、5ファイル目のときに、たしか残額30円で、最後の50円を投入したと思います。

結局印刷できたのは18枚。最後の1ファイルが印刷できませんでした。

最後に領収書を印刷できるので、印刷すると「600円」と表示されていました。

投入金額は合っているのですが、それに見合う枚数がプリントされていません。

ということで、すぐに店員さんを呼びました。

私「1枚20円のネットプリントで、600円で18枚しか印刷できなかったんですが…」
店員「ちょっと別の者を呼びますのでお待ちください」

少し待って別の店員さんがきました。

私「1枚20円のネットプリントで、600円で18枚しか印刷できなかったんですが…」
店員「?」

この店員さん、店長さんかと思ったら違っていたようです。

また、私の言っていることを理解できていないのか、

店員「600円で18枚…そうですか…」

という感じで、お金を余分にとられていることをわかってもらえてないようです。

残りの1ファイルの印刷画面を見せて、

私「ほら、ネットプリントで3枚で60円なので、1枚20円ですよね?」
店員「あぁ、そうなんですか…」
私「はい、それで(600円の領収書をみせて)600円で18枚しかプリントできなかったんです。600円なら30枚プリントできるはずですよね?」

店員さん、私を疑っているようで、

店員「本当に600円いれました?」

と言われる始末。というか、領収書に600円と記載されてるんですが。

そういう押し問答が続いて、なかなかこちらの意図をくみ取ってもらえないようなので、

私「18枚だと360円なので、240円返金してもらえますか?」

と伝えましたが、お店側が客からお金を余分に取ってしまっている事を理解されてないみたいで、

私「18枚しかプリントしてないので、本来は360円のところ、600円も払ってますよね?」

とアプローチを変えて、なんとか理解してもらえたようで、

店員「本当に18枚ですか?」
私「はい」
店員「念のため数えますね」

と渡したA3用紙を1枚ずつ数えて、レジに現金を取りに行って、240円を返してもらいました。

返金はしてもらいましたし、決して店員さんが悪いわけではないのですが、

「すいませんでした」

という言葉をもらえなかったのは残念ですし、店員さんの態度も、私が悪いことをしたかのような対応で、しぶしぶ返金してくれた感じで、あの店舗にはしばらく行かないと思います。

気のせいかもしれませんが、返してもらった240円も、わざわざ汚い硬貨を選んだかのような汚れっぷりでした。

それよりも、この記事で一番伝えたいのは、セブンイレブンの関係者の方がこの記事を読まれましたら、ネットプリントシステムの不具合と思われるので、一度調査されることをお勧めします(タイトルもあえてそのようにさせてもらいました)。

600円の領収書は、終始不服そうな面持ちの店員さんに、無言で没収されました。

さて、残りの1ファイルですが、その店舗で印刷するとまた事件に巻き込まれそうなので別の店舗でプリントアウトしました。

念のため、残金が正常に表示されるか動画も撮りましたが、大丈夫でした。

みなさんも、セブンイレブンのネットプリントで余分にお金を取られていないか、気をつけてください。

Comments [0] | Trackbacks [0]

Movable Typeコンテンツタイプの「テキスト表示エリア」について

August 6,2024 11:55 PM
Category:[コンテンツタイプ]
Tag:[MovableType]
Permalink

Movable Typeコンテンツタイプの「テキスト表示エリア」について紹介します。

コンテンツタイプ作成画面の右側一番下に「テキスト表示エリア」というコンテンツフィールドがあります。

テキスト表示エリア

編集エリアにドラッグするとテキストエリアが表示されますが、「※このブロックはコメントのため、管理画面でのみ表示されます。」という注釈が記載されています。

テキスト表示エリア

ためしに「テスト」と入力して、保存します。

文字を入力して保存

コンテンツデータ編集画面を表示すると、さきほど入力した文字がそのまま表示されました。

コンテンツデータ編集画面

これでお分かりになったと思いますが、このフィールドは、コンテンツデータ編集画面に注釈をいれるためのもの、ということです。

脆弱性対応のため、残念ながらHTMLタグは使えない(そのまま表示される)ようです。

コンテンツデータ編集画面

Comments [0] | Trackbacks [0]

mysql_configのインストール

July 30,2024 11:55 PM
Category:[Linux]
Tag:[Linux]
Permalink

mysql_configのインストール方法を紹介します。

1.問題点

先日のPerl5.38.2のアップデートで、DBD-mysqlのモジュール不足が発生しました。

cpanでインストールできなかったため、アーカイブをダウンロードしてビルドしようとしたところ、下記のエラーが発生しました。

Can't exec "mysql_config": そのようなファイルやディレクトリはありません at Makefile.PL line 85.

色々調べてみて、下記のコマンドを実行してみたのですが、エラーになりました。

# dnf install mysql-community-devel
引数に一致する結果がありません: mysql-community-devel
エラー: 一致するものが見つかりません: mysql-community-devel

ということで、mysql_configのインストール方法を紹介します。

LinuxはCentOS9です。

2.mysql_configのインストール

まず、下記のコマンドでmysql_configが提供されているパッケージを探します。

# dnf provides mysql_config

私の環境では次の4つが表示されました。

# dnf provides mysql_config
メタデータの期限切れの最終確認: 0:23:38 前の 2024年06月14日 12時02分30秒 に実施しました。
mariadb-connector-c-devel-3.1.13-3.el9.i686 : Development files for mariadb-connector-c
Repo        : appstream
一致:
ファイル名    : /usr/bin/mysql_config
 
mariadb-connector-c-devel-3.1.13-3.el9.x86_64 : Development files for mariadb-connector-c
Repo        : appstream
一致:
ファイル名    : /usr/bin/mysql_config
 
mariadb-connector-c-devel-3.2.6-1.el9.i686 : Development files for mariadb-connector-c
Repo        : appstream
一致:
ファイル名    : /usr/bin/mysql_config
 
mariadb-connector-c-devel-3.2.6-1.el9.x86_64 : Development files for mariadb-connector-c
Repo        : appstream
一致:
ファイル名    : /usr/bin/mysql_config

この中から適合するパッケージをインストールします。

# dnf install mariadb-connector-c-devel-3.2.6-1.el9.x86_64

実行結果を掲載しておきます。

# dnf install mariadb-connector-c-devel-3.2.6-1.el9.x86_64
メタデータの期限切れの最終確認: 0:24:35 前の 2024年06月14日 12時02分30秒 に実施しました。
依存関係が解決しました。
====================================================================================================================================================================
 パッケージ                                         アーキテクチャー                バージョン                             リポジトリー                       サイズ
====================================================================================================================================================================
インストール:
 mariadb-connector-c-devel                          x86_64                          3.2.6-1.el9                            appstream                           58 k
依存関係のインストール:
 mariadb-connector-c                                x86_64                          3.2.6-1.el9                            appstream                          198 k
 openssl-devel                                      x86_64                          1:3.2.2-1.el9                          appstream                          4.4 M
 zlib-devel                                         x86_64                          1.2.11-41.el9                          appstream                           45 k
 
トランザクションの概要
====================================================================================================================================================================
インストール  4 パッケージ
 
ダウンロードサイズの合計: 4.7 M
インストール後のサイズ: 5.8 M
これでよろしいですか? [y/N]: y
パッケージのダウンロード:
(1/4): mariadb-connector-c-devel-3.2.6-1.el9.x86_64.rpm                                                                             443 kB/s |  58 kB     00:00
(2/4): mariadb-connector-c-3.2.6-1.el9.x86_64.rpm                                                                                   1.3 MB/s | 198 kB     00:00
(3/4): zlib-devel-1.2.11-41.el9.x86_64.rpm                                                                                          1.2 MB/s |  45 kB     00:00
(4/4): openssl-devel-3.2.2-1.el9.x86_64.rpm                                                                                         6.8 MB/s | 4.4 MB     00:00
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
合計                                                                                                                                3.0 MB/s | 4.7 MB     00:01
トランザクションを確認しています
トランザクションの確認に成功しました。
トランザクションをテストしています
トランザクションのテストに成功しました。
トランザクションを実行しています
  準備中           :                                                                                                                                            1/1
  インストール中   : zlib-devel-1.2.11-41.el9.x86_64                                                                                                            1/4
  インストール中   : openssl-devel-1:3.2.2-1.el9.x86_64                                                                                                         2/4
  インストール中   : mariadb-connector-c-3.2.6-1.el9.x86_64                                                                                                     3/4
  インストール中   : mariadb-connector-c-devel-3.2.6-1.el9.x86_64                                                                                               4/4
  scriptletの実行中: mariadb-connector-c-devel-3.2.6-1.el9.x86_64                                                                                               4/4
  検証中           : mariadb-connector-c-3.2.6-1.el9.x86_64                                                                                                     1/4
  検証中           : mariadb-connector-c-devel-3.2.6-1.el9.x86_64                                                                                               2/4
  検証中           : openssl-devel-1:3.2.2-1.el9.x86_64                                                                                                         3/4
  検証中           : zlib-devel-1.2.11-41.el9.x86_64                                                                                                            4/4
 
インストール済み:
  mariadb-connector-c-3.2.6-1.el9.x86_64    mariadb-connector-c-devel-3.2.6-1.el9.x86_64    openssl-devel-1:3.2.2-1.el9.x86_64    zlib-devel-1.2.11-41.el9.x86_64
 
完了しました!

3.参考サイト

参考サイトは下記です。ありがとうございました。

pip install mysqlclient returns OSError: mysql_config not found on CentOS9 with Python3.9


Comments [0] | Trackbacks [0]

Perl5.38.2のインストール

June 13,2024 11:55 PM
Category:[Perl]
Tag:[Linux, Perl]
Permalink

Linux環境にPerl5.38.2をインストールしてみました。

ディストリビューションはCentOS8.1です。

1.ソースのダウンロード

ソースからビルドするので、「Perl Source」のページから「perl-5.38.2.tar.gz」をクリックしてダウンロードします。

2.ビルド

ダウンロードしたアーカイブを解凍して、ディレクトリに移動します。

# tar xvf perl-5.38.2.tar.gz
# cd perl-5.38.2

configureは次のオプションを追加しています。

# sh Configure -des -Dusethreads -Dinc_version_list=none

各オプションの意味は次の通りです。

  • sh Configure:Configureをシェルで実行します。Configureはシステムに適したビルド設定を行うためのものです。
  • -d:デフォルトの設定を使用することを指示します。ユーザーからの入力を求めずに進行します。
  • -e:全ての設定を自動的に進めることを意味します。このオプションによりユーザーは一切の質問に対して「yes」と回答したことになります。
  • -s:Silentモードを意味します。通常の動作では進行状況が表示されますが、-sを使用すると出力が抑制されます。
  • -Dusethreads:Perlをスレッドサポート付きでビルドすることを指示します。これによりPerlでマルチスレッドプログラミングが可能になります。
  • -Dinc_version_list=none:Perlインタープリタが特定のバージョンディレクトリを探さないように設定します。このオプションは、異なるバージョンのPerlモジュールが混在するのを防ぐために使われます。

下記のように実行されます。少し時間がかかります。

# sh Configure -des -Dusethreads -Dinc_version_list=none
First let's make sure your kit is complete.  Checking...
Locating common programs...
 :
If you compile perl5 on a different machine or from a different object
directory, copy the Policy.sh file from this object directory to the
new one before you run Configure -- this will help you with most of
the policy defaults.
#

完了したら、makeを実行します。これもかなり時間がかかります。

# make
# make test
# make install

パスはまだ古いバージョン(5.26.3)のままです。

# perl -v
 
This is perl 5, version 26, subversion 3 (v5.26.3) built for x86_64-linux-thread-multi
(with 51 registered patches, see perl -V for more detail)

今回インストールしたPerlは、/usr/local/binにインストールされたようです。

#  which perl
/usr/local/bin/perl
# /usr/local/bin/perl -v
 
This is perl 5, version 38, subversion 2 (v5.38.2) built for x86_64-linux-thread-multi

シンボリックリンクを使って、perlのパスを新しいバージョンのものに書き換えます。古いバージョンのperlはリネームしてバックアップしておきます。

# cd /usr/bin
# ls -l perl
-rwxr-xr-x. 2 root root 14328  5月 12  2019 perl
# mv perl perl-5.26.3
# ln -s /usr/local/bin/perl perl
# ls -l perl
lrwxrwxrwx 1 root root 19  6月 13 22:30 perl -> /usr/local/bin/perl

最後にバージョン確認して、5.38.2になっていればOKです。

# perl -v
 
This is perl 5, version 38, subversion 2 (v5.38.2) built for x86_64-linux-thread-multi

3.参考サイト

参考サイトは下記です。ありがとうございました。

LinuxのPerlを最新版にアップデートするには?

Comments [0] | Trackbacks [0]

Movable Typeのブロックエディタ(MTBlockEditor)のカスタムブロックについて

June 6,2024 12:03 AM
Category:[カスタムブロック]
Tag:[MovableType, MTBlockEditor]
Permalink

Movable Typeのブロックエディタ(MTBlockEditor)のカスタムブロックの紹介です。

カスタムブロック

1.はじめに

Movable Type 8からMTBlockEditorがデフォルトのプラグインとなりました。

MTBlockEditorではデフォルトで用意されているブロックの他に、任意のブロック(カスタムブロック)を作成することができます。

ここでは、公式マニュアルに掲載されている「Markdown」ブロックを作ってみたいと思います。

参考:カスタムブロック機能を利用して高機能な Markdown を利用する

2.カスタムブロック(Markdown)の作成

左メニューより「ブロックエディタ」→「カスタムブロック」をクリック。

カスタムブロック

「新規作成」をクリック。

新規作成

  • 名前:Markdown
  • 識別子:markdown

を設定。アイコンは設定しなくて大丈夫です。

「名前」項目と「識別子」項目

「ブロック」の「+ブロックを追加」をクリック。

ブロック追加

「テキスト(複数行)」をクリック。

ブロック選択

  • クラス名:source
  • ブロック要素:P
  • フォーマット:なし

を設定または選択。「ラベル」「説明」「規定値」は設定不要です。

各項目の設定

「カスタムスクリプト」に下記の内容を設定。これがMarkdown記法に対応するためのスクリプトになります。

<script src="https://cdnjs.cloudflare.com/ajax/libs/marked/1.1.0/marked.min.js" integrity="sha256-POA+Q3FC8tyo/jZhQrw40H5mKcWAABdxNeUQ/uhIm4U=" crossorigin="anonymous"></script>
<script>
document.addEventListener("DOMContentLoaded", () => {
if (document.body.dataset.hasCompiledHtml) {
return;
}
const source = document.querySelector(".source").innerHTML;
MTBlockEditorSetCompiledHtml(marked(source));
});
</script>

「カスタムスクリプト」項目

「コンテナ要素で包む」の「編集した内容をDIV要素で囲む」と「ブロックの追加と削除」の「ブロックの追加と削除を許可する」のチェックを外します。「ブロックの追加と削除を許可する」のチェック有無の違いは3項で説明します。

「コンテナ要素で包む」項目と「ブロックの追加と削除」項目

「プレビューの表示」の「プレビューを表示する」はチェックします。チェックすることで、テキストエリアからフォーカスが外れると、プレビュー表示に切り替わりので分かりやすいと思います。

「プレビューの表示」項目

「保存」をクリックして作成完了です。

保存

3.カスタムブロック(Markdown)の利用

ここではコンテンツデータの「テキスト(複数行)」から利用します。

「フォーマット」から「ブロックエディタ」を選択。

フォーマット選択

「+ブロックを追加」をクリック。

ブロックを追加

「Markdown」を選択(「名前」で設定した「Markdown」が表示されます)。

ブロック選択

ここに表示されたアイコンは下記のSVGで生成されているようです。

data:image/svg xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'><style>text{font-family:'Arial';font-weight:bold;font-size:405px}</style><circle r='256' cx='256' cy='256' stroke='none' fill='#666'></circle><text x='256' y='274' text-anchor = 'middle' dominant-baseline = 'central' fill='white'>M</text></svg>

Markdown用のテキストエリアが表示されます。テキストエリアにフォーカスがあたったとき、「名前」で設定した「Markdown」がヘッダに表示されます。

Markdown用のテキストエリア表示

設定画面で、「ブロックの追加と削除を許可する」のチェックを入れると、次のようにMarkdownブロック内に他のブロックが追加可能になります。

Markdownブロック内に他のブロックが追加

Markdown記法で入力してみます。「*~*」がイタリック、「**~**」が太字、「***~***」がイタリック+太字です。

Markdown記法で入力

フォーカスが外れると、プレビューが表示されます。

プレビューあり

設定画面の「プレビューを表示する」のチェックを外せば、フォーカスが外れてもMarkdown記法がそのまま表示されます。

プレビューなし

Comments [0] | Trackbacks [0]

サイトの不具合について

May 25,2024 11:55 PM
Category:[サーバ]
Tag:[Blog]
Permalink

2024年5月22日からページにアクセスすると、他のページに誘導される事象が発生しました。

切り分けのため、2024年5月23日の19時頃にサイトのすべての情報を削除しましたが事象が改善せず、24日にレンタルサーバ会社に問い合わせ、原因が判明したのがその日の昼頃。

24日の午後から手作業でデータを少しずつ復元させ、現在はほぼ通常運用に戻っています。

備忘録で状況を残しておきます。

1.事象の詳細

最初に気づいたのは、トップページ(index.php)の内容が書き換えられる事象でした。

その後、.htaccessが自動生成され、いくつかのページがトップページに誘導される内容が記載されていました。

そこからさらに(トップページに埋め込まれた、暗号化されたスクリプトで)別のページにリダイレクトされていました。

それらのファイルを削除したり、再構築で上書きしても、すぐに元の内容に書き換えられてしまいます。

topコマンドやpsコマンドでプロセスを確認しても怪しいプロセスはありません。

www配下のすべてのページをバックアップ後、削除しましたが、index.phpや.htaccessが自動生成される事象が解消ぜず、rootユーザーで実行されていると推測し、レンタルサーバ会社のサポートにチャットで問い合わせ。

借りているレンタルサーバのプランには、rootに昇格する権限はありませんでした。

上記の状況を伝えたところ、rootで不審なプロセスが動作していたようで、プロセスを削除して頂き、ようやく事象が解消しました。

その後、MTを新規インストールしてブログの再構築を実施し、画像等のアセットはバックアップデータから丸ごと復元せず、ひとつずつ確認しながら戻しています。

2.原因と対処

おそらく、契約しているアカウントのログインパスワードを破られた後、rootのパスワードも破られて該当のプロセスが仕掛けられたものと思われます。

サポートから「現在動作プロセスが残っております」と言われたのですが、こちらで確認できる範囲のプロセスに該当するものがないことを伝えたところ、サポート側でプロセスを削除して頂けました。

3.今後の対応

サーバログインパスワードはかなり強固なものを設定していましたが、今後は定期的に変更したいと思います。

Comments [0] | Trackbacks [0]

Movable Typeのダッシュボードプラグインの作り方

May 15,2024 11:55 PM
Category:[ダッシュボード]
Tag:[Dashboard, MovableType, Plugin]
Permalink

Movable Typeのダッシュボードプラグインの作り方を紹介します。

1.はじめに

ダッシュボードプラグインを作る機会があったので、サンプルを使って作り方をまとめてみました。

ここでは下記のサンプルを紹介します。

ユーザーダッシュボードに「サンプルダッシュボードウィジェット」を表示します。

サンプルダッシュボードウィジェット

選択すると、下記のようにログインしたユーザー名を表示します。

サンプルダッシュボードウィジェット

×印をクリックすると、ウィジェットが削除されます。

このサンプルプラグインの構造は次の通りです。

DashboardSample
 ├ config.yaml
 ├ lib
 │ └ DashboardSample
 │   └ CMS.pm
 └ tmpl
   └ sample.tmpl

サンプルは下記のURLよりダウンロードできます。

DashboardSample.tar.gz

以下、それぞれのファイルについて解説します。

2.config.yaml

下記にサンプルを示します。

name: DashboardSample
id: DashboardSample
widgets:
  DashboardSample:
    label: サンプルダッシュボードウィジェット
#    plugin: $DashboardSample
    template: sample.tmpl
    order: 1000
    singular: 1
    set: main
    handler: $DashboardSample::DashboardSample::CMS::test
    view:
      - user

主な項目の意味は次の通りです。

  • template:ダッシュボード用テンプレートファイル名
  • order:表示順序
  • singular:単独表示("1"固定。プルダウンから選択・表示したあと、プルダウンの候補から外すためのもの)
  • set:表示領域(main:中央/sidebar:右カラム)
  • handler:ダッシュボード表示用ハンドラ名
  • view:表示種別(user:ユーザーダッシュボード/system:システム管理画面/website:親サイト/blog:子サイト)

"plugin"という項目もありますが、記述無しでも動作するようなのでコメントアウトしています。

記述する場合は、サンプルのように「id:」の値を"$"つきで記述してください。

3.sample.tmpl

下記にサンプルを示します。

<mtapp:widget
  id="DashboardSample"
  class="widget DashboardSample"
  label="サンプルダッシュボードウィジェット"
  can_close="1">
<p><mt:var name="name"></p>
</mtapp:widget>

ここではパラメータ「name」の値だけを表示するようにしています。

<p><mt:var name="name"></p>

ダッシュボードを表示したあとに×印で削除できるようにするには、mtapp:widgetタグに「can_close="1"」を付与します。

4.CMS.pm

下記にサンプルを示します。

package DashboardSample::CMS;
 
use strict;
use warnings;
 
sub test {
    my $app = shift;
    my ( $tmpl, $param ) = @_;
 
    my $user = $app->user;
}
 
1;

sample.tmplの"name"に値を渡すために、下記の1行を追加しています。

    $param->{name} = $user->nickname;
Comments [0] | Trackbacks [0]

Movable Type検索結果画面のMTIncludeタグでファイルを読み込む方法

April 18,2024 11:55 PM
Category:[テンプレートタグ]
Tag:[MovableType, MTInclude]
Permalink

Movable Type検索結果画面のMTIncludeタグでファイルを読み込む方法を紹介します。

movabletype

1.はじめに

MTで再構築するファイルの拡張子を".php"にして、そのページの中で頻繁に更新される部分を、

<?php include('foo.html'); ?>

で読み込むことで、ページ全体の再構築不要で情報を更新することができます。

ただ、検索結果ページはPerlのCGIで動作するため、PHPの方法を利用することができません。

ということで、検索結果画面のMTIncludeタグでファイルを読み込む方法を紹介します。

2.検索結果画面のMTIncludeタグでファイルを読み込む

1項のfoo.phpのパスを、仮に「/var/www/html/foo.html」とします。

このファイルを検索結果画面のMTIncludeタグで読み込むには、下記の手順が必要です。

まず、mt-config.cgiに

AllowFileInclude 1

を設定します(注:4項参照)。

次に、ファイル読み込み部分を次のようにします。

<$mt:Include file="/var/www/html/foo.html"$>

これで、検索結果画面でも情報を更新する部品を利用することができます。

3.サイトパスにテンプレートタグを使用する

2項ではファイルパスに「/var/www/html」を直接記述しましたが、テンプレートタグでサイトパスを取得するには次のように記述します。

<mt:Setvarblock name="foo"><$mt:SitePath$>/foo.html</mt:setvarblock>
<$mt:Include file="$foo"$>

1行目のMTSetVarBlockタグで、サイトパスとファイル名を文字列結合したものを、変数fooに設定します。

2行目のMTIncludeタグで、fileモディファイアに「$foo」と書くことで、変数fooの内容が展開され、

<$mt:Include file="/var/www/html/foo.html"$>

と同じ結果となります。

4.注意事項

AllowFileIncludeはセキュリティ対策として、デフォルトで無効(=0)となっています。

理由は「テンプレート編集の権限だけをもつユーザーが、ファイルシステム上の任意のファイルを読み出せるのは問題であるため」のようです。

このカスタマイズを利用する場合は、上記のセキュリティに十分配慮してください。

Comments [0] | Trackbacks [0]

ansibleのcopyモジュールでディレクトリを生成する方法

March 19,2024 12:03 AM
Category:[ansible]
Tag:[ansible]
Permalink

ansibleのcopyモジュールでディレクトリを生成する方法を紹介します。

1.問題点

ansibleのcopyモジュールでファイルをコピーしたいのですが、コピー先のディレクトリがなく、エラーになります。

試したのは下記の2種類です。

test.yml

---
- name: テスト
  copy:
    src: /tmp/hoge.txt
    dest: /tmp/aaa/bbb/hoge.txt2
    remote_src: yes

または

---
- name: テスト
  copy:
    src: /tmp/hoge.txt
    dest: /tmp/aaa/bbb
    remote_src: yes

これを実行すると、下記のように"Destination directory /tmp/aaa/bbb does not exist"というエラーになります。

$ ansible-playbook -i inventory test.yml
 
PLAY [act] ***************************************************************************************************************************************
 
TASK [Gathering Facts] ***************************************************************************************************************************
ok: [server]
 
TASK [test : test.ymlをインクルード] *************************************************************************************************************
included: /var/tmp/ansible/roles/test/tasks/test.yml for server
 
TASK [test : テスト] *****************************************************************************************************************************
fatal: [server]: FAILED! => {"changed": false, "msg": "Destination directory /tmp/aaa/bbb does not exist"}
 
TASK [test : エラーが発生したため停止] ***********************************************************************************************************
fatal: [server]: FAILED! => {"changed": false, "msg": "ロール実行中にエラー発生"}
 
PLAY RECAP ***************************************************************************************************************************************
server               : ok=2    changed=0    unreachable=0    failed=1    skipped=0    rescued=1    ignored=0

ということで、ansibleのcopyモジュールでディレクトリを生成する方法を紹介します。

2.ansibleのcopyモジュールでディレクトリを生成する

ansibleのcopyモジュールでディレクトリを生成するには、destオプションを"/"で終わらせます。

---
- name: テスト
  copy:
    src: /tmp/hoge.txt
    dest: /tmp/aaa/bbb/
    remote_src: yes

このansibleを実行すると正常にディレクトリを生成してくれます。

$ ansible-playbook -i inventory test.yml
 
PLAY [act] ***************************************************************************************************************************************
 
TASK [Gathering Facts] ***************************************************************************************************************************
ok: [server]
 
TASK [test : test.ymlをインクルード] *************************************************************************************************************
included: /var/tmp/ansible/roles/test/tasks/test.yml for server
 
TASK [test : テスト] *****************************************************************************************************************************
changed: [server]
 
PLAY RECAP ***************************************************************************************************************************************
server               : ok=3    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
Comments [0] | Trackbacks [0]

jQuery+ajaxでモーダルのコンテンツを取得する方法

March 17,2024 12:03 AM
Category:[jQuery]
Tag:[Ajax, jQuery]
Permalink

jQuery+ajaxでモーダルのコンテンツを取得する方法を紹介します。

1.はじめに

モーダル表示の使い方は、たとえば商品ページで、その商品の詳細画像を表示するといったことが多いと思います。

その場合、HTMLページ内にすべてのモーダル用コンテンツを配置して、そこから取得・表示する実装になると思います。

ですが、ページ内にモーダル用のコンテンツをすべて記述すると、場合によってはページのサイズが大きくなり、ロード時間に影響します。

また商品ページではなく、たとえばモーダルをブログの記事ページとして表示させたい場合、上記の方法では大量のコンテンツをページ内に書き出す必要がありますが、現実的ではありません。

ということで、本記事ではモーダル用コンテンツをjQuery+ajaxで取得し、さらの前後リンクのコンテンツもjQuery+ajaxで取得する方法を紹介します。

2.サンプル

下記のリンクをクリックするとサンプルページに遷移します。

モーダルサンプル

テキスト途中にある「ひらく」をクリックするとモーダルが表示され、前後リンクをクリックするとコンテンツをajaxで読み出して表示を切り替えます。

「あああ」のテキストを大量に挿入しているのは、モーダル表示後にスクロールしてもモーダルが移動しないことを示すためのものです。

サンプルはモーダルコンテンツの取得と前後リンクだけに着目しているので、CSSは最小限です。またアニメーションや「閉じる」ボタンの実装もありません。

以下、ソースとjQueryの解説です。

3.ソース

<meta charset="UTF-8" />
<style>
#modal {
    display: block;
    position: fixed;
    opacity: 1;
    z-index: 11000;
    left: 45%;
    margin-left: -77px;
    top: 100px;
}
#modal_content {
    border: 1px solid #000000;
    padding: 30px;
}
#left {
  position: absolute;
  top: 100px;
  left: -170px;
}
#right {
  position: absolute;
  top: 100px;
  right: -170px;
}
</style>
<script src="https://code.jquery.com/jquery-2.2.4.min.js"></script>
<script>
$(function(){
    $(".open_modal").on('click', function(){
        var url = $(this).attr('data-url');
        $.ajax({
            type: "POST",
            url: url,
            dataType: "html"
        }).done(function(data) {
            let main = $($.parseHTML(data)).filter('#main').html();
            let prev = $($.parseHTML(data)).filter('#previous').text();
            let next = $($.parseHTML(data)).filter('#next').text();
 
            $('#modal_content').html(main);
 
            if ( prev ) {
               $('#left').attr('data-url', prev);
               $('#left').css('display', 'block');
            } else {
               $('#left').css('display', 'none');
            }
            if ( next ) {
               $('#right').attr('data-url', next);
               $('#right').css('display', 'block');
            } else {
               $('#right').css('display', 'none');
            }
 
            $('#modal').css('display', 'block');
        });
    });
});
</script>
 
r />あああ</p>
<p>あああ<br />あああ<br />あああ<br />あああ<br />あああ<br />あああ<br />あああ<br />あああ<br />あああ<b
r />あああ</p>
<p>あああ<br />あああ<br />あああ<br />あああ<br />あああ<br />あああ<br />あああ<br />あああ<br />あああ<b
r />あああ</p>
<p>あああ<br />あああ<br />あああ<br />あああ<br />あああ<br />あああ<br />あああ<br />あああ<br />あああ<b
r />あああ</p>
 
<div class="open_modal" data-url="https://www.koikikukan.com/samples/20240313/test1.html">ひらく</div>
 
r />あああ</p>
<p>あああ<br />あああ<br />あああ<br />あああ<br />あああ<br />あああ<br />あああ<br />あああ<br />あああ<b
r />あああ</p>
<p>あああ<br />あああ<br />あああ<br />あああ<br />あああ<br />あああ<br />あああ<br />あああ<br />あああ<b
r />あああ</p>
<p>あああ<br />あああ<br />あああ<br />あああ<br />あああ<br />あああ<br />あああ<br />あああ<br />あああ<b
r />あああ</p>
 
  <div id="modal" style="display:none;">
    <div class="open_modal" id="left" data-url=""><</div>
    <div class="open_modal" id="right" data-url="">></div>
    <div id="modal_content"></div>
  </div>

4.解説

「ひらく」のclass属性"open_modal"をclickイベントで待ち合わせます。

<div class="open_modal" data-url="https://www.koikikukan.com/samples/20240313/test1.html">ひらく</div>
 :
<script>
$(function(){
    $(".open_modal").on('click', function(){

クリックされると要素内のdata-url属性値に設定したURLをattrメソッドで取得します。

        var url = $(this).attr('data-url');

data-urlの値は下記のdata()でも取得できますが、この方法ではDOMのキャッシュが誤って取得されてしまうため、この記事の執筆時点ではdata()は絶対に使わないでください(この事象で2日ほど悩みました)。

        var url = $(this).data('url');

取得したURLでコンテンツをajaxで取得します。

        $.ajax({
            type: "POST",
            url: url,
            dataType: "html"

$.ajax以外に$getでも取得可能です。

なお非同期による取得ではキャッシュが取得されてしまうこともあるので、POSTメソッドを使用する、cacheオプションをfalseにする等の対処を行ってください。

取得したコンテンツをそのままHTMLに展開できないケースを考慮して、部分取得を行います。

ここではコンテンツ部分と前後リンク部分をparseHTML()とfilter()を使います。この方法がベストプラクティスと思われます。

        }).done(function(data) {
            let main = $($.parseHTML(data)).filter('#main').html();
            let prev = $($.parseHTML(data)).filter('#previous').text();
            let next = $($.parseHTML(data)).filter('#next').text();

取得したHTMLをモーダルに反映します。

            $('#modal_content').html(main);

URLを前後リンクに反映させます。このときも前述と同様の理由でdata()ではなく、attr()を使用してください。リンクがない場合は非表示にしています。

            if ( prev ) {
               $('#left').attr('data-url', prev);
               $('#left').css('display', 'block');
            } else {
               $('#left').css('display', 'none');
            }
            if ( next ) {
               $('#right').attr('data-url', next);
               $('#right').css('display', 'block');
            } else {
               $('#right').css('display', 'none');
            }

すべての設定が終わったらdisplayプロパティを使ってモーダル全体を表示します。

           $('#modal').css('display', 'block');
Comments [0] | Trackbacks [0]

ansibleでフィンガープリントを表示させない方法

March 12,2024 11:55 PM
Category:[ansible]
Tag:[ansible]
Permalink

ansibleでフィンガープリントを表示させない方法を紹介します。

1.問題点

ansibleでログイン経験がないサーバにログインをすると、下記のような「フィンガープリント」が表示されます。

The authenticity of host '[127.0.0.1]:22 ([127.0.0.1]:22)' can't be established.
RSA key fingerprint is SHA256:1pOx1qnpCf9UfJQPVaMRfJV/6LZkHWQXljHwwYGlN1g.
Are you sure you want to continue connecting (yes/no/[fingerprint])?

ansible実行時にフィンガープリントを表示させないのですが、方法がわかりません。

ということで、ansibleでフィンガープリントを表示させない方法を紹介します。

2.ansibleでフィンガープリントを表示させない

ansibleでフィンガープリントを表示させないようにするには、ansible.cfgに下記の設定を追加します。

[ssh_connection]
ssh_args = '-o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null'

オプションの意味は次の通りです。

  • ControlMaster=auto:sshのセッションが存在するときにそのセッションを再利用する仕組み
  • ControlPersist=60s:ControlMasterをバックグランドにまわしてくれる機能
  • StrictHostKeyChecking=no:ホストの~/.ssh/known_hostsに存在しないときに確認なしに接続し、フィンガープリントは確認なしにknown_hostsに記録されます
  • UserKnownHostsFile=/dev/null:ホストの~/.ssh/known_hostsを常に空(/dev/null)にすることで、サーバ交換等でフィンガープリントが変わったときにエラーとなってしまうのを回避します
Comments [0] | Trackbacks [0]
 1  |  2  |  3  |  4  |  5  | All pages