海外出張時インフルエンザになった話

3月末に国際会議発表と研究打ち合わせのため、シドニーとブリスベンに出張したのだが、出張先でインフルエンザを発症してしまい、体力をかなり奪われ、回復するまで2週間以上かかった。いや正確にはまだ回復途上である。昨日前期はじめての講義があったのだがフラフラになりながらも何とか務めることができ一区切りついたのではないかと思っている。今回は2週間以上インフルエンザとそれに伴う体調の悪化に悩まされたことになるが、この経験は海外で病気になったときの対処や、国によって医療に関する文化の違いについて色々と勉強になったので、恥を忍んで書き残すことにする。

3月25日に出国し、ITM->HND->SYDの経路で、26日にイースター休暇真っ最中のシドニーに到着。27日に発表を行い、会議終了後の28日夜にブリスベンに移動する旅程である。シドニーのホテルをチェックアウトした28日から体調が悪く、ブリスベンに到着した28日の夜にはかなり高熱となり、ボーッとしていた。たまらないので持参していた解熱鎮痛剤を一度だけ服用した。思えばこれがあまり良くなかったのかもしれない。

ブリスベンでは29日にグリフィス大学を見学させていただいた。お世話になったW先生に感謝する。W先生にはせっかくレンタカーを借りているのでドライブをとすすめていただいたが、体調が悪くそれどころではなかった。この時点では熱は36度後半となり、一旦落ち着いていたため、熱が下がるまでさらに休養すれば良いと思っていたのである。しかし帰国する30日になっても、いっこうに熱が平熱まで下がらずボーッとした状態であった。このままでは帰国のフライトが地獄になる。クレジットカードに海外旅行の保険が付帯していることを思い出し、窓口に電話し30日の午前に受診できる病院を紹介してもらった。こういうこともあろうかと、「保険のご案内」リーフレットを持参しておいたのだ。

紹介してもらった病院はブリスベンの中心地にある日系のクリニックで、検査の結果B型インフルエンザであった(日本と同じく鼻の奥を採取する)。発症して48時間を越えていると思われることからリレンザの投与はできず、このまま休養し、発熱時には解熱鎮痛剤、抗炎症剤を服用するようにアドバイスを受けた。ちょっとビックリしたのが、薬が「○日分」ではなく、箱ごと処方されたこと。また、病院じたいかなりカジュアルな雰囲気で、診察中もフレンドリーに会話されるドクターであったのも少々びっくりした(日本人ドクターです)。これらの診察、投薬すべてはクレジットカード付帯の保険で賄うことができた。面倒な手続きは一切なく、クリニックで渡された書類にカード番号を記入するだけであった。今回はカード付帯とはいえほんとうに助かった。

帰国のフライトは案の定苦行となってしまった。もちろん解熱鎮痛剤を飲めば熱は抑えられる。しかしこれは免疫の働きを抑えていることに他ならないため、結局インフルエンザを長引かせることになってしまう。インフルエンザであることをCAに知らせると、色々と特別対応モードになった。どこのトイレを使ったかとか、鳥との接触はなかったかとか、うんざりである。別の話になるが、オーストラリアでマスクをしていると予想通り奇異の目で見られた。「He is a doctor.」とか言われたが気にしないことにした。

こんな調子で帰国しても熱が下がらないため、帰宅後の夕方病院に駆け込んだ。先生にオーストラリアで処方された薬を見せると、やはり箱ごと出していることに驚いていた。また、日本は医療保険に基づく診療が一般的だが、欧米はいわゆる自由診療のため、言わなければ、またお金を出さなければ、ある程度の診療で終わることが多いのではと仰っていた。病院がカジュアルな雰囲気であったことを思い出し納得した。ラピアクタ(点滴)を処方してもらい、体を温める漢方薬を出していただいた。

結局熱が下がったのが4/1で、その後も体調が戻らず4/5まで休暇をいただくことになってしまった。全力疾走できるようになったのが4/13なので2週間以上かかったことになる。ほんとうにインフルエンザは大病である。

 

WordPressでBibTeX業績リスト

もちろん古い人間なのでBibTeXを使いたい訳である。WordPressにはPaperciteというプラグインがある。WordPress内で参照を扱うことができるなど多機能のようだが今回は管理している業績をWebに公開できればそれで良いのでハマらないように飛ばす。

  1. Papercite Pluginのアーカイブをwp-content/plugin以下に解凍
  2. ドキュメントを精読する
    • Data structure
      • 今回はbiblistを使用したいだけなので飛ばす。bibファイルはwp標準のmedia library経由で使えるようだ。
    • BibTex entries
      • 今回はbiblistを使用したいだけなので飛ばす。
    • Attached files
      • 今回はbiblistを使用したいだけなので飛ばす。
    • Usages (コマンドの関係で括弧の前をエスケープしている)
      • リストするには \[bibtex\] で良い。bibファイルをhttpで読み込むことも可能。
      • Filtering mode \[bibfilter…\]
      • \[bibshow…\]
  3. メディアライブラリでbibファイルをアップロードする
  4. 文献リストを出力するコードを記事に記述する。今回はFiltering modeを使用。
 

