0コメント

「布教用記事」大学の課題を管理する「your_burden」をとりあえず最低限使えるだろうという状態でビルドしてみた【Python 3.10】

【追記(2021/10/31 04:40:50)】

色々と誤植が多いのとバグ見つけてそのまんまだったり、そもそも記事の内容分厚すぎるので近いうちに訂正版出します。気に食わない人はそれまで待ってください。


スクリーンショット 2021-10-30 181720.png


・・・と、このようにとりあえずある程度例外処理にも対応できる状態にして、使えなくはないだろうという出来栄えまでようやく持ってきたので


公開してみようかなという所存。という訳でこの記事では使い方の説明と配布先のリンクを記述する。

目次

  1. そもそもこのプログラムは何?何が出来るの?
  2. どうやって使うの?
    1. ファイル作成
    2. 課題の追加
    3. 課題を一括で追加
    4. 現実を見る
    5. 課題を玉砕(過大を終わらせた後に行うためのものではない)
    6. 完了フラグを付ける
    7. 【β1.0.0利用者向け】ファイルの修復
  3. このプログラムを作った理由
  4. ベータ版ビルドです。最後に注意書き

そもそもこのプログラムは何?何が出来るの?

 このプログラムは、your_burden(あなたの重荷)を管理するプログラム。管理してくれるだけで、自動で課題をこなす訳じゃないので注意。

 大学から毎週毎週課題が出されるであろう。でも、曖昧にしか把握しておらず結局後回し後回しで「しまった!提出し損ねた!」とか、「これ今日の23時55分までなのに、気づいたときはもう23時過ぎ・・・」とか、「毎回一つ一つスマホにメモるの面倒」とか。そういったことを改善できるものを目指したプログラムだ。

どうやって使うの?

 使い方は簡単。課題を登録して、課題を見る。課題を管理するだけなので基本的な要素はそれだけで、それに加えて「完了したら完了フラグをつける(完了状態にする)」だとか、提出期限を登録して「一週間以内が期限の課題だけ見たい」とか。こんな閲覧方法、一元管理があったらいいなを実現した物なので、これからも要望や発想があれば機能を追加していく予定。


では、機能を一つずつ紹介。

ファイル作成
 プログラムを使うにあたってまずはデータを管理するためのファイルを設置する。

スクリーンショット 2021-10-30 182959.png

 プログラムを起動すると、こういう説明が・・・・・ちょっと待て。

