親テーマ指定の web フォントを子テーマで変更する

まとめ

まとめを先に書いておきます。

<head> 内で

<link rel='stylesheet' id='libre-lora-css' href='https://fonts.googleapis.com/css...' ... />
...
(親テーマ指定のwebフォント用CSSの削除)
...
<link rel='stylesheet' id='libre-2-style-css' href='...' ... />

の順になってほしいため、子テーマの functions.php では

add_action( 'wp_enqueue_scripts', 'libre_kid_fonts', 9 ); /* style.css より先に読み込む必要がある */
function libre_kid_fonts() {
        wp_enqueue_style( 'libre-lora', libre_lora_url(), array(), null );
}
add_action( 'wp_enqueue_scripts', 'libre_dequeue_google_fonts', 11 ); /* 優先度を落とす */
function libre_dequeue_google_fonts() {
        wp_dequeue_style( 'libre-2-fonts' );    
}

のように、add_action('wp_enqueue_scripts') に優先度を付ける必要があります。

WordPress のテーマ Libre 2 と Google web フォント Lora

では、結論を先に書いた後でゆっくり経緯を書いてみます。

ふと WordPress のテーマを変えてみました。もう自分で作る気力もないので、公式ディレクトリで人気順に見ていって、シンプルな Libre が気に入りました。すぐ後に WordPress.com のほうで後継 Libre 2 を見つけ、「ダウンロードしてインストール型 WordPress で使用できます」とあったので早速そうすることにしました。

いくつか直したいところがあったので、子テーマで手を入れることにしました。変更点を備忘録的にここに書いておくと、

  • フォント関連の変更。欧文フォントを Libre Baskerville からLora に変更した。
  • 装飾に Dashicons を使うことにした。
  • 記事の最初のメタ情報にカテゴリー・タグを表示することにした。記事の最後には表示しない。
  • 本文の段落は1字下げ。段落間は小さくする。箇条書きの上下のマージンも小さく。
  • 本文内の見出し(<h3>など)は上下にマージン。ただしその見出しが本文先頭なら上マージンなし。

このテーマは、やや長めの文章を見せるのに適するようにセリフ(serif)の書体 Libre Baskerville が指定してありました。そこで日本語で書かれるこのブログでも、セリフ(明朝体)にすることを考えます。ただ、よくあるヒラギノ明朝体や游明朝体の中に混ぜてみると Libre Baskerville は落ち着かない感じがして、同じく Google web フォント の Lora に変更することにしました。

wp_dequeue_style() の実行順序

親テーマの Libre 2 は、その functions.php で

function libre_2_scripts() {
        ...
        wp_enqueue_style( 'libre-2-fonts', libre_2_fonts_url(), array(), null );
}
add_action( 'wp_enqueue_scripts', 'libre_2_scripts' );

と、webフォント Libre Baskerville 用の CSS を google から読み込むようになっています。子テーマでは、ここで enqueue しているものを dequeue すればいいのです。

が、子テーマの場合、そもそも functions.php の実行順は (1)子テーマの functions.php (2)親テーマの functions.php です。したがって、子テーマの functions.php に普通に dequeue を書いてもこれが先に実行され(つまりまだ enqueue されていないものを dequeue しようとする)、その後に親テーマで euqueue されることになります。

そこで、子テーマでは dequeue の実行の優先度を下げて(10より大きな数字にして)書いておかなければなりません。

wp_enqueue_style() の実行順序

子テーマでは、親テーマの libre_2_fonts_url() を真似して、別のwebフォントである Lora 用の CSS を指定する libre_lora_url() を書きます。

この CSS は Google Fonts から読み込まれますが、内容は

