EEIC2017成績集計ツール「みんなのせいせき」のれきし

この記事は eeic Advent Calendar 2017の9日目の記事です。

qiita.com

はじめに

EEIC内では有名かもしれないのですが、EEIC2017には自分の成績を登録してもらうことで自分の成績の順位などが分かるツールがあります。登録は任意です。

https://eeic-scores.herokuapp.com/ (EEIC2017の人しかログインできません)

ちなみに、このアプリを公開した際にも一応ブログの記事書いています。

elecho.hatenablog.com

それからちょくちょく変更はありますが、あんま変わっていないのでここでは技術的なことのお話はしません。

どちらかというと、仕様の設計とか作成の経緯などの運営上のひとりごと(ポエム)を書いていこうと思います。

デモサイト

昨日がんばってデモ用のサイトを作ったので、記事を読む前に、こちらで適当に遊んでみることを遊んでみても良いかもしれません。

というかこれ以降のの駄文を読むよりもデモアプリで遊んだほうが面白いと思います。(重要)

https://eeic-scores-demo.herokuapp.com/

本家と比べてログイン手法を簡略化しています。機能はほとんど同じです。

つまり、自由に遊べるおもちゃです。

仕様

ひとりごとに入る前に、軽く機能を紹介してみたいと思います。

主な機能

(2017年4月版~)

  • 成績一覧表

f:id:elecho:20171209123425p:plain

  • 自分の成績の情報

f:id:elecho:20171209123455p:plain

  • 科目ごとの評定分布表

f:id:elecho:20171209123542p:plain

(2017年9月版~)

f:id:elecho:20171209124647p:plain

  • 志望研究室情報

f:id:elecho:20171209135952p:plain

モデル図

気が向いたら作ります(小声)

本題

実績

2017/12/09現在、EEIC2017約120人のうち96人に登録していただいています。

普通にとてもうれしいです。

設計思想

個人差はありますが、成績って実は意外とデリケートな情報です。(こんな怖いツール作っておいてなんですが)

しかも、成績を一科目一科目入力するはなかなかしんどい作業です。

一方、「みんなのせいせき」が意味のあるツールになるためには、多くの方にデータを、それもそれも、なるべくちゃんとしたデータを登録してもらわないといけません。

ということで、やったことは

  • 登録するメリットをいっぱい作る

  • データがそれなりにまともなものであるようにする

  • プライバシーに気をつける

の3つです。

登録するメリットをいっぱい作る

これは、ぶっちゃけ簡単で、機能をいっぱいつけて使いやすくすればよさそうです。(幸いライバルもいないし)

ということで、重要そうな機能から順番に追加していきました。

具体的に言うと、

3/24  公開
3/25  GPA計算機能追加
4/2   評定分布表機能追加
4/10  パスワードを忘れた場合の再設定メール機能追加
9/25  3Sセメスターの成績に対応
9/30  総合得点の分布表を追加
11/15  志望研究室登録機能追加

という流れです。なんだかんだ半年かけて欲しい機能は揃ったのでよかったです。

データがそれなりにまともなものであるようにする

これは、ちょっと考えました。

とりあえず重要だと思ったのは、

  • ①外部の人が適当なデータを投げ込めないようにする。

  • ②重複投稿できないようにする

でした。

  • ③偽情報を書き込ませない

というのも考えたのですが、1日の変更回数を制限するとかいうような、いかにも金融系のサイトがやってそうなルールをつけるのも馬鹿らしかったので、ユーザーに任せることにしました。

(でも、データが本当であるとは限らないというのも、高度な情報戦になる一因なんだよね…)

ちなみに、 サービス開始時はベーシック認証によって①を、3Aセメ開始時にSlack OAuth認証によって②を実現しました。

プライバシーに気をつける

これは、結構むずかしい問題です。

とりあえず、一覧表で名前・志望研究室・評定を各要素ごとに非公開に設定できるようにしています。

f:id:elecho:20171209123245p:plain
ハイフン(-)で表示を隠すことができます

ということで、一応普通なら隠したい情報は隠せます。

