carvo update

f:id:note103:20170705123353g:plain

  • Macだと音声も出るようになっているので、音声付き動画も作りました。
    • 6秒目ぐらいで急に音が出ます。

www.youtube.com

  • 以下、つれづれに。
  • 昨日も別のところに書いたのだけど、今回はメンテナンスの邪魔になりがちなファットな要素(=便利だと思っていたけど本質的な要素とはちょっとズレた機能)をザクザク外すのが主な変更。
  • テストもちょっとだけ入れつつ。
  • 未解決の問題として、どうもどこかの段階で、ファイルへの回答記録記入の動作に不具合が生じてしまった模様。
    • ゲームの途中で単語カードを切り替えた場合、切り替える前の記録が消えてしまう。
    • 正答/誤答数などを記入する `result.txt` の方は無事なようだけど、詳細に英単語などを記録する `log.txt` の方が上書きされてしまうみたい。
    • 以前は何回切り替えてもすべて保持していたのだけど……。
    • よって、ヘルプから記録に関する文言を一旦カットして、忘れないように自分でIssue登録しておいた。
  • 今後のTODOとしては、上記バグ修正のほか、残りのテストを充実させること、その流れでTravis CIとの連携を復活させたいところ。
    • CI連携に関しては、以前に少し頑張ってカバレッジ可視化サービスと繋げて表示したりもしていたのだけど、なにしろ拙い&多めのコードを全然カバーしきれず効率悪かったので一旦やめていた。
    • まだまだ自分の中でも整理できないまま動かしている部分が多々あるので、その辺を整理しつつテストも補って、というふうに進めていきたいところ。
  • 最後にREADMEを貼っておきます。
carvo

cards of vocabulary

## 説明
- 英単語の学習を行うゲームです。
- 出題される設問に対応する回答を選択肢から選びます。

## 使い方
1) 任意の場所にルートディレクトリを設置して中へ入ります。
```
$ cd carvo
```
2) `carvo.pl`を実行します。
```
$ perl carvo.pl
```
3) 表示される選択肢から希望する「カード」を選びます。
4) コマンド群から`play`を選択すると設問が表示されます(英単語、英文、簿記仕訳科目)。
5) 対応する回答を選択肢から選ぶと、正答なら`Good!`、誤答なら`NG!`という結果が表示されます。

### 機能
`help`コマンドを選択すると機能一覧が表示されます。

```
- play	次の問題を出題
- again	同じ問題を出題
- change-card	プレイを終了してカード選択画面へ移動
- exit	ゲームを終了
- list	カード内の単語を一覧表示&選択した単語へ移動
- fail	誤答カードへ移動
- voice	音声機能のon/off(macOSのみ)
- help	ヘルプ表示
```

### 得点
- 正答なら`hit`, 誤答なら`error`, その合計を`times`として加算します。
- 得点はカードやレッスンを切り替えても保持され、ゲームの終了時に回答記録と成績が出力されます。

### 単語カード
- `src/lesson`ディレクトリに入っている単語カードはサンプルです。使用者の好みに応じて書き換えてください。
- `dict.yml``英単語: 和訳` 形式で辞書を作成し、同ディレクトリ内に `.txt` 拡張子でファイル(単語カード)を作成します。
    - `sample.txt` というファイルを作成すればゲーム内の選択肢として `sample` が現れます。
- 単語カードには辞書で記載している英単語のみ使用できます。

## 依存ツール
コマンドラインツールの`peco``cho`が必要です。
- [peco](https://github.com/peco/peco)
- [cho](https://github.com/mattn/cho)

## ライセンス
Copyright (C) Hiroaki Kadomatsu.
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

## 作者
Hiroaki Kadomatsu (@note103)
- [Blog](http://note103.hateblo.jp/)
- [Twitter](https://twitter.com/note103)
  • 書き忘れていた。
  • 大きめの変更として、以前は単語のみならず英文とか、あるいは英語ですらなくて簿記の勘定科目なども同じ機構を使って扱えるようにしていたのだけど、今回の変更で英単語のみを対象とすることにした。
    • というのも、第一に現在メインで扱っている英単語の場合にはYAMLファイルで辞書(ゲーム中に使用する英単語&和訳の組み合わせデータ構造)を生成しているのだけど、文を扱うにはどうもPerlYAMLモジュールがうまく動いてくれなくて、JSONファイルで管理しなければいけない。
    • しかしJSONで元のカードを作るのってけっこう面倒で、だからじつは元々すべてJSONにしていたのだけど、せめて英単語だけでももっと簡便にしたいと思って英単語だけYAMLで管理するようにしていた。
    • で、そうすると確かにメインで使っているものをYAMLにした分、多少ラクにはなったものの、やはり2形式並行して扱うのは面倒だなと思ってJSONが必要なファイルはバッサリカット。
    • それから、簿記勘定科目の場合はYAMLで動いたのだけど、今度は機構の都合で設問用単語と回答用単語を逆に扱わなければならず、簿記科目のためだけにコードが倍とまではいかないまでも不当に増えてしまっていたので、それもどうかなあ、と思ってやめることに。
    • これらのカードについては別途ツールとしてまた整理したいところ。
  • 上記変更により、今まではまず「コース(英単語OR英文OR簿記科目)」を選択してから、その中の「カード」を選択していたのだけど、その最初の分岐が不要になったので、カード類を収めるディレクトリもだいぶシンプルになった。