はいどーも、キモオタクです。今回は刃を向けるシリーズ第二弾ということで、張り切っていきましょう。
皆さんは■■大学についてご存知ですか?そう、あの国立大学の■■大学です。ガチのFラン大学に身をやつす個人としては見上げるのみの高嶺の花、ならぬ盆地の大学ですね。
風のうわさで聞いたのですが、その■■大学で流行しているeスポーツがあるそうです。その名も
「Virtual ピ逃げ」
?????????????????
読んで字のごとく、です。大学の講義で出席だけ取って帰る行為である「ピ逃げ」を、完全オンラインで行うことをVirtual ピ逃げと呼びます。■■大学は出席を机に貼ってあるQRコードを読み取ることで行うため、本当に家から一歩も出ずに対面講義の出席が取れるわけですね。素晴らしい。
Virtual ピ逃げが可能になったことにより■■大学内の出席率は大幅に向上したそうです。しかしその影でそもそも授業時間内に起きれない社会不適合者の存在が浮き彫りに…
前置きが長くなりましたが、そんな救えぬ者共のために「Virtual ピ逃げをC#とSeleniumで自動化した」というのが今回の記事の趣旨です。
ここからダウンロードできます。
公開停止中
↓から自分でビルドして使ってね
GitHubにも上げてます。
要件定義
画像のようなソフトウェアが必要なわけです。まあちゃっちゃと作っていきましょう。
設計
Selenium部分
URLを開く→ログイン→QRを読み取るをクリック
簡単ですね。そのまま書けばいい。
ウェブカメラ偽造
ここが一番面倒くさそう。択が3つあって
①仮想ウェブカメラを作り、そこからブラウザ上に映像を流し込む
②Seleniumの機能の、Webカメラテストみたいなのを使う
③大学のサーバに送信しているのは画像ではなくQRのデータなので、文字列情報を直接送る
という感じ。結局①みたいな方法で実装した。
時間指定で実行
作るソフトはバックグラウンド動作させず、ずっと表で働いてもらう予定。なのでThread.Sleepで指定時刻と現在時刻が一致したら実行する小学生プログラマー方式でいいと思った。
ただ、毎回授業開始時刻と同時にピするのは怪しまれそうなのでランダムで遅延させる必要あり。
UI
こんな感じで行くぜ俺は
できたもの
画像とID、パスワードを設定して実行すると、時間になったら勝手にログインしてくれるくんです。
ただ、工数の関係で仮想カメラを実装できなかったため、OBSの力を借りています。
言い訳なんですけどC#からドライバに触るのすっっっっっごい面倒なんですよ…
画像を出力しているウィンドウをOBSにキャプチャし、その映像を仮想カメラとしてQR出席ページに読み込ませます。
時間になったら画像が表示されているウインドウにQRが表示され、本ソフトが自動でログイン→認識まで行ってくれます。便利!
もちろんですが完全無料です。ぜひダウンロードして使ってみてください。
使い方
Ver 1.0.0リリースに伴い追記
まあ見りゃわかるような作りにはしているつもりですが一応解説します。
注意!このソフトを使う際はパソコンにつながっているウェブカメラを全て取り外し、再起動してから作業を行うことを推奨します。
まず、当ソフトはOBSに依存しているためまずはOBSをインストールする必要があります。
インストールしたら、AutoQR本体を解凍し、AutoQr2.exeを実行してください。
こんな画面が出てくると思います。
OBSパスはobs64.exeを指定してください
ログインIDとパスワードは、ACSUにログインするやつを入力してください。当ソフトがこれらの個人情報を収集することは一切ありません。
その後実行ボタンを押すと、AutoQr2のウインドウとOBSが起動します。
初回起動時のみ、このカラーバーが表示されているウインドウをOBSに読み込ませる作業が必要です。
左下のソースから
+をクリックし、
ウインドウキャプチャを選択
新規作成でOKを押したら
このウインドウを選択し、OKを押します。画面上の大きさは適宜調整してください。
AutoQr2のウインドウに戻ります。この状態で
右下の動作チェックボタンを押すと、自動でACSUにログインし、カラーバーがウェブカメラに映し出されるはずです。
この作業が終わったらAutoQRを再起動し、1限~4限までの画像を指定し実行を押します。これで明日の出席はバッチリだぜ!
参考文献
いつもお世話になっております。
感想
キモ・オタク的な話なのでここは読まなくていいです。備忘録として書いているだけなので。
C#は作ったものをリリースするのがすっごい楽
開発にかかる労力はpythonとかのほうが間違いなく低いのですが、pythonはexe形式でのリリースが非常に面倒です。その点C#とwinformsだと即ビルド即開発ができるのが素晴らしいですね。あとWindows特化のソフトウェアを作るための要素がほぼ全て揃っているので、毎回インポートする手間がなくて非常によろしい。将来のCOBOLおじさんならぬ、winformsおじさんになりそうです。
高速プロトタイピングの話
今回は製作期間が3日ということで、まあ「デキる人」であれば数時間で作れる内容ではあるのですが、僕基準ではとても速いスピードで形にできました。今手元にあるもの(前学んだ技術やライブラリ)をフルに使える環境であれば、やはり開発は加速するんだなとおもいました。(小並感)
ただ、小規模なプログラムだから適当でいいだろうと仕様書のようなものを書かずにプログラミングを始めてしまったのはマズかったですね。①作るものの完成図を明確にイメージする、②必要な機能を書き出し、クラスや関数に分ける、という工程を踏んで作ればもっと楽だったでしょう。これ毎回言ってる気がするな…
ユーザビリティについて
「使いやすいものを作る」というのはソフトウェア制作において最重要レベルで大切なものだと考えていて、それを実現するためのデザインや技術力がなくて四苦八苦しています。今回はデザインはまあまあわかりやすいものを作れたと自負しているのですが、OBSを介して動作する性質上、少し初回セットアップが煩雑になってしまいました。ここらへんをワンポチでできたらユーザ体験はかなり向上すると思うのですが、いかんせん技術が追いつきません。C++勉強しようかな…
啓蒙としてのプログラム
これは、啓蒙のための道具だったんだ。人が人らしく生きるために、家畜のような惰眠から目を覚ましてやるために
引用:PSYCHO-PASSより 槙島聖護
言ってみたかっただけです。
テストの重要性
機能テストしろ!!!!!!!!!!!
動かないものをリリースするな!!!!!!!!!!!!!!!!!
まとめ
やっぱりこういうグレーなプログラムを作っているときが一番楽しいです。実装が簡単かつ新規性があるので…。
皆さまが快適なVirtural ピ逃げライフを遅れることをキモオタク一同願っております。
では。