数学オンラインテストモジュール STACK 3.5.* を LMS Moodle 3.1 on Debian GNU/Linux 8 Jessie にインストール

概要

MoodleオープンソースのLMS, 数学オンラインテストSTACKはMoodleのQuizのひとつのQuestion Typeであるモジュール.

Moodle 3.1, STACK 3.5.5, STACK-Maxima library 2016082901 を Debian 8 Jessie にインストールしたときに遭遇した困難と解決, STACK 3.5.6, STACK-Maxima library 2016122100 にアップデートしたときに遭遇した困難と解決の記述.

STACK 3.5.5のインストール

インストール手順は

MoodleがインストールされたDebianの場合,

apt-get install maxima gnuplot

で必要なパッケージが追加され, 実行ファイルは /usr/bin に置かれた.

maxima --list-avail
Available versions:
version 5.34.1, lisp gcl
Maxima 5.34.1 http://maxima.sourceforge.net
using Lisp GNU Common Lisp (GCL) GCL 2.6.12 (a.k.a. GCL)

とのことで, GCL=GNU Common Lispdependency でインストールされた.

ところが Health Check

したところ,

CAS result
loadfile: failed to load /usr/share/maxima/5.34.1/share/draw/draw.lisp -- an error. To debug this try: debugmode(true);

FAILED  あなたの要求したMaximaパッケージのいくつかの読み込みに失敗しているようです。このエラーに対する注意については,インストール手順を参照してください。 CASは期待したとおりデータを返しましたが,エラーがありました。

だそうで, draw.lisp がloadできないというエラー. 即物的には, このファイルはあるのか? Pathが正しいか? Owner and Permisson は正しいのか, などと調べ始めるわけだが, そういうことでなく, もっと深く精妙なことで, バージョン依存であるらしい, というのが下のスレッドで書かれている.

上のスレッドでは回避方法として, ライブラリをあらかじめ読み込んで最適化した maxima のイメージを保存すればいい, と言っている. GCLの場合のその手順はここで説明されている.

ただし, Debian では

apt-get build-essential

であらかじめ gcc がインストールされていることが必要. 最後に Moodle のSTACK設定で, maxima コマンドを

timeout --kill-after=6s 6s /path/to/moodledata/stack/maxima-optimised -eval '(cl-user::run)'

と指定しようとするが, このinput formには single quote や paren を書くと正しく認識されないようだった.

に書かれているように,

#!/bin/sh
/path/to/moodledata/stack/maxima-optimised -eval '(cl-user::run)'

だけからなる wrapper shell script maxima-optimised.sh を作成し

timeout --kill-after=6s 6s /path/to/moodledata/stack/maxima-optimised.sh

とすると, Health Checkを通過した.

追記: STACK 3.5.6 へのアップグレード

その後,

cd /path/to/moodle/question/type/stack
git pull

したところ, 正誤判定は正しくされるものの, プレビューでの「正解を表示」fill in right answer 『正解概要」が効かなくなり, 学生にも, 正解は表示されるが正解入力文字列が表示されなくなった.

Health Check したところ,

FAILED   The version of the STACK-Maxima libraries being used (2016082901) does not match what is expected (2016122100) by this version of the STACK question type. Please rebuild your optimised Maxima executable.

というエラーになった. そう, 最適化した maxima イメージは, STACK の update のたびに再生成しなければいけないのだった. 3.5.5 インストール時の手順をやり直したところ, Health Check を通過し, 正解入力文字列も表示されるようになった.

追記: STACK 4.0.1, Maxima 5.38.1, Moodle 3.3.2, Debian 9 stretch へのアップグレード(2017-09-15)

もちろんまた

FAILED 期待されるMaximaのバージョン:"5.38.1"。実際のMaximaのバージョン:"5.34.1" CASは期待したとおりデータを返しましたが,エラーがありました。

FAILED 使用されているSTACK-Maximaライブラリのバージョン (2016122100) はSTACK問題タイプで必要とされているバージョン (2017082400) と一致していません。最適化されたMaxima実行ファイルの再構築を行ってください。

と言われるようになった. こんどは, WebのSTACK設定で, いったんぜんぶ default に戻して, 「Maximaのイメージを作成」ボタンを押すだけで, Unix-optimised になって, ぜんぶ正常に機能するようになった…ように今のところ見えている. STACK4では, テキスト内に書く CAS expression の dellimiter が @exp(x)@ から {@exp(x)@}になったという表面的には大きな変更がある.

iOS iPhone iPad を, スリープボタンを使わずに, タッチスクリーンだけでソフトウェア的に再起動する方法

iPhoneでは, ほとんどの操作はタッチスクリーンで行える. ホームボタンさえ, Accessibility > TouchAssist によってタッチスクリーンで代替できる. 唯一, タッチスクリーンの操作だけで行えないのは, 電源OFF, 再起動.

