英語ディクテーション学習Webアプリ(8)
前回の続き。
プロファイルでの環境差異の吸収
ローカルはオンメモリデーターベース、Heroku上ではPostgreSQLとなり、環境差異を吸収する必要が出てくるので、Spring Bootのプロファイルを調べて導入しないといけません。
というわけで調べました。
-Dspring.profiles.active=dev
というVM引数を渡すと、プロファイルを切り替えられます。dev環境のプロパティファイルは、application-dev.propertiesに書けば反映されます。Heroku環境で、このVM引数の渡し方はイマイチ分からなかったので、productionをdefaultとして、開発環境では上記のようにdevプロファイルとして起動することで解決しました。
これで、開発環境はh2database、本番環境はPostgreSQLで切り替え可能になりました。ちなみにHeroku上のPostgreSQLは無料で簡単に作れます。しかし、無料枠では1万行までしか扱えないなどの制限があるようです。
ちなみに、spring bootで設定情報をソースの外に出す方法についてはもっと色々あって、下記を参照すると良いようです。
24. Externalized Configuration
PostgreSQLのjdbc URL/username/passwordは、バージョン管理したくないので、環境変数(HerokuのConfig Vars)に設定しています。
データベース差異の吸収
データベースへの初期データ投入は、spring bootの機能で、data.sqlを用意しておくと起動時に実行してくれるという仕組みを利用していますが、h2databaseとPostgreSQLで微妙に文法が違うことが災いして、1つのdata.sqlで対応できないことが判明しました。
ここで役立つのがspring.datasource.platformという設定。これを使って、dev環境は、spring.datasource.platform=h2にして、data-h2.sqlを用意。production環境は、spring.datasource.platform=postgresqlにして、data-postgresql.sqlを用意、という風に分けることが可能です。同じようなSQLをコピペすることにはなりますが、いったん回避できました。
英語ディクテーション学習Webアプリ(7)
ユーザ認証の実装
学習記録をとれるようにするにあたり、ユーザを識別出来ないとダメだろうということで、認証を作ってました。
自前でユーザ・パスワード管理しても良いのですが、あんまりパスワード持ってたくないよねってのもあったので、Spring Social Twitterを使って、Twitterログインを実装してみました。
今一つSpring Securityとの連携がよく分からなかったのですが、下記ページがとても参考になりました。
Twitter認証通った後、TwitterのscreenNameとSpring Securityのusernameをマッピングして、Spring Securityの認証も通ったことにしてあげると良さげな動作をしてくれます。
(参考)その辺の実装
dictation/IndexController.java at master · taka2/dictation · GitHub
データベースの導入
とりあえずH2 Databaseのオンメモリ版を入れてみました。これだとインスタンスの再起動時にデータが消えてしまうので、マスタ管理には使えますが、記録には使えません。
RDSも少し試してみたのですが、基本プライベートネットワークに置いて、IAMインスタンスプロファイルを設定したEC2インスタンスからアクセスさせるのが良さそうです。この規模のアプリケーションには要らないかな。。HerokuでもPostgreSQL使えるみたいなので、そちらを検討しようと思います。
そうなると、ローカルはオンメモリデーターベース、Heroku上ではPostgreSQLとなり、環境差異を吸収する必要が出てくるので、Spring Bootのプロファイルを調べて導入しないといけません。
ソフトバンクからLINEモバイルへ乗り換え
奥さんの携帯電話ですが、料金を安くしたいって延々主張してたら、ようやくキャリアメール(しかもvodafone.ne.jp)を捨てる決意が出来たので、MNPにて乗り換えとなりました。
コミュニケーションフリープランの、音声通話SIMで、3GBのにしたので、1,690円/月です。
端末は、ソフトバンクで契約したiPhone6sをSIMロック解除してもらったので、SIM差し替えただけで、そのまま使えてます。ただ、最近動作が不安定なので、近々iPhone8にするかも。。端末を自由に入れ替えられるのも、SIMフリーの魅力ですよね。
ソフトバンクには解約月じゃないからうんぬんとか言われたんですが、また電話するのも面倒だし、半年もすれば元取れるし、もういいやってことで手続きしてしまいました。こまけぇこたぁいいんだよ!
LINEモバイルの回し者じゃないですが、1周年のキャンペーンやってて、LINEのクレジットだかポイントだかもらえるらしいです。(すぐにはもらえないらしい)
英語ディクテーション学習Webアプリ(6)
データ移行も終わり、とりあえず使える状態にはなりました。iPadで気軽に学習が開始できるので、前よりはやりやすくなったと思います。
以前のワークフロー
- ノート、ボールペン、iPhoneを出す
- Musicアプリで音声を聞く
- 聞き取った英語をノートに書く
- 聞き取れない部分があったら、時間を戻して2に戻る
- 全部聞き取れたら、最初から再生して確認
- iBooksアプリを開いて(アプリを切り替えて)、解答のテキストとノートに書いたものを目でdiffを取って答え合わせする
Dictationアプリ後のワークフロー
- iPadでDictationアプリのサイトを開く
- 音声を聞く
- 聞き取った英語をテキストエリアに書く
- 聞き取れない部分があったら、時間を戻して2に戻る
- 全部聞き取れたら、最初から再生して確認
- Answerボタンを押すと、mergelyが自動的にdiffを取ってくれる
iPadのみで始められる気軽さと、mergelyが自動的にdiffを取ってくれる(人力で答え合わせしなくてよい)というのがメリットです。
iPadでやっていて、課題を2つ見つけたので、メモしておきます。
- Herokuはしばらくアクセスがないと、アプリが停止してしまい、次回アクセス時に起動に時間がかかる。(iPadの問題じゃないけど、運用上は不便)
→AWS勉強しているので、EC2 / S3 / Elastic Beanstalk / RDSあたり使うのが良さそう。
→HerokuのFreeから、Hobbyにアップグレード($7/dyno=application/month)すると、アプリが停止しない(sleepしない)ことが分かったので、とりあえずカネで解決もできてしまうことが判明した。 - iPadのIMEが優秀で、勝手にスペルミス等を修正してしまう。
→細かいミスは修正してくれてもいいかなとは思いますが、勉強にならないかも知れません。設定で出来るっぽいけど、システムワイドじゃなくて、このサイトだけ無効にしたいんですけどね。
IDC Japanが国内IT市場予測、2021年まで年平均1.1%でプラス成長続く
日経コンピュータ 2017/09/28より。
2016年に金融機関や小売業での大規模案件が一段落して成長率は鈍化するが、企業のデジタル化ニーズにより市場は微増するという。
デジタル化ニーズってなんなのってのがありますが、AIとかIoTとかでしょうか。今後生き残るために、こういう風向きを感じて、限りある時間を投資していかないといけません。
自転車ライト買ったけど盗まれた。。。
7月末頃に買ったクロスバイクですが、快適に乗ってます。ママチャリと違って、ライトを別に付けないといけなくて、当面は100円ショップのでしのいでましたが、ちょっと暗いのと、しばらく使ってたら(たぶん雨のせいで)壊れてしまったので、もうちょっとちゃんとしたのにしようということで、下記のを買って使っていました。
が、先日駐輪場に入れてあったのにも関わらず、残念ながらライト部分だけ盗まれてしまいました。。。残念。
自転車屋さんにはなぜか、店に並べてあるライトじゃなくて、100円ショップのがいいですよって、逆営業的なことをされていて、なんじゃそりゃ?!と思っていましたが、今思い返すと、良い物を買っても盗まれるので、100円ショップのが良いという意味だったんでしょうか。なかなか深かったです。
というわけで、またいつ壊れるとも知れないダイソーの100円のライトを買って付けてみました。 www.masa10xxx.com
同じようなことしてる人いますねw
英語ディクテーション学習Webアプリ(5)
pdfをテキスト化するのが面倒で、データ移行が進みません。。クラウドソーシングとかにお願いするのも一つの手なのかしら。結構お金かかりそうだけど。
実際に勉強始めるのに、PCを起動するのも手間だなと思い、iPadで出来ないか試してみました。ソフトウェアキーボードは打ちづらいけど、まあなんとか出来そうな感じ。画面タップ出来るので、むしろAlt+Fxで用意したショートカットキーは使わなくて済みそうです。
そこで見つけた問題が1つありまして、テキストエリアのIMEがデフォルトでONになってしまうというもの。で、これはググったらすぐ見つかりました。
ime-modeってのを指定すればよいようです。でも、今見直したら(IE独自仕様)って書いてありますね。iOSのSafariでは正しく動作していました。
IMEの切り替えの手間が減って捗りそうです。