MySQLアップグレード後dumpができていなかった

mysqldump を実行すると、

mysqldump: Couldn't execute 'SHOW VARIABLES LIKE 'gtid\_mode'': Table 'performance_schema.session_variables' doesn't exist (1146)

となってしまう。毎日取っているはずのバックアップが意味のない状態に…。データ構造のアップグレードを行うべし。

sudo mysql_upgrade -u root -p

これで大丈夫と思い再起動すると、

mysqldump: Error: Binlogging on server not active

と奈落の底へ。バイナリロギングを有効にするため、my.cnfを

server-id    = 1
log_bin      = /var/log/mysql/mysql-bin.log
sync_binlog  = 1

とし、/var/log/mysql を掘ってパーミッションを適切にしましょう!

 

Moodleのオンラインユーザ数を可視化

学認連携Moodleの繁忙期を前に、オンラインユーザ数を可視化することを思いついた。もちろんMoodle内部にそのような仕掛けはあるが、可視化ページの「Logged in Users」をMoodleのオンラインユーザ数と勘違いされている場合があったため、rraに記録し可視化するのが有用であると考えた。

オンラインユーザ数を取得するスクリプトの作成

#blocks/online_users/block_online_users.phpを参考にした
#/bin/sh
pass='your password'
db='your database'
output=`/usr/bin/mysql -s -umdluser -p$pass $db -e "SELECT count(u.id) FROM mdl_user u WHERE u.lastaccess > unix_timestamp(now()) - 300 AND u.lastaccess <= now() AND u.deleted = 0"`
echo $output

これを実行し単独の数値が出力されるか確認する。確認できたら、データインプットメソッドへの登録、データテンプレートの作成、データソースの登録、グラフテンプレートの登録と進めれば良い。おやじさんのページがひじょうに参考になりました。

結果は以下の通り。まだまだ改善の余地はあるが何とか間に合いました。

security-learning のオンラインユーザ数
security-learning のオンラインユーザ数
 

grammar.el で英文法チェック

elそのものは2010年で開発が止まっているが、英語力を向上させたいのでまずはEmacsからはじめたを見かけインストールしてみた。Linux Mint 17.3 で確認。

前提となるライブラリなどのインストール

sudo aptitude install liblink-grammar4-dev link-grammar 

grammar.el のダウンロード

svn co http://bcui-emacs.googlecode.com/svn/trunk/grammar

grammar の make とインストール

cd grammar
clang++ -O2 -llink-grammar -I/usr/include/link-grammar grammar.cc -o grammar
sudo cp grammar /usr/local/bin/
sudo cp grammar.el /usr/share/emacs/site-lisp/

init.el などに以下を追加

