やはり串刺し検索したいのでEPWING化する。必要なものは以下の通り。
- 現時点でEPWING化できるのはOALD7が最新である。ブックオフで購入。
- fpwmakeできる環境。今回はUbuntuを使用した。
- Kazuhiro Ito さん作 oald7-fpw 変換スクリプト。ダウンロードしてホームディレクトリに解凍すれば良い。
やはり串刺し検索したいのでEPWING化する。必要なものは以下の通り。
PPTPがフィルタリングで使えない環境でもLANにアクセスするため:
[code]ssh -L 22222:10.XXX.XXX.XXX:23456 サーバFのID@サーバFのホスト名[/code]
mysqldump を実行すると、
[code]
mysqldump: Couldn’t execute ‘SHOW VARIABLES LIKE ‘gtid\_mode”: Table ‘performance_schema.session_variables’ doesn’t exist (1146)
[/code]
となってしまう。毎日取っているはずのバックアップが意味のない状態に…。データ構造のアップグレードを行うべし。
[code]
sudo mysql_upgrade -u root -p
[/code]
これで大丈夫と思い再起動すると、
[code]
mysqldump: Error: Binlogging on server not active
[/code]
と奈落の底へ。バイナリロギングを有効にするため、my.cnfを
[code]
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
sync_binlog = 1
[/code]
とし、/var/log/mysql を掘ってパーミッションを適切にしましょう!
学認連携Moodleの繁忙期を前に、オンラインユーザ数を可視化することを思いついた。もちろんMoodle内部にそのような仕掛けはあるが、可視化ページの「Logged in Users」をMoodleのオンラインユーザ数と勘違いされている場合があったため、rraに記録し可視化するのが有用であると考えた。
オンラインユーザ数を取得するスクリプトの作成
[code]
#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
[/code]
これを実行し単独の数値が出力されるか確認する。確認できたら、データインプットメソッドへの登録、データテンプレートの作成、データソースの登録、グラフテンプレートの登録と進めれば良い。おやじさんのページがひじょうに参考になりました。
結果は以下の通り。まだまだ改善の余地はあるが何とか間に合いました。

elそのものは2010年で開発が止まっているが、英語力を向上させたいのでまずはEmacsからはじめたを見かけインストールしてみた。Linux Mint 17.3 で確認。
前提となるライブラリなどのインストール
[code]
sudo aptitude install liblink-grammar4-dev link-grammar
[/code]
grammar.el のダウンロード
[code]
svn co http://bcui-emacs.googlecode.com/svn/trunk/grammar
[/code]
grammar の make とインストール
[code]
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/
[/code]
init.el などに以下を追加
[code]
;; grammar checker
(require ‘grammar)
(setq grammar-program-name "/usr/local/bin/grammar")
[/code]
参考記事
学認連携Moodleのibdata1は11GBになっている。よく言われることだが、InnoDBはOSがどのていどのファイルを扱えるか認識できない。肥大化が困るのは、ファイルシステムを食い潰すことであり、最適化したとしても縮小することはない。一度ダンプからリストアするしかない。また、ファイルごとに.idbを作成する「innodb_file_per_table」が効果があるとされており、my.cnfに
[code]
innodb_data_file_path = ibdata1:1G
innodb_file_per_table
[/code]
を記述するという2009年の記事が見られるが、MySQLマニュアルを見ると、MySQL 5.6からこれがデフォルトになるそうだ。つまり、自動的にテーブルごとの.ibdを作成してくれるということである。先日のシステムメンテナンスで学認連携MoodleはMySQL 5.7にバージョンアップした。学認連携Moodleのデータディレクトリを見てみると、
[code]
-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
[/code]
のように、ダンプをリストアする作業を行っていないのもかかわらず、夜中のmysqlcheck時に自動的にこのようになっているようだ。つまりmy.cnfは一切変更する必要はない。
「innodb_data_file_path = ibdata1:1G」について、このサイズを越えたらどうなるのか見当がつかないので、明示的な固定サイズは止めることにした。しかしながら今のままの肥大を続けるのは良くないので、データベースのダンプをリストアする作業は必要である。この結果、ibdata1は11Gから79Mとなり、消費メモリが劇的に減少した。

