Execlでファイルを共有する方法
Execlでファイルを共有する方法を紹介します。
1.問題点
Execlの新しいバージョンでは「共有」メニューで既存機能の「ファイルの共有」が行えなくなりました(One Drive上での共有に変更)。
ということで、Execlで既存機能のファイル共有をする方法を紹介します。
2.Execlで既存機能のファイル共有をする
まず前準備として、クイックアクセスツールバーに 既存機能の「共有ブック」ボタンを追加します。
「ファイル」→「オプション」をクリック。「オプション」が表示されていない場合は「その他」→「オプション」をクリック。
「クイック アクセス ツール バー」をクリック。
「コマンドの選択」で一覧を開き、「すべてのコマンド」 を選択。
「ブックの共有 (レガシー)」を選択し、「追加」 をクリック。
「変更履歴の記録 (レガシー)」を選択し、「追加」 をクリック。
「共有の保護 (レガシー)」を選択し、「追加」 をクリック。
「ブックの比較と反映」を選択し、「追加」 をクリック。
「OK」 をクリック。
これでExcelのウィンドウの上部に4つの新しいボタンが表示されます(赤枠は「ブックの共有」ボタンで、その右隣に残りのボタン)。
「ブックの共有」ボタンをクリックすれば既存機能の共有画面が表示されるので、チェックボックスをチェックして「OK」をクリックすればファイルが共有されます。
共有の解除は、チェックボックスを外すか、「校閲」→「ブックの共有を解除」をクリックします。
3.参考サイト
旧バージョンのMTでPerl5.26(Perl5.24以降)に対応する方法
旧バージョンのMTでPerl5.26(Perl5.24以降)に対応する方法を紹介します。
一部MTQで私が回答したものですが、こちらにまとめておきます。
1.問題点
旧バージョンのMT(ここではMT5.2)をPerl5.26の環境で実行すると、
Unescaped left brace in regex is illegal here in regex; marked by <-- HERE in m/%s/
それから、
Got an error: \C no longer supported in regex; marked by <-- HERE in m/(\ <-- HERE C)/
というエラーが発生するようです。
2.原因
Perl公式マニュアルに下記の説明がありましたので引用します。
まず5.26.1の記載です。先頭の(F)は「致命的なエラー」を示します。
Unescaped left brace in regex is illegal here in regex; marked by <-- HERE in m/%s/
(F) 正規表現中で リテラルな "{" 文字 (U+007B LEFT CURLY BRACKET) にマッチングしたいときに 覚えておくべき単純な規則は、何らかの方法で それぞれのリテラルな実体をエスケープすることです。 一般的に一番簡単なのは、"\{" のように逆スラッシュを前置するか、 かっこでかこむ ("[{]") ことです。. パターン区切り文字も中かっこの場合、マッチングする右中かっこ ("}") も、パーサーの混乱を避けるためにエスケープするべきです; 例えば:
qr{abc\{def\}ghi}
リテラルな "{" 文字にエスケープを強制することにより、 将来のリリースで様々な方法で Perl 言語を拡張できるようになります。 既存のコードを不必要に壊すことを避けるために、 拡張が "{" をリテラルとして使うことと競合しそうにない文脈では 制限は強制されません。
このリリースの Perl では、"{" のリテラルな使用法の一部は致命的エラーで、 一部は単に廃止予定です。 これは見落としによるものです: v5.20 から廃止予定警告をだすべきだった リテラルな "{" の使用法の一部は v5.26 まで警告されていませんでした。 すでに警告されていた使用法を今致命的エラーにすることで、 言語に計画されていた拡張の一部をより早く実行できます。
警告やエラーが出ない文脈は:
パターンの最初の文字、あるいは行頭にマッチングすることを示す "^" に引き続いている場合。
代替を示す "|" に引き続く最初の文字の場合。
次のようなかっこ付きグループの最初の文字の場合:
/foo({bar)/
/foo(?:{bar)/
量指定子に引き続く最初の文字の場合
/\s*{/
要するに、正規表現で左カーリーブラケットを文字列として利用する場合は、一部の場合を除いてエスケープが必要になるようです。
次に5.24.1の記載です。
\C no longer supported in regex; marked by <-- HERE in m/%s/
(F) \C 文字クラスは、複数バイトの UTF8 文字の単一のバイトに マッチングできるようにしていましたが、 カプセル化を壊し、その実装が極めてバグっぽいので、v5.24 で削除されました。 本当に個々のバイトを処理する必要があるなら、 おそらくその文字列を、utf8::encode() を使って、 元となっているバイトそれぞれを文字として保持する文字列に変換した方が 良いでしょう。
要するに、Perl5.26(厳密には5.24)では正規表現で"\C"が使えなくなったようです。5.22までは\Cは使えるようです。
3.対処
1つめのエラーについて、lib/MT/App/CMS.pmの下記の部分を書き換えます。MTバージョンによって行番号が異なるかもしれません。
4828行目
変更前
$css =~ s#{{support}}/?#$app->support_directory_url#ie;
変更後
$css =~ s#\{\{support}}/?#$app->support_directory_url#ie;
4830行目
変更前
$css =~ s#{{theme_static}}/?#$theme->static_file_url#ie;
変更後
$css =~ s#\{\{theme_static}}/?#$theme->static_file_url#ie;
1つめのエラーについて、extlib/URI/Escape.pmの下記の部分を書き換えます。
変更前
sub escape_char {
return join '', @URI::Escape::escapes{$_[0] =~ /(\C)/g};
}
変更後
sub escape_char {
# Old versions of utf8::is_utf8() didn't properly handle magical vars (e.g. $1).
# The following forces a fetch to occur beforehand.
my $dummy = substr($_[0], 0, 0);
if (utf8::is_utf8($_[0])) {
my $s = shift;
utf8::encode($s);
unshift(@_, $s);
}
return join '', @URI::Escape::escapes{split //, $_[0]};
}
なお、動作を保証するものではありませんので、個人の責任で行ってください。
4,参考サイト
LinuxでOSキャッシュをクリアする方法
LinuxでOSキャッシュをクリアする方法を紹介します。
1.問題点
仕事で「OSキャッシュをクリアしてください」と依頼がありましたが、方法がわかりません。
ということで、LinuxでOSキャッシュをクリアする方法を紹介します。
2.OSキャッシュをクリアする
OSキャッシュをクリアするには、下記のコマンドを実行します。
# echo 3 > /proc/sys/vm/drop_caches
要するに、/proc/sys/vm/drop_cachesというファイルに数値を設定するだけです。
設定する数値は1~3で、各数値の意味は次の通りです。
- 1:ページキャッシュ
- 2:slab領域(kernelがdentry等をキャッシュするために使うメモリ領域)
- 3:両方
3.クリアされたキャッシュを確認する
キャッシュはfreeコマンドで確認できます。
$ free
total used free shared buffers cached
Mem: 1019780 860036 159744 104 261412 241728
-/+ buffers/cache: 356896 662884
Swap: 2097148 152052 1945096