tag:crieit.net,2005:https://crieit.net/boards/e-typing/feed 「e-typing分析プロジェクト」の投稿 - Crieit Crieitで「e-typing分析プロジェクト」ボードに投稿された最近の投稿 2019-08-19T07:25:48+09:00 https://crieit.net/boards/e-typing/feed tag:crieit.net,2005:PublicArticle/8-18 2019-08-18T21:13:15+09:00 2019-08-19T07:25:48+09:00 https://crieit.net/boards/e-typing/8-18 8/18進捗 <h2>個人ページ</h2> <h3>「サマリ」タブ</h3> <p><a href="https://crieit.now.sh/upload_images/c6a4b4840dc7b0443a48a1205e7fb4455d593c36cd7a1.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/c6a4b4840dc7b0443a48a1205e7fb4455d593c36cd7a1.png?mw=700" alt="" /></a></p> <h4>テーマでGROUPBYした結果を表示</h4> <h4>スピードメーター実装</h4> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://github.com/palerdot/react-d3-speedometer">react-d3-speedometer</a></li> </ul> <p>針が動くアニメーションもあるのでUIがリッチに。</p> <h4>ダッシュボード(要約)実装</h4> <p><code>with rollup</code>オプションをつけてGROUP BYしたので最後の行を切り取ってスピードメーターの隣に実装した。</p> <h2>タイピング練習実施状況UI改善</h2> <p>以前はカレンダーの日付全体を囲っていましたが、<br /> バッジで回数も表示するように修正しました。<br /> <a href="https://crieit.now.sh/upload_images/6efcdc5aa4d5da870580c4ccfbed19b65d593ac530464.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/6efcdc5aa4d5da870580c4ccfbed19b65d593ac530464.png?mw=700" alt="" /></a><br /> レスポンシブに対応しきれてなくて、スマホだとなぜか<code>バッジ自体が非表示になる</code>という問題が。</p> <h2>レスポンシブ対応</h2> <ul> <li>画面幅が狭まった場合にフォントサイズを縮小</li> <li>テーブルを要素内スクロール</li> <li>スクロールバースタイル適用<br /> <a href="https://crieit.now.sh/upload_images/86c3700cea3d78c9d5d311604d4663d65d593b6c4ddc9.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/86c3700cea3d78c9d5d311604d4663d65d593b6c4ddc9.png?mw=700" alt="" /></a></li> </ul> <h2>コンテナ自動リスタート設定</h2> <p>ホストマシンが再起動した時に自動でコンテナを再起動する設定をdocker-compose.ymlに記述してやります。</p> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://qiita.com/eijenson/items/25b35916afa38cdf9cea">docker-composeでOS起動時にコンテナを自動起動する方法</a></li> </ul> <h2>総括</h2> <h3>UI</h3> <p>UIの調整は多少必要だと思うが、最低限実用できるレベルのものはできたのではないか。UIは個人開発している<a href="https://crieit.net/boards/baseball-score-management">野球リーグスコア管理システム</a>で使った技術がほとんどなので、あまり技術調査しなくても実装できるようになっていたのが大きい。配色パターンも以前同僚に教えてもらったのでなんとなく理解できており、UIに関するセンスも以前に比べるとだいぶ改善したように思う。</p> <h3>デプロイ/インフラ</h3> <p>今回はラズパイへのデプロイになるが、<code>nginx</code>の設定でちょっとしたミスからどハマりするなど、docker-composeに対する理解はまだまだ不十分だと感じる。<br /> どハマりするものの、問題点に自分で気づけて、自分で修正できるのは大きな収穫。</p> <h2>今後の展望</h2> <p><strong>タイピング部分を自前で実装したらchrome拡張とか要らないんじゃ...?</strong></p> <h3>問題文(日本語)をどう表示するか</h3> <p>タイピングに使わない区切り文字を使えばよさそう。</p> <ul> <li><a target="_blank" rel="nofollow noopener" href="http://sakanasakanasakana.hatenablog.com/entry/2018/04/19/011945">jqueryでタイピングゲームを作成してみた</a></li> </ul> <h3>reactで作られているタイピングゲーム</h3> <p>wpmの考え方入っているので使えそう。</p> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://github.com/cjbassi/wpm-react">wpm-react</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://github.com/corocn/symbol-typing">symbol-typing</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://github.com/chanchihiro/Typing-game">Typing-game</a></li> </ul> ckoshien tag:crieit.net,2005:PublicArticle/8-17 2019-08-17T23:38:57+09:00 2019-08-19T07:31:32+09:00 https://crieit.net/boards/e-typing/8-17 8/17進捗 <h2>グループページ</h2> <h3>練習履歴タブ</h3> <p><a href="https://crieit.now.sh/upload_images/b08b548caec5795ad40e35af9c85f4c95d580afabae9f.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/b08b548caec5795ad40e35af9c85f4c95d580afabae9f.png?mw=700" alt="" /></a></p> <ul> <li>オレンジ中心の配色に</li> <li>テーブルヘッダのフォント縮小</li> <li>50%ぐらいレスポンシブになった</li> <li>ページネーション追加&スタイル修正</li> </ul> <h3>サマリタブ</h3> <p>該当グループに所属するメンバーの成績のサマリを表示します。<br /> そっか、<strong>MySQL中央値出ない</strong>んだった..(技術選定ミス)<br /> <a href="https://crieit.now.sh/upload_images/7f39cb0c5dca52ee81244c660d3c2ff65d580c03dc1a4.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/7f39cb0c5dca52ee81244c660d3c2ff65d580c03dc1a4.png?mw=700" alt="" /></a></p> <h3>「傾向グラフ」タブ</h3> <p>スコアは単純にWPMと正確率に相関があるので、<br /> WPMと正確率をそれぞれ軸に持つグラフを作成してみた。<br /> 右に行くほどタイピング速度が速く、上に行くほど正確にタイピングできることを示す。<br /> <a href="https://crieit.now.sh/upload_images/e40e06bce35e3ceca1be5b957251e7805d580d1073154.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e40e06bce35e3ceca1be5b957251e7805d580d1073154.png?mw=700" alt="" /></a><br /> 私はタイピング速度そこそこ早いけどしょっちゅう間違えます<br /> (´・ω・‘)</p> <h2>ユーザ個人ページ</h2> <h3>「苦手キー」タブ</h3> <p>前回、CSSの書き換えに失敗した話を書いたのですが、<br /> 同僚エンジニアさんがサクッと直してくれました(ありがとうございます...!<br /> <a href="https://crieit.now.sh/upload_images/dff46e83372943224665879750da16be5d580e8ec51b1.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/dff46e83372943224665879750da16be5d580e8ec51b1.png?mw=700" alt="" /></a></p> <h3>「グラフ」タブ</h3> <p>日付でGROUP BYした結果をグラフにしました。<br /> <a href="https://crieit.now.sh/upload_images/aa4dd599478ee4d40f9496e64b955de75d581076c6d03.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/aa4dd599478ee4d40f9496e64b955de75d581076c6d03.png?mw=700" alt="" /></a></p> <h3>ユーザ&テーマページ</h3> <p>ユーザページからテーマを選択すると、ユーザとテーマでフィルタした結果が閲覧できるようにしました。<br /> <a href="https://crieit.now.sh/upload_images/7dde7d39177c2fc8ac81e6e469fa63b55d581101a6c6f.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/7dde7d39177c2fc8ac81e6e469fa63b55d581101a6c6f.png?mw=700" alt="" /></a></p> ckoshien tag:crieit.net,2005:PublicArticle/8-12 2019-08-12T22:00:59+09:00 2019-08-12T22:00:59+09:00 https://crieit.net/boards/e-typing/8-12 8/12進捗 <h2>ユーザページ</h2> <h3>苦手キー</h3> <p><a href="https://crieit.now.sh/upload_images/7f39cb0c5dca52ee81244c660d3c2ff65d5160c928559.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/7f39cb0c5dca52ee81244c660d3c2ff65d5160c928559.png?mw=700" alt="" /></a><br /> 本システム一番の見せ場...のはずが、CSS書き換え効かない問題が立ちはだかる。</p> <p>苦手キーの算出ロジックは実装済み。<br /> (文字表示のみ)</p> <h3>グラフ</h3> <p><a href="https://crieit.now.sh/upload_images/e40e06bce35e3ceca1be5b957251e7805d51619f6820b.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e40e06bce35e3ceca1be5b957251e7805d51619f6820b.png?mw=700" alt="" /></a></p> <ul> <li>chart.jsで実装</li> <li>実は時系列が左右逆</li> <li>なぜかツールチップ出ない</li> <li>正確率わかりにくい</li> <li>レベルの境目で補助線引きたい</li> </ul> <h3>実施状況</h3> <p><a href="https://crieit.now.sh/upload_images/dff46e83372943224665879750da16be5d516259480d9.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/dff46e83372943224665879750da16be5d516259480d9.png?mw=700" alt="" /></a></p> <ul> <li>タイピング練習の実施状況を可視化</li> <li>スタイルに手を加えた</li> </ul> <h2>グループ(組織)ページ</h2> <p>組織に所属するメンバー全員のタイピング成績が閲覧できるページです。<br /> <a href="https://crieit.now.sh/upload_images/b08b548caec5795ad40e35af9c85f4c95d515f40b15ab.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/b08b548caec5795ad40e35af9c85f4c95d515f40b15ab.png?mw=700" alt="" /></a></p> <ul> <li>パンくずリスト追加</li> <li>ユーザページへのリンク追加</li> <li>タブ色変更</li> <li>トークン発行(ログイン)ページへのリンク追加</li> <li>ロゴ変更、キャッチフレーズの追加</li> </ul> <h2>トップページ</h2> <p>コンテンツ未定のため、ロゴしかありません(笑</p> ckoshien tag:crieit.net,2005:PublicArticle/8-11 2019-08-11T23:07:23+09:00 2019-08-11T23:07:23+09:00 https://crieit.net/boards/e-typing/8-11 8/11進捗 <h2>最低限動作するところまで来ました</h2> <p>reactアプリの実装も徐々に進んでいます。<br /> <a href="https://crieit.now.sh/upload_images/7f39cb0c5dca52ee81244c660d3c2ff65d501c800b0ff.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/7f39cb0c5dca52ee81244c660d3c2ff65d501c800b0ff.png?mw=700" alt="" /></a><br /> 昨日まではデータ登録部分の開発をしていましたが、<br /> 今日から登録したデータを分析するreactアプリの実装に取り掛かりました。</p> <h2>急遽グループという概念を取り入れた</h2> <p>基本的に単一のグループで使うという認識ですが、<br /> まあ複数グループがあった方が使いやすいなと思って急遽DB定義などに変更を入れて、ユーザが組織に所属するという概念を取り入れました。</p> <h2>サンプルデータの準備</h2> <p>docker-composeを使っているので、初期データを用意しました。<br /> パスワードハッシュ化まだしてないです。</p> <h2>mixed content...!!</h2> <p>CORS問題、解消していたと思ったのですが、別のマシンからサーバにアクセスする際にmixed contentエラーが発生していました。<br /> 結局、chrome extensionのpassing messageを実装することによって対処しました。</p> <h1>react-simple-keyboard</h1> <p>苦手キーなどの表示に使おうと思ってますが...。</p> <h2>CSSが書き換わらない</h2> <p>classをaddする形で書いたのですが、何度やってもDOMに反映されず、実装個所を見たら毎回デフォルトのスタイルを書き戻していました。/(^o^)\ナンテコッタイ<br /> 正直ちょっとハマったので、他のライブラリ使ったほうがいいのか、他によりよい実装方法があれば教えていただきたいです。</p> <h2>README書きました</h2> <p>画像がなくて伝わりにくいかと思いますが。<br /> <a target="_blank" rel="nofollow noopener" href="https://github.com/ckoshien/e-typing-extension/blob/develop/README.md">README</a></p> ckoshien tag:crieit.net,2005:PublicArticle/chrome 2019-08-11T00:41:22+09:00 2019-08-11T00:41:22+09:00 https://crieit.net/boards/e-typing/chrome chrome拡張でローカルサーバーに結果を保存できるところまで実装 <h2>連休初日、6時間費やす</h2> <p>苦労した甲斐あって、Docker-composeで構成したMySQL上にめでたくデータを格納することに成功。<br /> <a href="https://crieit.now.sh/upload_images/799066a87701a837a4e33f9efdeaa9095d4ee479a534a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/799066a87701a837a4e33f9efdeaa9095d4ee479a534a.png?mw=700" alt="image" /></a></p> <p>いくつかどハマりした箇所があったので挙げておく。</p> <h2>CORS問題</h2> <p>e-typingサイト上でchrome拡張を動かしており、そこからローカルサーバに通信しようとすると、CORSが発生する。</p> <h3>manifest.jsonでpermissionを記述する</h3> <p>通信先のサーバを<code>permissions</code>に記述することで回避できる。</p> <pre><code class="json">{ "中略":"", "permissions": [ "http://localhost:3000/" ], } </code></pre> <h2>fetchは変数名とプロパティが同じ!?</h2> <p><a target="_blank" rel="nofollow noopener" href="https://github.com/ckoshien/e-typing-extension/commit/0c273e929c718f61f02b9a8868897f22886910f5#diff-f3f99c6071d165a12563ba1b92af5d99R49">ソース上の変更点</a></p> <p>fetchでPOSTする際に変数で<code>encodedBody</code>などと記述していたが、<br /> nodeJS側でリクエストボディがemptyとなる状況が発生。<br /> リクエストボディは<code>body</code>という変数で送らないと認識されない模様。<br /> (根拠はまだ探していない)</p> <h2>残りタスク</h2> <p>あまり時間がないので使い方は後日書きます。<br /> ソースを読んでそのまま使えそうな方はそのままお使い下さい(笑</p> <ul> <li>ReactJSによるフロントUI実装</li> <li>ReactJSで使用するデータの取得API(NodeJS)</li> </ul> ckoshien tag:crieit.net,2005:PublicArticle/e-typing 2019-08-04T21:20:22+09:00 2019-08-04T21:20:22+09:00 https://crieit.net/boards/e-typing/e-typing e-typing分析プロジェクト始めました <p>タイピング練習サイトに「e-typing」があるのですが、<br /> グループ内で結果を共有して分析とか自動化したいね、という話があり、ユーティリティを作り始めました。</p> <p>github:<a target="_blank" rel="nofollow noopener" href="https://github.com/ckoshien/e-typing-extension">e-typing-extension</a></p> <h2>原理</h2> <p>リザルト画面にiframeを使っているので、それが表示された瞬間に処理を開始します。<br /> <a href="https://crieit.now.sh/upload_images/b08b548caec5795ad40e35af9c85f4c95d46cc4f4cd19.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/b08b548caec5795ad40e35af9c85f4c95d46cc4f4cd19.png?mw=700" alt="リザルト画面" /></a><br /> あとはクエリセレクタで表示されている値を取得して、サーバに送るだけ。</p> <p>現在のところこんな形で値が取れています。</p> <pre><code class="json">{ accuracy: "100%", level: "A", miss: "0", score: "237", weak_point: "", wpm: "237.25" } </code></pre> <p>POST先とタイミングをユーザに決めてもらうので、<br /> サーバアドレスの入力フォームをDOMで追加しないといけないな、というところです。</p> <h1>現在検討中の技術</h1> <h2>クライアントサイド</h2> <h3>データ収集</h3> <p>サーバに送る前の値をchrome extensionでインターセプトすることにしました。</p> <ul> <li>chrome extension</li> <li>pure javascript</li> </ul> <p>jQueryはもう業務でも使っていないのでpure jsで色々書けるようになった方がいいかなと。react.jsを使ったchrome extensionもあるみたいなのですが。。。</p> <h3>データ表示</h3> <ul> <li>ReactJS</li> </ul> <p>これは<code>ReactJS</code>一択でいいんじゃないですかね。<br /> 苦手なキーの表示にキーボードを表示したいけどライブラリあったかな。グラフは<code>Chart.js</code>一択。</p> <h2>サーバサイド</h2> <ul> <li>Go言語 あるいはNodeJS/Typescript</li> </ul> <p>チャレンジするなら<code>Go</code>だと思いますが早く実用に載せたいので応急措置的にNodeでもいいかなぁ。</p> <h2>docker/docker-compose</h2> <ul> <li>Go環境</li> <li>DB <ul> <li>おそらくMySQL</li> </ul></li> <li>react統合するかどうか</li> </ul> <p>docker swarm使おうかとも思ったのですが、今回はLAN内に限定した使い方にしようかと思っていて、ローカルサーバに2系統は不要ですよね、と。<br /> ローカルサーバじゃなくてラズパイでもいいかな。</p> ckoshien