でも、頑張ってパズルを解くひとがいると困っちゃうので、何卒よろしくお願いします。

考察:このツールは「高度な情報戦(という名の研振り)」にどのような影響を与えるか

このツールによって自分の成績の立ち位置が分かってしまうことについて。

肯定派

行きたい研究室があって

  • 成績が良かった人は、次の学期で科目数や勉強時間を減らしてのんびり暮らせる。

  • ちょっと成績が悪かった人は、次の学期頑張るモチベーションを得ることができる。

  • 成績が結構悪かった人は、早めに自分の志望の方針を考えることができる。

行きたい研究室が決まってない人も

  • 現在の自分の位置を知ることで、後々自分の行ける研究室を絞りやすくなる。

  • 成績が良ければ、思う存分イキることができる。

否定派

行きたい研究室があって

  • 成績が良かった人は、研振りでの優位性を次の学期で奪われないように勉強を迫られる。

  • 成績がちょっと悪かった人は、勉強を迫られる。

  • 成績が結構悪かった人は、周りの成績の良い人を恨みながら研振り制度への殺意を膨らませる。

行きたい研究室が決まってない人も、

  • もし底点が高い研究室に行きたくなった時に行けるように勉強を迫られる。

マクロ的に見ると

  • 点数を気にして行きたい分野を諦めてしまうのは好ましくない。

  • 逆に、点数が良かったからといってあまり興味がないのに人気の高い研究室に行く人が出てしまうかもしれない。

  • それ以前に、情報が本当に正しいかどうか分からない情報をもとに4年生の1年間を決めてしまうおそれがある。

作者の見解

まず、上記の肯定意見・否定意見はいまさっき考えました。

便利そうだからという理由で作っただけです。作っているときは何も考えていません。

でも、せっかく考察したので、作者として少しだけコメントしておきます。

  • みんなのやや正しい情報をみれるので、研究室振り分けの参考情報としては有用なはずです。

  • ただし、週約20コマとることが前提の競争以上に、絶対正しい保証もない情報を信じて行きたい分野を諦めてしまう方がつらいことなので、ちゃんと自分の信念を持ちましょう。

  • とりあえず、現状のつらさの根源は合計点制度とひたすら囚人のジレンマナッシュ均衡にいこうとする今の風潮です。
    (まあ、研振りが有限繰り返しゲームであるのがいけないよね)

  • そして、一番悪いのは行きたい分野に定員がある世界の不条理さです。つらい。

f:id:elecho:20171209173205j:plain

ちなみに、こんな記事を見つけました。

toyokeizai.net

ということで、B2, B3のみんなは研振り競争がんばらないでね!!(牽制)

余談

アプリの誕生

2017年2月…

このサービスを思い立ったのが、2Aセメ後の春休みが始まってしばらくたった時。

つまり、魔の週21コマ授業とその期末が終わって束の間のおやすみを満喫していた時。

「来学期以降もこんな泥沼進みたくない…」

「でも、行きたい研究室も特に決まってないし、とりあえず合計点だけはもっておきたい…」
【注:(おそらく)EEIC2017までは、B4の研究室振り分けが合計点制度で行われる】

「あ、でも早い時期にみんながどれぐらいの成績なのか分かれば力の入れ加減がわかるかも…?」

「どうやってみんなの成績集められるかな…(。´・д・)」

「たぶんみんなこういう情報知りたいだろうし、掲示板っぽいものを作っちゃおう!」

後日

「せっかくRails勉強したしRails使って作ろっと」

「はじめてのRailsアプリだけど、まあみんなの点数を入力してもらって適当に計算するだけだし余裕だよね~」

~2017年3月24日~

ぼく「あれ、成績4月に発表されるんじゃないの!?!?!?!?!?」

(参照)学事暦

f:id:elecho:20171209160055p:plain

ぼく「え、しかも素点開示されないの!?!?!?!?!?」

ぼく「なんか全然できていないけど、とりあえずなにか作らないとやばい!!!!!!」

最初はグダグダだったとさ(完)