...
/* latin */
@font-face {
  font-family: 'Lora';
  font-style: normal;
  font-weight: 400;
  src: local('Lora Regular'), local('Lora-Regular'), url(https://fonts.gstatic.com/s/lora/v10/4vqKRIwnQQGUQQh-PnvdMA.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215;
}
...

のような @font-face がいくつも並んでいるものです。子テーマの style.css では

body {
	font-family: Lora,Georgia,Times, ... ;
}

のように、この定義を利用して使用フォントを指定します。

ところでこの 定義 @font-face と指定 font-family の順序ですが、ブラウザー Chromium の場合 (Debian の Chromium で確認しました。おそらくどの OS でもブラウザー Chrome でも同じだろうと思います)、前もって @font-face がないと font-family での指定時にそれが存在しないものと扱われるようです。Firefox ではその順番は関係ないようでしたが。

そこで、子テーマの style.css より前にこの CSS が読み込まれるように、wp_enqueue_style() を呼ぶ add_action('wp_enqueue_scripts') の優先度を 9 にします。

Gajim で IRC

PC の中を整理していたら、2012年のメモが出てきました。そのまま捨てていいものか判断に悩んだので、ここに転記してから捨てることにします。

Gajim という XMPP クライアントから IRC を使う、というものです。いまさらIRCもないのですが……。

中継先の設定

まず、中継先を設定します。

操作 → サービスを探索 → … で「アドレス」に、IRC中継を行ってくれている適当なXMPPサーバーを入力します。たとえば step.im とします。「IRCトランスポート」を選択し、一番下の「登録」をクリックします。これで、名簿の「中継先」の欄に、irc.step.im ができます。

チャンネルの登録

次に、その名簿の欄のサーバー名を右クリックして、「コマンドを実行…」とします。「Join channel」を選んで「進む」をクリックします。

IRCチャンネル(先頭には#は不要)に、たとえば「wordpress」と入力し、IRCサーバーに「irc.freenode.net」と入力し、「実行」をクリックします。

チャンネルに参加

操作 → グループチャットに参加 → … → 新しいグループチャットに参加 と進み、

ニックネーム (適当に)
談話室 wordpress%irc.freenode.net
サーバー irc.step.im
パスワード (適当に)

のように入力します。談話室名は、IRC のチャンネル名とサーバー名を「%」でつなげたものにします。ニックネームは適当ですが、NickServ に登録しているならそれを入力し、パスワードもそれに合わせます。

……と、5年ほど前のメモを見ながら試しにやってみてできはしましたが、何しろいまでは IRC をぜんぜん使っていないので、いったい何の役に立つのやら。

オンラインストレージ hubiC をバックアップに使ってみる

PC のデータのバックアップは、宅内に複数の PC があるので相互にコピーするという安直な方法をとっていました。安直とはいえこれまでに数回、それに救われたことがあります。

しかし複数と言っても、同じ家の中にあります。ふと、もしこの家が火事になったら……と考えてしまいました。まあそのときには PC のデータどころではないでしょうが。

では外のどこに置けばいいのやら。無料のオンラインのストレージサービスを探してみました。そのうち、25GB もあって Linux からも使いやすそうな hubiC を試してみることにしました。

アカウントの作成

メールアドレスが ID になります。そこに紹介コードを入力する欄があります。どこかで紹介コードを入手してここに入力すると、容量 25GB のところ +5GB の計 30GB になります。なおいったんアカウントを作成すると自分の紹介コードができます。これを誰かに紹介して、その誰かがこの紹介コードを使ってアカウントを作成すると、紹介した側も +5GB され、5人分まで加算されて最大 55GB にまでなります。私の紹介コードをここに書いておきます。XWULCF

Debian で使う

まず、ウェブで hubiC にログインし、My accountDevelopersAdd an application とします。適当な名前と URL を入力します。作成できるとその detail に、Client IDSecret Client が表示されます。

次にローカル側(Debian)の準備です。

apt-get install hubicfuse

で、パッケージをインストールします。なお、ここでは Debian Stretch の これを書いている時点でのバージョン hubicfuse 3.0.0 に従って書きます。Jessie のバージョン 1.1.0 だと設定ファイルの書式が異なるようです。

/usr/share/doc/hubicfuse/README.Debian に書かれているとおり、

/usr/share/hubicfuse/hubic_token

を実行します。

client_id, client_secret,redirect_uri を、さきほどのとおり入力します。その後の質問では、括弧の中のとおり rwwrd のように入力します。デフォルトではないので、そのとおりに入力します。

続いて user_loginpassword を入力します。すると、

client_id=.......
client_secret=.......
refresh_token=.......

の3行が表示されます。これをそのまま ~/.hubicfuse というファイルを作ってそこに書き込んで保存します。

マウント

ユーザーを fuse グループに加えておきます。そしてマウントポイント (たとえば ~/mnt/hubic/) を作っておきます。

マウントは

hubicfuse ~/mnt/hubic -o noauto_cache,sync_read

です。あとは通常の操作で、ここにファイルをコピーするなどできます。とは言っても通信速度は(日本からだと)非常に遅いので、この中でいろいろ作業するのは止めたほうがいいでしょう。せいぜい cprm くらいが無難です。安全と謳っていますが、やはり他人任せにするのは心もとないので、データは手元で暗号化してから送ることにしました。

アンマウントは

fusermount -u ~/mnt/hubic

です。

復元手順はふだんから訓練を

通信速度は非常に遅いのですが、万が一の場合の保管場所ということで、そう頻繁にファイルをやりとりすることもないので、これでよしとします。設定が済んでしまえば通常のファイル操作のコマンドでファイルを送ることができるので、自動化するのも楽です。

しかし復元の手順はこれに頼ってはいけません。何しろ火事になって設定ファイルどころか紙に書いたメモも何もかもが失われている、という状況を想定しておかなければなりません。

そもそもデータを hubiC というサービスに置いたということと、そのログイン名とパスワードは頭の中に入れておかなければなりません。それから暗号化ファイルを元に戻す方法もです。

数か月に一度、その訓練をしておくのがいいと思っているところです。

環境変数 CHROMIUM_FLAGS と Chromium のオプション --enable-remote-extensions

自分用メモ。

ほかはどうか知らないが少なくともこれを書いている時点の Debian (Stretch (testing))で、Chromium の拡張機能が無効になってしまった。検索してみると、

バグ報告の最後あたりのコメントにあるように、
export CHROMIUM_FLAGS="$CHROMIUM_FLAGS --enable-remote-extensions"

~/.profile に書き加える。あるいは /usr/share/doc/chromium/NEWS.Debian.gz を参照のこと。

chromium-browser (55.0.2883.75-4) unstable; urgency=medium

  * External extensions are now disabled by default.  Chromium will only load
    extensions that are explicitly specified with the --load-extension command
    line option passed into CHROMIUM_FLAGS.  See the chromium-lwn4chrome
    package for an example of how to do this.
  * You can also use the --enable-remote-extensions command line argument to
    chromium, which will bypass this restriction.

これで拡張機能を有効にできる……はずなのだが、起動時に ~/.profile が読み込まれていない。長いことこれに気がついていなかった。既に不要となった環境変数設定くらいしか書いてなかったからな。

少なくとも Debian の Lightdm を使っている場合、~/.xsessionrc を作ってその中に

. $HOME/.profile

と書いておけば、これが読み込まれる。

「ライブドアブログにコメントすると、コメントの著作権はブログ主に」は有効か

事情があって[1] 、ライブドアブログ(livedoor Blog)の利用規約ガイドラインを見ていたのですが、妙なものを見つけました。

「利用規約」

そもそもライブドアは、その利用規約

1.3.1 利用者が掲載等を行ったデータの利用

  1. 利用者は、本サービス等の利用に際して利用者が掲載・表示・送信等(以下「掲載等」といいます。)を行ったデータ(映像・音声・文章・写真・電子メール・メッセージ・アップロードされたウェブコンテンツ、ソフトウェアその他一切のデータをいう。以下同様とします。)につき、当社が、利用(複製、上演、演奏、公衆送信(自動公衆送信における送信可能化を含みます。)、口述、展示、頒布、譲渡、貸与、翻訳・翻案を含み、以下「利用等」といいます。)することを、無期限かつ無償にて、非独占的に許諾します。
  2. 利用者は、利用者が掲載等を行ったデータにつき、当社が自らの判断で、有償・無償を問わず、当社の指定する第三者に対して利用等を許諾する非独占的な権限を、無期限かつ無償にて付与します。
  3. 利用者は、前二項に基づく当社ないし当社の指定する第三者による利用者が掲載等を行ったデータの利用等について、著作者人格権を主張せず、行使しないものとします。
  4. 利用者は、利用者以外の第三者の情報やコンテンツ等の著作物が利用者が掲載等を行ったデータに含まれる場合、当該第三者から利用等の許諾を得、または、当該第三者に著作者人格権を行使させないなど、当社ないし当社の指定する第三者が当該データの利用等を行うについて支障の生じないよう、適切な権利処理を行うものとします。

としています。ここでの「利用者」とは、「本サービス等を利用される方(以下「利用者」といいます。)は、本規約の内容に同意して、本サービス等を利用するものとします。」と定義されています。

これには問題があると私は思いますが、ここにブログを開設しようとする人は登録段階でこの利用規約に同意することになっているので、それはそれでしかたがありません。

「ガイドライン」

ところで、分かりにくいのですが、「利用規約」とは別に「ガイドライン」というものが存在します。

livedoor Blogガイドライン(以下「本ガイドライン」といいます。)は、弊社が提供するサービスであるlivedoor Blog(以下「本サービス」といいます。)のご利用につき、弊社が別途定める利用規約(以下「利用規約」といいます。)とあわせて適用されるものです。よくお読みになられて、本サービスをご利用下さい。

本ガイドラインに規定がない場合、原則として、利用規約の規定が適用されます。本ガイドラインの規定が利用規約の規定と矛盾・抵触する場合、その矛盾・抵触の限りにおいて、本ガイドラインが優先して適用されるものとします。

というものですが、livedoor ユーザーの登録の段階でも、その後の「新しいブログを作成する」段階でも特に注意を喚起されることもありません。

そのガイドラインに次のような節があります。

コメントに関する権利帰属

  1. 利用規約1.3.1(利用者が掲載等を行ったデータの利用)にかかわらず、他の利用者(ブロガー)が管理するブログ内に記載したコメントの著作権は、当該ブログを管理する利用者(以下「ブログ管理者」といいます。)に帰属するものとします。
  2. ブログ管理者が管理するブログにコメントを投稿した利用者(以下「投稿者」といいます。)は、当該コメントを投稿した時点で、当該コメントに関する一切の著作権(著作権法第27条および第28条に規定される権利も含みます。)が、ブログ管理者に譲渡されることを承諾するものとします。
  3. 投稿者は、前二項により譲渡されたコメントのブログ管理者による利用につき、著作者人格権を行使しないものとします。

つまり「ライブドアブログにコメントすると、コメントの著作権はブログ主に」ということになります。さらに、明確にはわかりませんが「利用規約1.3.1」と合わせて考えると、そのコメントをLINE株式会社が自由に利用できることになるようです。

「ライブドアブログにコメントすると、コメントの著作権はブログ主に」は有効か

ブログ主が、ブログ開設(その前のlivedoorユーザー登録)時に「利用規約」に同意しているなら、その内容に問題があるとは言え、利用規約1.3.1はしかたないかもしれません。

「ガイドライン」は、ブログ開設時に特に注意は喚起されませんが、他の項目に紛れて目立たないとは言えフッタなどにリンクがあるし、百歩譲って、ライブドアブログのブログ主はこれを承知していたとしましょう。

ところが、ライブドアブログ(LINE株式会社)とは一切何の合意も交わしておらず、通常の注意力をもってしても「ガイドライン」を目にする機会を与えられない[2] コメント投稿者が、ブログの記事を読んでそのコメント欄に書き込んだ途端、「一切の著作権が、ブログ管理者に譲渡されることを承諾するものとします」というのは、たいへん無理があるのではないでしょうか。

たとえば、コメント投稿者が後になって同じ内容を自分のブログに書いたら、ライブドアブログのブログ主に著作権侵害で訴えられる、という事態もあり得ます。

おまけ

言うまでもありませんが、当ブログ「半月記」へのコメントの著作権は、原則としてそのコメントを書いた人にあります。

  1. 当ブログのある記事が丸ごと転載されているのをたまたま発見し、その転載されているのがライブドアブログ(livedoor Blog)でした。この件についてはまた別に書こうと思っています。
  2. いくつかのライブドアブログで開設されているブログを見ても、コメント欄のまわりにこの点についての注意書きや「ガイドライン」へのリンクがあるものはありませんでした。

「かけられる数」「かける数」ってわかりやすい言葉なのだろうか

そうこうしているあいだに、小学2年生のスウちゃん(仮名)の冬休みが終わり3学期になりました。2学期末は学校でかけ算をやっていましたが、宿題で持ち帰るプリントやドリルでは、かの有名な「かけ算順序問題」が繰り返し繰り返し出されます。延べ10回は超えているでしょう。しかしスウちゃんはちっとも引っかからず、求められているとおりに答えるので、親としてはやや拍子抜けです。「かけ算順序問題」そのものについては、ここでは深入りしません。既にあちこちで語られているでしょうから。

さて、「6×4 の式でかけられる数はどちらですか」のような設問も見られます。この「かけられる数」という言葉(言い回し)は、どうにも分かりにくいと感じます。大人でも混乱しそうです。少なくとも私はそうです。たぶん「受け身」(受動態)という形が普通ではないからでしょう。私はしばらくあるフリーソフトの翻訳に関わっていましたが、そこでも日本語の訳文は「できるだけ受け身にしない」という指針でした。

毎年数万人、延べ何百万人の先生方は疑問に思わないのでしょうか? まあ先生ほど普段から使っているから身についてしまって何とも思わないのかもしれません。百歩譲って、「かけられる数」「かける数」の区別が重要だとしても(それは教える側の問題であって、子どもたちがそれを意識する必要はないというのが私の考えです)、たとえば「はじめの数」や「もとになる数」、もっと簡単に「もとの数」とかいう語ではだめなのでしょうか。だいぶましだと思うのですが。そういう語だと加減乗除のどの場合にも左側の数をそう呼べるので、統一的な理解にもつながりそうにも思います。そうしない理由がどこかにあるのでしょうか。

ところで、念のために「かけ算順序問題」についての私の考えをさらっと書いておきます。

  • 教室で子どもたちに順序つきで教えること自体に異論はない。逆順も教えなければならないとも思わない。
  • ただし、子どもが逆順で答えてきたものを☓にしてはならない。したがって順序を問うような問題はナンセンス。

自分のグローバルIPアドレスを調べる方法

自分用メモ。インターネット接続プロバイダによって自分に割り振られているIPアドレスを調べる方法。

外部のどこかにアクセスして、そこが接続してきた元のIPアドレスを返してくれる、というサービスを利用するしかない。

次のものはコマンド一発でIPアドレスのみを返してくれるので、スクリプトに組み込むのに便利。

dig whoami.akamai.net @ns1-1.akamaitech.net +short

サーバーを指定しないで試しているとき、たまに間違ったIPアドレスを返してきた。キャッシュされていたものだろうか。サーバーを指定すると、いまのところ常に正しい値が得られている。

HTTP でも同様のものがあって、curl を使って

curl -s http://whatismyip.akamai.com

こちらはIPv6もあるらしく(いま自分では試せない)

curl -s http://ipv6.whatismyip.akamai.com/