ちなみにMacでは, 電源OFF, 再起動は林檎メニューからGUIで行えるが, 起動の際にはハードウェアキーボードの接続を促され, ログインの際にはハードウェアキーボードが必要となる(スクリーンキーボードはある).

これを考えると, iOSでタッチスクリーン操作による電源OFF, 再起動を許していないのは不思議. ソフトウェアアップデート後には自動的に再起動することを考えると, APIが存在しないわけでもないはず. 実際, jailbreak 脱獄を要するアプリの中には電源OFF, 再起動を行うものがある.

jailbreak もせず, タッチスクリーンだけでiOSを再起動する, wild でおすすめできない方法だが, 要するに, iOSをクラッシュさせる操作を行えばよい. 例えば執筆時点の最新のiOS 9.2.1 は, Mobile Safarihttp://crashsafari.com にアクセスすると, Mobile Safari の道連れになってクラッシュし, iOSの再起動が発生する. このサイトは, JavaScript で特定のAPIを特定の方法で呼び出して, 再起動を引き起こしているそう. 副作用がないかどうかは保証の限りではないが.

Moodle で課題を評定・フィードバックしたときに学生に通知 notification する/しない設定

教員が課題を評定・フィードバックしたときに, メール, ダイレクトメッセージ, モバイルノティケーションで学生に通知 notify する/しない設定.

通知を受ける設定

サイト管理者は, フィードバックされたときに学生が通知を受け取るかどうかを, サイト管理>プラグイン>メッセージアウトプット>デフォルトのメッセージアウトプット>フィードバックリマインダで, 設定できる.

各学生はマイプロファイル>メッセージングでこれを上書きできる.

通知を送る設定

教師は, 各コース・各課題アクティビティで評定・フィードバックしたときに各学生に通知するかどうかを, 課題の設定>通知>「「学生に通知する」のデフォルト設定」で, 設定できる.

しかしその例外として, 個々の課題の個々の提出物の評定やクイック評定で, 各学生に通知するかどうかを, (セレクトボックスで)選択できる.Using Assignment - MoodleDocs

しかしその例外として, オフライン評定ワークシートをアップロードする場合には, 通知の有無を選択できず, かならず通知される.

しかしその例外として, 課題が非表示であるときは通知されない.

しかしその例外として, 評定後24時間以内に課題が表示状態になったときは, 通知される. Using Assignment - MoodleDocs *1

*1:マジックナンバー24時間は, 2.8以上のMoodle Docからは消えたが, 2.9ではこの通りに動作する.

Moodle 2.7 でForumNGアンインストール後cron.phpでエラー→回復

概要

Moodle 2.7にForumNGをインストール→動作しない→アンインストール→cron.phpが完了しない→lockファイル手動消去→回復

前提

Moodleオープンソースのコース管理システム(LMS). ForumNGOpen University in UKによって開発された, 標準モジュールのForumよりも高機能な活動を提供するプラグイン.

時系列で

ForumNGのインストール

Moodle 2.7 に ForumNG をインストールしたが, 正常に機能しない(ウィークリーフォーマットの設置したブロック内にエラー表示が出る)のでアンインストールした.

不具合

その後, フォーラムの通知メールが(30分後に)送られてこないことに気づく. コース管理>サーバ>スケジュールをチェックすると, フォーラム通知がオフになっている. ForumNGのインストール/アンインストール過程によるものか? オンにする. それでも通知メールは送られてこない.

そこで, cron.php が機能していないという仮説で,

curl https://moodle.example.jp/Moodleインストールディレクトリ/admin/cron.php

してみると,

Server Time: 時刻
!!! ロック待ち時の操作タイムアウトです。 !!!

と表示される. Webの情報によれば, cron.php が正常に動作していてもこのメッセージが表示される頻度は低くない, とのこと. しかし, 今回は, cron.php が動作していない(例えばフォーラムの通知が送られない)のでさらに調査. Debug mode をTrueにしてみると,

Server Time: 時刻
Warning: open(/Moodleデータディレクトリ/lock/8b/8b以下一意文字列): failed to open stream: Permission denied in /Moodleインストールディレクトリ/lib/classes/lock/file_lock_factory.php on line 144 
!!! ロック待ち時の操作タイムアウトです。 !!!

ロックファイルを消去

だいぶ危ない話だが, バックアップを取った後で, このロックファイルを消去してみた. すると, 他の多くのロックファイルについても, エラーが報告される. さらに危ない話だが, バックアップを取った後で, それらすべてのロックファイルを消去してみた.

結果

すると, cron.php は最後まで実行されるようになり, フォーラムのメール通知も定期的に行われるようになった. 今のところ, 観察可能な不具合は起きていない.

だいぶ間隔の空いた cron.php の(最後までの)実行において, 最近のフォーラム通知メールは遡って送られたが, 一定の時間が経った投稿については無視されたようだ.

Moodle で Microsoft OneDrive をレポジトリとして使うのに成功/失敗

概要

