memorandums

日々の生活で問題解決したこと、知ってよかったことなどを自分が思い出すために記録しています。

コミットIDの重なりで不正提出課題を検知できる。。。寂しいことだがまぁ僕が学生ならやらなくはないな、と。

プログラミング演習でServletJSPからRailsに切り替えて久しいです。逆にいうとまだRailsやっているのか?と昨今の開発環境事情を想像すると言われるのかもしれません。

ここ2、3年はもうRubyRailsはオワコンなどというネット上の発言も目にしますし、最近はそういう議論すら見かけなくなりました。それでも、Railsは超高速開発の元祖だし、Rubyの文法は好き嫌いはあるかもだけど、やはり開発者が好きなスタイル(簡潔さと自由さ)だし、そもそも開発者が日本人だから推したい気持ちもあるので。

Python?便利だよね?画像処理とかデータ処理とか機械学習とかライブラリが充実しているし、インデントも強制できるし。でもなぁ。。。うーん。。。メリットはもちろんあるけど、うーん。。。となっています。

思い返すと、Railsに切り替えるときもRailsの存在を知ってから実際に切り替えるまで5,6年(もっとかなぁ)はかかったように思います。当時は企業もJava中心だったし、フレームワークは楽なのはわかるけどブラックボックスと格闘するより自分でイチから作る方が理解が深まると思っていました。昔でいうWin32とMFCみたな感じ。。。といってわかる人は少ないな。X windowとMotifとか。古すぎる。。。

その辺は書き出すとただの個人の趣味だと言われるだけなので。。。やめておきます。Railsはもう少し続けたい、とは思っています。まぁ、PythonでもPHPでもJSでもいいんですけどね。。。もう。いっそJavaに戻そうかとも思ったりしているくらいです。

本題と。

今朝、コーヒー飲みながら研究データを整理していて気づいたことが1つありました。それを書いておこうと思ったのがはじまりです。研究データといっても、要は学生さんのプログラミング課題の提出物になります。今の研究テーマの1つはプログラミング教育なので。

Railsの回の提出物はRailsディレクトリ丸ごとClassroomに提出してもらっています。Googleのね。Railsは標準でGitリポジトリに対応しているのと、僕が研究用ツール(例外が発生したときに自動コミットする)を使うように学生に指導しているのでそういうデータが取れるようになっています。開発でGit使う場合、どうするねん?と思うでしょう。できません。。。Gitを開発で使う前の段階ですね、使えるのは。以下、シンポジウム論文ですが、よく最近ここで発表させてもらっています。なぜかPDFの直リンしかなかったのでクリックするとPDFがダウンロードされます。ご注意を。

ログファイルと Git リポジトリを用いた Ruby on Rails の初学者の 躓き要因の分析

で、学生さんらのGitリポジトリからコミットデータを取り出して眺めているといろいろと発見があって面白いですね。

で、今日、見つけてしまったのは。。。コミットIDの重複現象。。。でした。Gitを利用した経験があれば何を言っているのかわかると思います。コミットはそのときのディレクトリ内にあるファイルをデータベースに登録する仕組みで、それぞれのコミットにはIDが自動的に割り振られるようになっています。原理的にはIDは自分自身はもちろん他の開発者とも重ならないくらい数字になっているそうで、ここによると以下だそうですが、直感的によくわかりませんがコミットIDが重複することはかなりありえないということだと思います。

非常に大きなプロジェクトで、1000人のアクティブな開発者が、日に10回のコミットをしたとする。この場合、4×10の17乗年間活動を続けると、50%の確率で衝突が発生する。

が、しかし。。。提出された課題には同じコミットIDがいくつかありました。。。

どうして発生するのか?

友人からRailsディレクトリを丸ごとコピーしてもらうわけですね。それで課題を提出する。。。と当然ですが、Gitのデータベースは元と同じですからコミットIDも同じになります。

なぜ発見できないか?コードが小さければレポートのコードをみてある程度は比較できるのですが、コロナ時代から利用開始したGoogle Classroomでの各個人のファイルへのアクセスはとーーーーっても遅いのです。ファイルを見て切り変えるまで2,3秒かかる。面倒だから一括ダウンロードしてみようとしてもIDが付与されていないから見分けもつかないうえ、提出期間に複数回提出すると同じファイルが複数できてどれが最新なのか見分けがつかない状態になりまして。。。それを何とかしようと書いたのが以下でしたが。。。大学教員であれば一度は利用したことがあるはずのmoodleと比べるとあまりにも使いにくくてどうしてこうなるのか。。。たぶん作っている人は使って仕事したことがないんだろうな。。。と思います。

memorandums.hatenablog.com

ほとんど愚痴になってしまいましたが、Google Classroomの仕様とそれをカバーする努力が足りないせいでチェックが十分にできないためこういうことが起きてしまうわけでした。。。残念ですが。

自動コミットツールに、ワーニング出す機能を追加するか。。。見られている感というのはやはり大事で。ちょっと来年度まで考えないとな。。。という感じです。