同じ階層に記録用ファイルって・・・使い方説明と矛盾しているような。w

 これは1.0.2で修正しておきます(;^ω^) とにかく、データのファイルはこの画面でOKを押したときにホームディレクトリ直下にburden.txtとして新規作成される。念のため、誤って削除しないように覚えておいてください。(ホームディレクトリはdesktopフォルダなどが存在する' C:\Users\ユーザ名\' のディレクトリを指します。)


 過去に作ったファイルを引き継ぐ、というのはβ1.0.0を利用していた人向けの機能で、burden.txtがプログラムと同じ階層に保存されていたのでそのデータをそのままホームディレクトリ直下に移動させてβ1.0.1以降でもデータを継続的に利用できるようにすることを目的とした機能。つまり、このプログラムを現在ビルドβ1.0.1で初めて知った人はスルーでOK。

(というかβ1.0.0を配布したのは大学内で友達二人だけなので、その方以外には関係ないです。)


 ファイルを新規で作成してプログラムが動作できる環境になると、次回から起動時にメインウィンドウが開くようになる。

スクリーンショット 2021-10-30 183607.png


課題の追加
 この操作は文字通り、課題を追加する操作となる。

スクリーンショット 2021-10-30 184533.png

 科目名と、課題内容(リンクとかを入れてもOK)、提出期限はcalenderボタンを押してカレンダーを表示し提出期限がいつまでなのかを指定する事が出来る。


スクリーンショット 2021-10-30 184739.png

 ①は今日の日付、②で月を移動、③で年を移動。それだけ。どっかの日付(期限の日)をクリックすることで勝手に項目にフォーマット通りで入力される。


スクリーンショット 2021-10-30 184933.png

 こんな感じで入力されるのだが、時刻は時:分:秒のフォーマットになっており現在時刻が勝手に代入される。しかしデータを登録するときに分と秒はゼロに変更されて保存されるので注意。時間は24時間表記で、これは各自で設定して欲しい。例えば、私が履修しているプログラミング基礎Iは前日までにレポートと小テストを提出しておけばTeams遠隔で講義を受けていいことになるので、「2021-mm-dd 23:mm:ss」と入力するなど。


スクリーンショット 2021-10-30 185346.png

 また、課題を追加することもできるが終わる場合は「追加せず、終了」を押す。同じ科目の課題を連続で追加するならチェックして「追加」を押すことで科目名が引き継がれる。チェックせず「追加」を押すと入力値が全部リセットされて再度入力できる。


課題を一括で追加
スクリーンショット 2021-10-30 185416.png

 基本的には課題を一つ一つ追加するよりは、こちらの操作で一括で最終講義分の課題まで登録してしまう使い方が基本となると踏んでいる。こちらは、文字通り一括で課題を追加する事が出来る。


 一通りの入力は「課題を追加する」と同じなので割愛する。この操作特有の項目「最初の提出時の回」と「最後の提出回」の入力欄がある。ここには半角数字で入力して欲しい。・・・というか、ここも選択肢にしておけばより使いやすくなるかな。次期バージョン為にメモっとこ。

 一括で課題を追加するというのは、例えば「英語科目、毎回課題が教科書と、ワーク2ページと、発音テスト動画と、会話動画と、カルタゲームのスクショが毎週課題なんだよね~」という場合、毎回毎週同じことをデータに登録するなんてのは・・・面倒。というわけで、一括で追加してしまうことで一度の操作で全てが丸く収まる。という訳だ。


 ちなみに休日分をスキップする機能を実装しようと思ったんだけど、実装し損ねた。おそらくβ1.0.2がすぐリリースされると思うので次の祝日や休みの日までには間に合わせよう。


 具体的な使い方としては、「次回の英語(第6回講義)の課題提出期限は火曜日の午後3時。そんで、最後(第14回)は期末試験で課題がないから第13回目まで課題が出る。」・・・という場合

スクリーンショット 2021-10-30 190338.png

 こんな感じで入力すればOK。


スクリーンショット 2021-10-30 203100.png

 そうすることで、このように七日おきに期限が来るようにデータを自動で追加してくれる。(これは一例)課題を閲覧する機能には期限が現在から一週間後の範囲にある物だけを表示する機能があるので、閲覧には問題ない。


現実を見る
スクリーンショット 2021-10-30 204400.png

 このプログラムの醍醐味。追加した課題はちゃんと一覧表として表示して閲覧することが出来る。これにより今週あとどの課題があるのか、期限はいつまでなのかをぱっと見で確認することが出来る。

 これに関しちゃとりあえず見ることが出来るという感じで実装しているので、もっとグラフィカルに閲覧できるようにしたり、期限順でソートしたり、操作も約七種類で制限しているので改善したいなとか、いろいろ考えは浮かんでいるのでそのうち実装していこうかなと思ってる。けど、とりあえず今回はこのくらいで勘弁。^ω^


スクリーンショット 2021-10-30 213601.png

 ちなみに、表示条件はこのようになっている。基本的には1週間以内の課題を表示する、程度でいいだろうって感じでこうなった。期限が迫っている未完了の課題は文字通りで全ての課題を(一括追加したものもすべて)表示するというもの。まあ、これはすべて記述通りだ。ただ、提出期限の日付時刻を入力する欄、これは「指定日時以降が期限の課題」を実行するときに必要なだけなので他の項目では入力は必要ない。(現在時刻が標準として扱われる)。


課題を玉砕(過大を終わらせた後に行うためのものではない)
 課題を表示した時に、自動的に割り振られた番号も一緒にNUM:〇〇として出力される。その番号を指定することでフラグを変更したり、データ自体を削除する事が出来る。このウィンドウでは番号を指定して実行することでデーの存在自体をなかったことにする。

スクリーンショット 2021-10-30 222320.png

 例えば間違えたデータを入力してしまった場合。

スクリーンショット 2021-10-30 222404.png

 閲覧時に番号を確認する。この場合は2となる。

スクリーンショット 2021-10-30 222516.png

 エラーになった。('ω')ビルド前に動作検証してなかったアアアアアアア!!!!!!!!!! この機能は次回アプデ時に修正します。今のところは見なかったふりして下さい。(^ω^)


完了フラグを付ける
スクリーンショット 2021-10-30 222750.png

 こっちもβ1.0.0ビルド時確か動作しなかった(正確にはフラグを変更しようとした時にクラッシュするか、フラグを連続で2回変更した時にクラッシュする問題があった。)が、ちゃんと動作するようになった。

 しかしこっちでもバグを見つけてしまった・・・データ自体に支障はないが、不正な値を入力して実行すると何故かメインウィンドウが開いてしまうという。これ、メインウィンドウは動作するけどそのフラグ変更ウィンドウが動作しなくなる。

スクリーンショット 2021-10-30 223047.png

 こんな感じになってしまう。おそらく変に巻き戻る処理してるんだろうからβ1.0.2でこれも修正する。ちなみにこうなってしまった場合フラグ変更ウィンドウを✖ボタンで消してもらえれば大丈夫。


 本題をまだ記述していなかったので書いておくと、完了フラグをデータを削除する時と同じ感じで番号を指定することで未完了から完了に、完了から未完了に設定する事が出来る。完了に設定することで課題を表示する時に完了した課題を表示しない項目を使えば表示できなくする事が出来る。


【β1.0.0利用者向け】ファイルの修復
スクリーンショット 2021-10-30 223930.png

 文字通り。今回初めてプログラムを利用する方には全く関係ないお話。説明にある通りで、技術的な内容になるがさっきのフラグを変更するための項目などで固有識別番号が必要なのだが、割り振りが上手くいかず0番データが複数個出てきてしまう・・・とか。そういった場合に番号を再割り振りするための修復機能。ちなみにこのデータ重複バグが起きてない状態で修復ボタンを押しても、バグを検出できず処理はスルーされる。


このプログラムを作った理由

 最初に記述した通り、課題を一元管理できたらいいなという考えもあるのだが、「誰かに使ってもらう」=分かりやすいインターフェース、すなわちGUI(Grphical User Interface)で操作しやすいプログラムをなんとなく一度くらい作ってみようかなと思ったから。豊富なライブラリを備えるPythonで存在するPySimpleGUIを使って、GUIで操作できる仕組みを実装してみたがやはり抜けというか、バグがなかなか多くて修正が大変だなって思ったりとか('ω')

 そして、見やすいコードみたいなのもほんの若干だけ気にしたりしてみた。まあ、プログラムを書く練習の一環みたいな感じ。それに、この記事を書いている途中で「あ、フラグ変更とデータ削除処理は検索機能ウィンドウと一緒にしたほうが使いやすそうだな」とか思いついたり、ある程度ざっとビルド前に検証したけどこういうバグがまだあったか・・・と気づけたり。

 まあ、簡単に逝ってしまえば、「趣味」。


ベータ版ビルドです。最後に注意書き

 もう注意書きというか色々欠陥が割とあって(???)、とにかくテキスト出力ボックスのテキストを変更出来てしまったり、操作で逆三角ボタンを押さずに適当にテキストを入力してOKする事が出来たり(これは例外エラーが起きると思うのでやらないでね)、しかも多分ユーザーに項目を入力してもらうボックスでなんか特殊記号を入力したりすると例外エラーが起きる可能性とかもあって。そういう問題点が見つかり次第、是非匿名で構わないのでこの記事のコメントか製作者本人にメッセージを送ってもらえるとありがたい。

 一部の処理においては例外エラーが発生した時エラー内容を表示するようにはしてあるけれど、本当に予期していないエラーの場合プログラムが即落ちするか、Pythonの機能のエラーウィンドウの方が出てくる。そういう場合はその画面をスクショ取ってアップロードサイトにアップロードしてリンクをコメントで投げてくれるでも普通にラインやdiscordで投げてくれるでもしてくれるとありがたい。


 また、コードは滅茶苦茶リファクタリングのやりようがあるような、初心者が記述したコードなので(Python書き始めたの5月とか6月辺りだったし)しばらくは継続的に更新していくつもりなので、更新が何かあればこの記事に追記していく予定。是非定期的に確認して欲しい。


スクリーンショット 2021-10-30 225039.png


Githubのリポジトリ→https://github.com/nekoy3/python_build

このプログラムは「your_burden_バージョン.exe」という名前で置いてあるのでぜひ使ってみてほしい。ソースコードはyour_burden.py(Python 3.10)


スクリーンショット 2021-10-30 225227.png

リポジトリにアクセス→exeファイルをクリック→この画面の右下の方にある「Download」からダウンロード。



 最後にもう一つ注意書き。ソースを置いているので悪意のあるコードが存在しないのは分かると思うが、このプログラムはpyinstallerによってビルドされているため、悪意あるソフトウェアとしてよく利用されるpyinstallerを使ったプログラムだとWindows Defenderにスパイウェア系かトロイの木馬系のウィルス定義に引っかかるのかよく分からないが勝手に削除されるケースがあった。(β1.0.0、この現象に対する対処はいまだに特にい行っていない。)

 しかもこれが、同じ機種のパソコンの中でも引っかかる場合引っかからない場合があるらしく、友達二人に渡して片方はウィルスチェックに引っかかりもう片方は普通に「製作者不明」としてSmartScreenが表示されるだけで削除されなかった。



①勝手にファイルが消滅した

設定→更新とセキュリティ→Windowsセキュリティ→Windowsセキュリティを開く→ウイルスと脅威の防止→

にて、おそらくyour_burden.exeが「重大」判定で既に削除されている、という可能性があるので「デバイスで許可」にチェックして「操作の開始」ボタンを押すことでおそらく対処する事が出来る。


②Windows SmartScreen「不明な製作者」で「実行しない」ボタンしか出現しない

詳細を表示をクリックすると「実行」ボタンが表示されるので、それをクリックして実行する。


これらでおそらく対処が可能。 



※このプログラムはWindows 10での動作のみサポート。


※プログラムのソースコードは、そのまま「私のプログラム」を言い張ることは禁止するが、出典元を明記し何かしら改善的な変更をしたうえで公開するのであれば、連絡してもらえれば許可する。


※脆弱性がないわけでもバグによってデータが消滅しないとも言い切れないので、「burden.txt」はバックアップを定期的に取ることをオススメする。この機能は、β1.0.2で実装するかもしれない

★追記情報
--β1.0.2リリース(青字は機能的なモノ)
〇データの番号を再割り振りするメソッド作成確認用ウィンドウを表示するメソッド作成(キャンセルボタンが付いている)
祝日で課題を一括追加した場合に都合が合わなくなる問題を手動で修正できる機能を追加
一括課題追加の回指定をプルダウンメニュー指定方式へ
プルダウンメニュー全般でユーザーがテキストを編集できないように修正
〇データを削除するときに確認画面を表示するように変更
○課題フラグ、データ削除操作で整数以外を入れるとバグが発生する問題を修正
〇その他、どう捜査すればいいのか分からなくなるような異常な画面表示、復帰、不正値を入力した時にバグが発生する問題を認知している分のみ修正

この記事へのコメント