;; grammar checker
(require 'grammar)
(setq grammar-program-name "/usr/local/bin/grammar")

参考記事

 

「倫倫姫アップデート2015: 学認連携Moodleの利用拡大と運用の改善」が大学ICT推進協議会2015年度年次大会優秀論文賞を受賞しました

情報倫理eラーニング教材の開発と運用における改善をまとめたものが評価されました。ありがとうございます。開発と運用にご尽力いただいている皆様、利用機関の皆様にこの場をお借りして深く感謝いたします。今後も継続的な改善を進めて行く所存です。

1 題 目
倫倫姫アップデート2015: 学認連携Moodleの利用拡大と運用の改善

2 著 者
上田浩(京都大学/国立情報学研究所),中村素典(国立情報学研究所)

3 選考理由
著者らは,情報倫理教育のためのコンテンツである「倫倫姫」を学認連携Moodle上で継続的に運用してきている。本論文では,コンテンツのアップデートと運用する際に問題となった点の改善点について報告している。コンテンツについては,教育の実効性を高めるため,Moodleの利用制限 (Conditional Activities) 機能を用いて総合テストのみ受講することを不可能とするよう改良した。また,教材構造を改良し,関責任者が受講記録を確認するときのシステム負荷の低減を実現した。教育の実効性と運用の効率性を高めるための有益な情報を提供しており,高く評価できる。

 

LaTeX Beamerでもプレゼンテーションモード

今のところ使うのが憚られるWindowsでしか確認ができていないがようやくできた(17:24追記:Linux Mintでも確認)。プレゼンにカンペがあるのは良くないというご批判は謹んでお受けします。

必要なもの

サンプルソース

\documentclass{beamer}
\usepackage{pgfpages}
\setbeameroption{show notes on second screen}
…

結果

デュアルヘッドで片方はプレゼンテーションモードになっている
デュアルヘッドで片方はプレゼンテーションモードになっている

参考記事

 

ibdata1肥大化解消

学認連携Moodleのibdata1は11GBになっている。よく言われることだが、InnoDBはOSがどのていどのファイルを扱えるか認識できない。肥大化が困るのは、ファイルシステムを食い潰すことであり、最適化したとしても縮小することはない。一度ダンプからリストアするしかない。また、ファイルごとに.idbを作成する「innodb_file_per_table」が効果があるとされており、my.cnfに

innodb_data_file_path = ibdata1:1G
innodb_file_per_table

を記述するという2009年の記事が見られるが、MySQLマニュアルを見ると、MySQL 5.6からこれがデフォルトになるそうだ。つまり、自動的にテーブルごとの.ibdを作成してくれるということである。先日のシステムメンテナンスで学認連携MoodleはMySQL 5.7にバージョンアップした。学認連携Moodleのデータディレクトリを見てみると、

-rw-r----- 1 mysql mysql      8720  3月  8 04:19 mdl_workshop_aggregations.frm
-rw-r----- 1 mysql mysql    147456  3月  8 04:20 mdl_workshop_aggregations.ibd
-rw-r----- 1 mysql mysql      9260  3月  8 04:19 mdl_workshop_assessments.frm
-rw-r----- 1 mysql mysql    147456  3月  8 04:20 mdl_workshop_assessments.ibd
-rw-r----- 1 mysql mysql      9222  3月  8 04:19 mdl_workshop_assessments_old.frm
-rw-r----- 1 mysql mysql    163840  3月  8 04:20 mdl_workshop_assessments_old.ibd

のように、ダンプをリストアする作業を行っていないのもかかわらず、夜中のmysqlcheck時に自動的にこのようになっているようだ。つまりmy.cnfは一切変更する必要はない。

「innodb_data_file_path = ibdata1:1G」について、このサイズを越えたらどうなるのか見当がつかないので、明示的な固定サイズは止めることにした。しかしながら今のままの肥大を続けるのは良くないので、データベースのダンプをリストアする作業は必要である。この結果、ibdata1は11Gから79Mとなり、消費メモリが劇的に減少した。

security-learning のメモリ使用状況。メンテナンス後は空きメモリが劇的に増加している。
security-learning のメモリ使用状況。メンテナンス後は空きメモリが劇的に増加している。

作業手順は次の通り。この記事の流れが非常に参考になった。
続きを読む ibdata1肥大化解消

 

SCORM受験削除の効果

学認連携Moodleのメンテナンスの真っ最中である。今回のメンテナンスの目的の一つは、肥大したSCORM関係のデータを削除すること。MoodleはSCORM関連のデータをシステム全体のデータベースとして持っている。たとえば、

| mdl_scorm                        |         25 |
| mdl_scorm_aicc_session           |          0 |
| mdl_scorm_scoes                  |        516 |
| mdl_scorm_scoes_data             |       4043 |
| mdl_scorm_scoes_track            |    8530377 |

mdl_scorm_scores_track にSCORMのトラッキングデータがあるものと思われる(参照:mysqlでテーブルのレコード数を確認する方法)。これを「全てのSCORM受験を削除」する。3/1 21:26に削除を開始した。

security-learningのロードアベレージ。開始から4時間以上高負荷状態が続いていることが分かる。
security-learningのロードアベレージ。開始から4時間以上高負荷状態が続いていることが分かる。

削除開始からしばらくした時の状態。増えているが一時的なトランザクションのためであろうと推察する。

| mdl_scorm                        |         25 |
| mdl_scorm_aicc_session           |          0 |
| mdl_scorm_scoes                  |        516 |
| mdl_scorm_scoes_data             |       4040 |
| mdl_scorm_scoes_track            |    8855805 |

削除後

| mdl_scorm                        |         25 |
| mdl_scorm_aicc_session           |          0 |
| mdl_scorm_scoes                  |        454 |
| mdl_scorm_scoes_data             |       3345 |
| mdl_scorm_scoes_track            |     171273 |

およそ1/50に削減できたことになる。なお、4コアサーバで同様の操作を行ったときは最後のクエリ投入まで16分で完了した(実行時間は不明)が、security-learning(2コア)ではクエリの投入だけで47分、実際の実行に4時間以上かかっていると推定され、データベースはスケールアップが効果的ということを実感した。

 

Moodleのメンテナンスモード

予告することができるのを今さらながら初めて知った。cronなどで1日前(つまり1440分前)から予告しておいてメンテナンスモードにすることもできる。該当のMoodle Docsはこちら

if ($options['help']) {
    $help =
"Maintenance mode settings.
Current status displayed if not option specified.

Options:
--enable              Enable CLI maintenance mode
--enablelater=MINUTES Number of minutes before entering CLI maintenance mode
--enableold           Enable legacy half-maintenance mode
--disable             Disable maintenance mode
-h, --help            Print out this help

Example:
\$ sudo -u www-data /usr/bin/php admin/cli/maintenance.php
"; //TODO: localize - to be translated later when everything is finished

    echo $help;
    die;
}