個人用 Microsoft One Drive をMoodleレポジトリとして使うのは簡単だが, 調子に乗って Microsoft One Drive for Business を安易に使おうとしたら, 設定を誤ってファイルアップロード以外の場所でもエラーが出る状態になったけどリカバーした話.

Moodle 2.8 で検証.

Moodleレポジトリとは

Moodleオープンソースのコース管理システム(LMS).

Moodleにおけるレポジトリとは, LMSにローカルファイルシステムからファイルをアップロードするかわりに, Dropbox のようなストレージから(いったんダウンロードすることなしに) ファイルを直接送ったりリンクしたりする仕組み. 操作としては, File Picker に様々なレポジトリが並んでいるのを目にするだろう. ローカルストレージのない(または扱いにくい)タブレットなどからの利用では特に有用.

(個人向け) Microsoft OneDrive の使用

Microsoft OneDriveは, Windows Live アカウントで使用できる無料のオンラインストレージ(旧SkyDrive).

この個人向け Microsoft OneDrive をMoodleレポジトリとして使うには, Moodle, OneDrive どちらも一般ユーザ権限だけあればよい. 手順 OneDrive repository - MoodleDocs にしたがえば簡単に設定できる.

Microsoft OneDrive for Business の使用

Microsoft OneDrive for Businessは, Microsoft SharePoint をバックエンドとするチーム用ストレージで, 有料のOffice365の一部として提供される.

安易な試みと遭難

組織でOffice365が利用可能であり, Microsoft OneDrive for Business のほうが容量が大きいので, これもレポジトリに追加しよう, という安易なのりで, 試みた. プラグインMoodle plugins directory: OneDrive for Businessが必要なので, Moodle側では管理者権限が必要であることがわかる. さらに, 依存性から, Microsoft の提供するOffice365プラグインセットに含まれる, プラグイン auth_oidc, local_office365, local_o365 も要求される.

よく見ると Microsoft Azure Subscription が必要と書いてあるのを見落としてこれらのプラグインのインストールを進めたところ, 途中で進めなくなった*1. インストール過程をアボートしたところ, フォーラム投稿で,

まずアプリケーション証明書をauth_oidcで設定してください。
Please set application credentials in auth_oidc first.

erroracpauthoidcnotconfig

と言われるようになった. repository_office365 をアンインストールするが, このエラーメッセージは local_o365 が出している. local_o365 プラグインをアンインストールしようとするが, local_o365 は auth_oidc が設定されていないとアンインストールできない, auth_oidc は local_o365 が依存しているのでアンインストールできない, というデッドロックに陥った.

リカバリーミッション

プラグインのソースを手で編集して, 一方の依存性チェックを一時的に無効化して, 1個ずつアンインストールした.

Moodle と Office365 の深い統合

本来, Office365プラグインセットはOffice365とMoodleの深い統合をめざすもの. これについて, 大学での利用の報告として, MoodleとOffice 365の連携における学習支援環境がある.

*1:auth_oidcは本来はMoodleの認証をOffice365で行うためのもの. これらのインストールを完了するには, Moodleの認証方式の変更とOffce365側の管理者権限が必要なのではないかと疑っているが確認できていない.

LINE@アプリでの端末/OS固有絵文字の入力と表示

コミュニケーションアプリLINEにおいて, LINE絵文字はアプリのバージョンがあっていれば問題なく送受信できるが, 環境(端末/OS)固有の絵文字は, 他の環境での表示はサポートされないそう. Unicode への収録が進んだとはいえ…

LINE@においては, LINE@ Web managerではLINE絵文字(の一部)が入力できるが, LINE@アプリでは入力できない.

LINE@アプリ(1.4.0 on iOS9.2)で環境依存固有絵文字を入力して送信したところ, LINE@アプリのメッセージ一覧では正常であるものの, LINE@アプリのホーム, LINE@ Web manager, 同端末/OSの受信側LINEアプリ(5.9.0)などでは絵文字が×印になって表示されない状態になった.

Firewall 内の Dropbox on Linux の proxy 設定は dropbox.py proxy で

Dropbox on Linux のプロキシ設定は, 以前は, 環境変数 http_proxy 経由でやっていた. Dropbox APIv2のリリースと関係あるのかないのか, 2015-10-16 ごろ release の Version 3.10.8 では, この環境変数が効かないようだ. かわりに(?) dropbox.py スクリプト(2015.10.28)の, 以前はなかった proxy サブコマンドを使うようになっている.

dropbox.py proxy manual http proxy.example.jp port user password

説明は

dropbox.py
dropbox.py proxy

で得られる. proxy の情報がどこ(ファイル?データベース?メモリ?)に保存されるのか調べられていない.

Dropbox のバイナリは自動更新されるので, Linux を次回に再起動したときに初めてこのことに気づくユーザもいるだろう(含自分).

Debian GNU/Linux 8.2 で検証.

www.dropbox.com