もじゃぶろぐ

記事を書いたり書かなかったりします。

DB授業の謎な課題提出スタイルになんとか対応したい

TL;DR

TL;DR、使ってみたかった。

mysqlのログを記録して、切断時にdocxで吐けるようにした。

前提

私の環境は自前のノートPCにArch Linux
一応学校のカリキュラムでは全員統一で配布されている(買わされている)Windowsマシンを使うことになっているけど、自分で責任が取れる人は好きにしてくれという救済措置がある。(ただしどっちみち学校マシンは買わされる)

当然学校サイドからのサポートは受けられず、そんな天邪鬼な人間に合わせたカリキュラムにもなってないのでWindowsじゃないことの問題が出てしまうこともある。
(そういう理由もあって嫌々Windowsとのデュアルブートにしてある)

課題の提出ルール

MySQLの専用クライアントのログをWordにコピペして、学内サーバの特定のディレクトリに提出。

なんで?

ぼくもしりたい

問題点

Windowsじゃないことの問題

  1. MySQLのDB名やテーブル名などに日本語が使えない

    普通使わない…使わなくない?
    でもそれで課題が用意されてるのでどうしょうもない。勘弁してほしい。

  2. Linux用のWordがないんですけど…

    これは正直Windowsを嫌がる私が悪い。しゃーない。
    じゃねえよなんでログをわざわざWordに貼り付けるんだよ。

    ちなみに今まではWordOnlineに貼り付けてDLで対応してました…

(その他、毎回うっかりCtrl-cしてしまってターミナルが閉じて悲鳴をあげてる生徒がいる。つらそう。)

その他の問題点

ダルすぎる
これに尽きる。

教科担当の決めたルールなので従うしか無いけどとにかく無駄が多すぎてダルい。

改善策

MySQL

環境

まず、MySQLを使うのをやめた。
Arch Linuxでは割りと前からMySQLよりMariaDBを推奨しているので、そちらに乗り換えた。

授業としてはMySQLを使うということになっているけど、そんなにかわらないので問題なし。
教科担当自身本人の環境はMariaでやってるし(なんでだよ)、Mariaならいいよと言っていた。

MariaDB環境ではDB名やテーブル名に問題なく日本語が使えるので1の問題を解決した。
(そんなところに日本語を使うなと言う問題は永久に解決しない。)

ログ取り

いちいちターミナルからコピペなんてダルいことはしてられない。

--teeオプションで指定ファイルに全操作のログを吐き出せるので、これを使うことにした。

$ mysql -u root -p --tee /path/to/logfile

Pandoc

LinuxにはWordなんてない。Windowsに切り替えたくもない。
Word Onlineに貼り付けるのもしんどい。

というわけで、コマンドラインマークアップドキュメントを変換できるPandocを利用することにした。

$ pandoc /path/to/logfile -t docx -o {課題のネーミングルール}.docx

入力形式

mysqlのログは、そのままコンソールのログが吐かれてるので当然プレーンテキスト。

ただし、Pandocは「マークアップドキュメントを変換する」ためのアプリケーションなのでプレーンからの入力に対応していない。

というわけで、全行の末尾にスペース2個を追加することで強引にMarkdownとして扱えるようにした。力こそパワー。

$ sed -i -e "s/\$/  /" /path/to/logfile

これで2番めの問題も解決。

終わりに

これらのコマンドを適当にスクリプトにまとめて今までよりは楽になった。
学内サーバはSMBなので提出まで自動化したい。(でも編集パーミッションもないのでやらかしそう)

人権をくれ