学認連携Moodleのメンテナンスの真っ最中である。今回のメンテナンスの目的の一つは、肥大したSCORM関係のデータを削除すること。MoodleはSCORM関連のデータをシステム全体のデータベースとして持っている。たとえば、
[code]
| mdl_scorm | 25 |
| mdl_scorm_aicc_session | 0 |
| mdl_scorm_scoes | 516 |
| mdl_scorm_scoes_data | 4043 |
| mdl_scorm_scoes_track | 8530377 |
[/code]
mdl_scorm_scores_track にSCORMのトラッキングデータがあるものと思われる(参照:mysqlでテーブルのレコード数を確認する方法)。これを「全てのSCORM受験を削除」する。3/1 21:26に削除を開始した。

削除開始からしばらくした時の状態。増えているが一時的なトランザクションのためであろうと推察する。
[code]
| mdl_scorm | 25 |
| mdl_scorm_aicc_session | 0 |
| mdl_scorm_scoes | 516 |
| mdl_scorm_scoes_data | 4040 |
| mdl_scorm_scoes_track | 8855805 |
[/code]
削除後
[code]
| mdl_scorm | 25 |
| mdl_scorm_aicc_session | 0 |
| mdl_scorm_scoes | 454 |
| mdl_scorm_scoes_data | 3345 |
| mdl_scorm_scoes_track | 171273 |
[/code]
およそ1/50に削減できたことになる。なお、4コアサーバで同様の操作を行ったときは最後のクエリ投入まで16分で完了した(実行時間は不明)が、security-learning(2コア)ではクエリの投入だけで47分、実際の実行に4時間以上かかっていると推定され、データベースはスケールアップが効果的ということを実感した。
予告することができるのを今さらながら初めて知った。cronなどで1日前(つまり1440分前)から予告しておいてメンテナンスモードにすることもできる。該当のMoodle Docsはこちら。
[code]
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;
}
[/code]
ローカルに開発環境を整備したかったことと、Emacs関連で使いたいパッケージがWindowsでどうしてもビルドできなかった(CygwinとかMinGWは嫌)ので、10年ぶりにデスクトップLinuxを試すことにする。
最後に使っていたのはGentoo Linuxで、インストールにひたすら時間がかかった記憶しかないが、好きにできるので数年使用していた。もちろん、今はそんなに凝ることはできないので安直にUbuntuかなと思っていたが、最近はMintというのが人気があるようだ。Webを見るとエディションが色々あって分かりにくい(分かりにくいシステムにろくなものはないというのが私の持論)が、試してみる価値はありそうだ。
特に制約がなければ無印を選ぶ。あとはデスクトップ環境によってエディションが決まる。MATE(軽量)かCinnamon(綺麗)、つまり昔のxfceかKDE/Enlightment/GNOMEかって感じだろうか。今回はCinnamonを選択した。DVD ISOで1.5GBと隔世の感がある。しかもUnetbootinを使えばDVDを焼く必要もない。またディスクもSSDが1万円を切るなどデュアルブートする必要性もない。良い時代になったものだ。
インストールはUSBからブートし、デスクトップにある「Install」をダブルクリックすると開始される。パーティションの設定もわざわざする必要もなく、無線LANドライバをどっかからコピーすることもなく淡々と進み30分もかからずに完了。本当に簡単。
この後は、beamerでDual Headプレゼンするという最初の目標に向かっていく。
Webシステムを研究で使用するため、学内の脆弱性診断サービスの使用と対応を行った。いつも困るのが SSLCipherSuite である。実装がそれなりにあり組み合わせを含めると…というのは分かる。分からないのが Web サーバの設定ファイルである。今回は以下のサイトを参考にさせていただいたので感謝とともに備忘のため記録しておく。