あとがき

このツールを自分たちのコミュニティで運用したい方へ

一応ソースコードはここにあります。 https://github.com/elecho1/score_competing_tool

ただ、もしちゃんと運用してみたい方がいたらTwitterなどにリプを投げてください。

コメントアウトとか不要なファイルを消したきれいなバージョンを作ります。(はじめからやれ)

もう少し丁寧にデプロイ手順などを書いたREADMEを作ります。(はじめからやれ)

特に、EEIC2018以降でやってみたい人歓迎です。

(ただ、強い人はこんなクソコードを使うよりちゃんと実装したほうがまともなサイトができるかもしれません)

そもそも下の代から平均点制度になったしそんなに需要がないのかも…(汗

大規模ソフトウェア(Chromium)を手探る - 設定画面(settings)を手探る2 -

大規模ソフトウェア(Chromium)を手探る - 設定画面(settings)を手探る1 - の続きです。

elecho.hatenablog.com

実験で取り組んだことの概要については、 大規模ソフトウェア(Chromium)を手探る 導入・ビルド編 - あさりさんの作業日記 をご参照ください。

課題3: 設定画面をちゃんと入力画面にしよう

課題2で、設定画面に項目を追加することができました。

ただ、そこでは単純に文字を表示できただけなので、ちゃんと入力欄を作ろうと思います。

入力欄を追加するだけなら<input></input>タグをつけても良いんですが、せっかくならchromiumで使われているものに合わせたいなと思いました。そこでそれっぽいパーツがないか設定画面のなかで探してみると、スタートアップページの追加欄

f:id:elecho:20171030015615p:plain

とか良さそう!

となったので、この画面を作っていた

src/chrome/browser/resources/settings/on_startup_page/startup_url_dialog.html

内の

<paper-input ...></paper-input>

というパーツを拝借することにしました。

続きを読む

大規模ソフトウェア(Chromium)を手探る - 設定画面(settings)を手探る1 -

電気系3年生後期実験「大規模ソフトウェアを手探る」でChromiumブラウザーをまさぐったお話です。

発表スライドがこちらになります。

docs.google.com

実験で取り組んだことの概要については、 大規模ソフトウェア(Chromium)を手探る 導入・ビルド編 - あさりさんの作業日記 をご参照ください。

akaria.hatenablog.com

そうだ、設定画面をいじろう

前の記事(大規模ソフトウェア(Chromium)を手探る user profileに設定を追加する - あさりさんの作業日記)までで、検索ボックスに表示される検索履歴から、指定したキーワードを含む履歴を表示しないようにすることができました。

残りのやることは、ユーザーが検索履歴非表示キーワードを指定できるようにするだけです。

今回は、Chromium内の設定画面にキーワード設定欄を追加することにしました。

f:id:elecho:20171027143347p:plain

課題1: どこを編集すれば良い????

続きを読む

VS CodeでTeXを使う方法

VS Code(Visual Studio Code)でTeXを編集・コンパイルする方法が調べてもなかなか出てこなかったので、記事にしておきます。

AtomTeXを編集するのが便利だよーって聞いたので、AtomでできることがVS Codeでできない訳がないと思ってやってみた次第です。)

VS Codeの拡張機能である「LaTeX Workshop」を利用しています。

以下、設定の手順です。

0. VS Code (LaTeX Workshop)を使うメリット

  • .texファイルを保存時に自動タイプセット
  • コードのカラーハイライト
  • 括弧やコマンドの補完
  • ショートカットによるコードのコメントアウトコメントアウト解除
  • chktexを用いた構文チェック(要設定)
  • 別タブでのコンパイル後のpdfの表示

1. TeXディストリビューションのインストール

まずはTeXディストーションをインストールします。多分なんでもいいです。インストールは結構時間がかかります。
(筆者はTeXLive 2016を利用)

有名なTeXディストリビューションはここに書いております。

TeX入手法 - TeX Wiki

なお、Windowsの場合インストール場所がパスに追加されている必要があります。

