今週のContest Management System (2)

CMS (Contest Management System) の最近の動向について書いてみようかなと思います企画2週目

DBモデルの修整とインポーターのダイエット

lerks(Luca) がDBモデルの細かい問題点をチェックし、修整しています。

例えば、アクセス元の許可リストとしてIPアドレスを指定する場面があり、今まではワイルドカードを0.0.0.0として表していましたが、現在はnullで表すようになりました。

現在もTODOがいくつかあるようです。(例: SubmissionのDBエントリのコード中にLANGUAGES_MAPという定数値が埋め込まれているが、これはモデルとは関係ないので別の場所に移動する。など)

さらに、コンテストデータをインポート/エクスポートするためのツール(YamlImporterやContestExporter) に対してもlerksは修整を行う予定です。

これらのツールは、内部でDBモデルを直接使用していますが、これをできるだけ自然に行えるように直して行きたいというようなことが書かれています。

スコアタイプのUI

管理画面では、課題タイプ(バッチ、通信、出力のみなど…) にあわせて設定画面が変化しますが、スコアタイプ(グループ最小や相対評価など…)のパラメーターは常に1行のみ(JSONオブジェクトを文字列化したもの)です。

これではユーザビリティーが低いので、ScoreType内でUIを指定できるようにしたいという提案がなされています。

ボスニアチームの採用

ボスニアCMSの採用が検討している人がMLに質問を投げていました。

  • イタリア形式をそのまま採用しようとしているが、GENファイル(テストグループを指定するファイル)の仕様がわからず困っている。行の内容にかかわらず、行数 = テストケースの数ぶんが最初のテストケースから順番に使われるのか?
    • その通りである。
  • cmsResourceServiceを使っても、全てのサービスが5秒ごとに再起動してしまう。これは何故か?
    • cms.confの中にあるprocess_cmdlineの中身が、ps axを行った時の表示と対応しているかどうかをチェックしてほしい。なおこの件については、CMS側の仕様を変更する提案がなされている。 https://github.com/cms-dev/cms/issues/142

process_cmdlineの仕様変更

上の質問に関連して、process_cmdlineの仕様変更をするという提案がありました。 ( https://github.com/cms-dev/cms/issues/142 )

process_cmdlineはデフォルトが/usr/bin/pythonになっていますが、Ubuntuでの適切な設定は/usr/bin/python2であり、この変更を忘れると全てのサービスが5秒ごとに再起動するという不可解な現象に遭遇することになります。これは多くの人が引っかかる共通のトラップになりつつあります。

そこで、psを使ってプロセスの生存確認を行うよりも良い方法を探そうというのがこの提案です。

例えば

  • 呼び出された側のプロセスがpidをどこかに記録しておき、そのpidを用いて生存確認をする。
  • Pythonのmultiprocessingモジュールを使う。これは、スレッドよりも分離度が高い平行コンピューティング用のモジュールである。

といった方法が提案されています。

翻訳できない文字列

一部の翻訳するべき文字列が、トランスレーターを経由しているにも関わらず、ソースコード中のgettextに検出されない位置に書かれているために、potファイルに出力されないという問題が提起されました、例えば、一部のHTMLテンプレートがPython中の文字列定数として表現されているものを、独立したHTMLファイルにするなどによって解決できると考えられます。

また、コンテスト全体のロケールが設定されているにも関わらず、ログイン前の画面で正しく翻訳が表示されないバグも指摘されました。これも自明な方法で直せそうだと考えられます。