通常は自動的にパスに追加されているはずですが、もし追加されていない場合は自分で追加する必要があります。

(参考:Windows10で環境変数Pathの編集方法 | 非IT企業に勤める中年サラリーマンのIT日記

2. LaTeX Workshop(拡張機能)のインストール

VS Codeの拡張機能をインストールします。VS Code内のMarketplaceからインストールすれば大丈夫です。

f:id:elecho:20170429133512p:plain

marketplace.visualstudio.com

3. (オプション)LaTeX Language Support(拡張機能)のインストール

カラーハイライトや補完などの様々な便利な機能が使えるようになります。VS Code内のMarketplaceからインストールすれば大丈夫です。別にインストールしなくても問題ありません。

f:id:elecho:20170429133530p:plain

marketplace.visualstudio.com

4. LaTeX Workshopの設定

タイプセットの設定

デフォルトではタイプセットとしてlatexmkを用いる設定になっています。
しかし、このままでは日本語横書き用の文書クラスであるjarticlejreportを使用することができません。そこで、タイプセットに使うためのツールをptex2pdfに変更します。

まず、Ctrl+,(カンマ)でVS Codeの設定画面を開きます。そして、右側の枠に以下の設定を追加・保存します。

"latex-workshop.latex.toolchain": [{
    "command": "ptex2pdf",
    "args": [
        "-l",
        "-ot",
        "-kanji=utf8 -synctex=1",
        "%DOC%"
    ]
}],

(この設定は、Tex WorksのpLaTeX (ptex2pdf)タイプセットの設定に準拠しています。)

chktexの設定(オプション)

.texファイルを編集する際に構文チェックを利用するための設定です。

タイプセットの設定と同様に、Ctrl+,(カンマ)でVS Codeの設定画面を開き、右側の枠に以下のコードを追加・保存します。

"latex-workshop.chktex.enabled": true

f:id:elecho:20170429133816p:plain

5. LaTeX Workshopの使い方

基本的には、保存時に自動的にコンパイルしてくれます。特に必要な操作はありません。
ただし、いくつか注意しておくと良い点はあります。

pdfファイルを表示する方法

現状、セーブ時に自動でタイプセットは行ってくれますが、自動でpdfは表示してくれません。そのため、pdfを表示させるには一手間掛ける必要があります。

VS Code内で新しいタブで表示させる場合
「Ctrl + L」、「Ctrl + T」を順にタイプ
ブラウザで表示させる場合
「Ctrl + L」、「Ctrl + V」を順にタイプ

また、愚直に表示させることもできます。

手順

  1. texファイル内で「右クリック」→「All actions」をクリック
    (もしくは「Ctrl + L」→「Ctrl + A」をタイプ)
  2. VS Code のコマンドパレットで「View PDF file in web page」もしくは「View PDF file in new tab」を選択

タイプセットが成功したかどうか確認する方法

VS Codeで編集する場合、ログが自動では表示されません(もちろん表示させることもできます)。

そこで、手っ取り早く確認する方法があります。

タイプセットが成功した場合
VS Codeのウインドウの左下に以下のように表示されます。 f:id:elecho:20170427174506p:plain
と表示されてから…
f:id:elecho:20170427174515p:plain
と表示されます。
タイプセットが失敗した場合
f:id:elecho:20170427174515p:plain
と表示されたままになります。
ログやコンソールを開けばどこでどのようなエラーが起こっているか確認できます。

(豆知識)

TeXのタイプセットは通常TeX Worksなどのエディタを使いますが、実はシェルやコマンドプロンプトからも実行できます。

上の設定の"command"に当たる部分が使用タイプセットプログラム、"arg"がコマンドライン引数を表しています。

また、"%DOC%“はtexファイル名を表しています。

参考文献:

TeXworks/設定 - TeX Wiki

TeXworks/設定/Windows - TeX Wiki

成績集計ツール「みんなのせいせき」の機能・仕様の解説(2017年4月版)

先日、学科でテストの成績を集計・順位付けするためのツールを作りました。

私の所属する学科(電気系)では日頃の授業の成績が卒論配属に関係するため、みんな自分の現在位置を知れると便利だろうなと思ったのが作った理由です。
(というのはあくまでも理由の半分で、残り半分は単純にどんな点数分布になっているのか興味があったからです(笑))

「みんなのせいせき」のリンクはこちら:(ベーシック認証がかけてあるため学科の人しか成績の登録・閲覧に進むことができません)

https://eeic-scores.herokuapp.com/

ソースコード (GitHub) はこちら(まだ整理が間に合っておらず汚いです):

https://github.com/elecho1/score_competing_tool

以下、今更感満載ですが「みんなのせいせき」の機能・構成を解説してみたいと思います。

機能の概要

続きを読む

TeX Live(2016)のls-Rの作成を止める方法

 TeX Liveでは、デフォルトの設定ではls-Rというファイルを用いてパッケージやフォント場所の一覧を管理しています。ただし、

  • パッケージやスタイルファイルを追加するたびに
mktexlsr

  コマンドを用いてls-Rの一覧表を更新する必要がある。

  • ls-Rファイル内では日本語ファイル名が文字化けする。

というようなデメリットがあります。

 ls-Rを使うメリットはパッケージの検索時間を短くするためと言われていますが、ハードディスクの速度が上がった今ではls-Rを使う必要性もなくなってきています。

 ということで、ls-Rの作成・利用を止めてみることにしました。

デフォルト設定が書かれている場所

C:\texlive\2016\texmf-dist\web2c\texmf.cnf  

を見てみると、(97行目あたり)

% TEXMFLOCAL precedes TEXMFDIST because locally-installed versions
% should take precedence over distribution files -- although it is
% generally a source of confusion to have different versions of a
% package installed, whatever the trees, so try to avoid it.
TEXMF = {$TEXMFCONFIG,$TEXMFVAR,$TEXMFHOME,!!$TEXMFSYSCONFIG,!!$TEXMFSYSVAR,!!$TEXMFLOCAL,!!$TEXMFDIST}

と書かれています。

 この!!$TEXMFSYSCONFIG!!$TEXMFSYSVAR!!がls-Rを使うということを意味しています。
 つまり、この!!を消せばls-Rを使わない運用に切り替えることができます。ただし、\texmf-dist内のファイルはTeX Liveをアップデートすると書き換わってしまうので、以下のファイルを書き換えます。

設定を変更する場所

C:\texlive\2016\texmf.cnf

内のtexmf.cnfにユーザー自身の設定を書き加えます。

今回は、!!を消した

TEXMF = {$TEXMFCONFIG,$TEXMFVAR,$TEXMFHOME,$TEXMFSYSCONFIG,$TEXMFSYSVAR,$TEXMFLOCAL,$TEXMFDIST}

をファイルの末尾に書き加えます。

こうすれば、ls-Rを用いないパッケージの利用ができるようになります。

TeXworksにテンプレートとスクリプトを追加する方法(Windows)

(追記 17/1/27) TeXworksにおいてスクリプトファイルなどが保存される場所は予め決まっているようです。この場所をどのように変更するか分からないので、ご存じの方はお知らせいただけると幸いです。


まず、デフォルトの設定でのテンプレートやスクリプト・各種設定のファイルの保存場所は以下のようになっています。

TeXworksのテンプレート・スクリプトの場所(TeX Liveの場合)

 C:\texliveにインストールした場合、 テンプレートは

C:\(ユーザー名)\.texlive2016\texmf-config\texworks\templates\

に、スクリプトは、

C:\(ユーザー名)\.texlive2016\texmf-config\texworks\scripts\

に置かれています。

TeXworksのテンプレート・スクリプトの場所(W32TeXの場合)

 C:\w32texにインストールした場合、(おそらく) テンプレートは

C:\w32tex\share\texworks\twdata\templates\

に、スクリプトは、

C:\w32tex\share\texworks\twdata\scripts\

に置かれています。
(ただし、このフォルダがどのTEXMFツリーに属しているかは分からないです…)

続きを読む