自動更新プランの更新直前にイングリッシュベルを解約するために3510円かかった話

やる気がなくなったのでイングリッシュベルを解約しようとしてQAを見ていたら

https://english-bell.com/ja/guide/anwser.html?id=86

f:id:inabajunmr:20190725175948p:plain

とのことだったので、解約を依頼したところ、

  • レッスンを消化しきった上で次回自動更新日 の5営業日前に連絡しろ
  • もう次回更新日まで5営業日を切っているので、今回の自動更新は止められない

と返信があった。

なんだそのルールは、と思ってページを見ていたところ

https://english-bell.com/ja/info2/fee2.html f:id:inabajunmr:20190725180441p:plain

という記載があった。自動更新を契約する際の導線にその記載がないのはどうなんだと思ったが、めんどくさいので素直に解約することにした。

が、そのままレッスンを消化して自動更新がかかった後に再度解約依頼をする場合、今のプランの更新料がそのままかかってしまうので、一旦レッスンを全て消化してから自動更新・月5回プランに変更した。ここで3510円かかった。さようならイングリッシュベル。パスワードを平文で保存するのはよくないのではないか。

2019年6月にやったこと

引き続きSpring Security・OAuth2.0、OIDCあたりをごにょごにょしていた。 中国語がだれている。というか全体的にだれていた。

英語

English Bellを23レッスン受講した。 かなりダレてきたのでプランを軽いやつに変更した。 代わりに福利厚生でレアジョブができるようになったのでちょっとやってみている。

5月に受けたTOEICはR400、L350の750だった。受けるたびにReadingのスコアが伸びているが、それ以上にListningのスコアが落ちるので合計がどんどん下がっている。 なんで英会話しかやってないのにこうなるのか不思議だ。 あとは文法が全然ダメでPart7が9割くらい正解している人になっているので、文法をいい感じにするとRは450くらいを目指せる気がしている。Lはもうわからん。

OAuth徹底入門 セキュアな認可システムを適用するための原則と実践

token endpointにredirect_urlを送る理由とか、stateパラメータの存在意義とかがいまいちわからず、うーん???となっている。 あとはhttps://openid.net/specs/openid-connect-session-1_0.htmlを読んだりしていた。

情熱プログラマー

なんか気づいたら読み終わってた。

その他

Treviewの改修したりしてた。 https://github.com/inabajunmr/treview

これからやること

2019年5月にやったこと

Androidアプリがらみの資料とかみてた。 業務ではSpring SecurityとOAuth 2.0関連をごにょごにょしてた。あとDynamoDBとか。Spring Securityはフィルター。

Release It! 本番用ソフトウェア製品の設計とデプロイのために

読み終わった。Resilience4jで遊ぶ的なことを考えている。

英語

English Bellを39レッスン受講した。ステージ8がはじまった。 TOEICを受けたので直前にhttps://www.amazon.co.jp/dp/4023304603/を読んだ。 TOEICはRはまあまあでLが死んだ。結果は6月半ば。あとiKnowをサボってたのでちょこちょこやってた。

中国語

https://www.amazon.co.jp/dp/4863922191を読んでたが停滞している。四声が覚えられないストレスがやばい。 https://www.udemy.com/chinese-made-easy これを半分くらい見た。発音については本よりもレッスンのがいい。 本だと同じ音声をループするのがつらい。

6/23に中国語検定の準4級と4級を受けるが間に合うのか。

Kotlinのリファレンス読む

コルーチン以外の部分をざっくり読んだ。とりあえず一旦終わりにしてコードを書く。

OAuth徹底入門 セキュアな認可システムを適用するための原則と実践

ちまちま読んでる。OAuth2.0の各認可フローはだいたい頭に入ってるのでそのあたりはサクサク読んでる。

Android 入門読んだ

ざっくりわーっと動かしながら読んだ。 http://inabajunmr.hatenablog.com/entry/2019/05/05/182705

あとはサンプルアプリ眺めてなんとなく雰囲気を掴んだりした。 http://inabajunmr.hatenablog.com/entry/2019/05/06/135147

スマホアプリの設計を雑にしたのでコードを書いていく。

Clean Architecture 達人に学ぶソフトウェアの構造と設計

なんとなく読み始めた。オブジェクト指向ってなあに?についてはいままでで一番納得感がある。まだ本番に入ってない感じ。さっと読みたい。

これからやること

  • 読書会プラットフォーム作る
  • プログラミングコンテスト攻略のためのアルゴリズムとデータ構造
    • 読む
  • ElectronかWebアプリ(サーバなし)でNature RemoのPC用クライアントを作る
    • なぜか俺は音声やスマホよりもPCで操作したい時がたまにある
      • あとはSPAとJSの学習用に
        • 読書会プラットフォームの後
  • Goならわかるシステムプログラミング
  • Kotlinがらみなんか
    • Kotlinインアクションとか
  • 英語
  • 中国語
  • ここ最近ほとんど業務でプログラミングをしなくなって、調整とかレビューとかばっかしてるがかなり雰囲気でやってるので、マネジメント系の本を読もうとしている
    • なにがいいのかよくわからん
  • Effective Go - The Go Programming Language
  • パタヘネ
  • スマホアプリ作る

Android Architecture Components Basic Sampleを眺める

なんとなくAndroidアプリ作れそうな空気は感じたけどどういう構造にするのが一般的なのか知りたかったのでこれを眺めている。

github.com

root

BasicAppがApplicationを実装しててこいつ経由でリポジトリとってこれるようになってる

db

  • DataGenerator
    • fixture的なやつ

converter

Utility的な

dao

Dao。 LiveDataで受けるようにすると、データの変更に対してXXXを発火、みたいなことができる

entity

Entity。

model

なんかデータのフィールドを持ってるinterface。entityが背負っている。 entityをmodelの層で使うぜ的なあれ?

ui

Activityがここにいる MainActivityのonCreateの引数のBundleてなんだろ

https://qiita.com/yyyske/items/c6e342a9008bebef75bd

Activityが死ぬとここになんか入ってくるらしい

Activityが破棄されたあとの復元時に必要なデータをbundleに突っ込んどいてonCreateでbundleがnullの時に復元すると良いらしい

が、このサンプルではそういうことをしてる感じがしないのでよくわからん

Adaptor

Flagmentでモデルに変更が入るとAdaptorに変更後のデータをセットする感じ RecyclerView.Adapterは多分RecyclerViewに値をバインドするのをやっている

Viewmodel

  • ViewModelがいる
  • ViewModelのファクトリが初期化されるタイミングでApplicationからリポジトリを取得してる
  • ViewModel自体はリポジトリとApplicationを受け取って初期化時に必要なデータを取ってきてる

ということはViewModelそのものは 画面に表示するためのデータを取ってきて保持するやつ という理解でいいのかな

ViewModelはFlagmentのonActivityCreatedで生成している。 https://github.com/googlesamples/android-architecture-components/blob/17c315a050745c61ae8e79000bc0251305bd148b/BasicSample/app/src/main/java/com/example/android/persistence/ui/ProductFragment.java#L68

onActivityCreatedはFlagmentが呼び出されたActivityのonCreateで呼ばれる http://sakura-bird1.hatenablog.com/entry/20111207/1323267262

その他

fragmentってなんだ https://qiita.com/Reyurnible/items/dffd70144da213e1208b Activityの画面の中に表示される一要素って感じ

ざっくり流れとしての理解

  1. MainActivityが呼び出されると、Fragmentを生成して画面要素にFragmentを追加?
    1. https://github.com/googlesamples/android-architecture-components/blob/17c315a050745c61ae8e79000bc0251305bd148b/BasicSample/app/src/main/java/com/example/android/persistence/ui/MainActivity.java#L34
    2. 画面側としてはFragmentのコンテナだけ用意しとく感じ
  2. FragmentのonCreateViewが呼ばれて、レイアウトが設定される
  3. FragmentのonActivityCreatedが呼ばれる
    1. ViewModelProviders経由でViewModelを生成する(ViewModelProvidersはViewModelのライフサイクルを管理してくれるらしい)
    2. subscribeToModelでモデルをサブスクライブする
  4. Daoからデータを変更すると、LiveDataで取得したデータについてオブザーブしている部分が発火する
  5. 変更後のデータをアダプター経由でViewに伝える

大体こんな雰囲気だと理解した

Android 入門を読んでいる

Android 入門を読んでいる

使ってた筋トレ記録アプリが突如としてサービスを終了し、他にしっくり作るアプリが見つからなかったのでとにかく単純なログアプリを作ろうとしている。 ので、とりあえずAndroid入門を読んでいる。

てきとう

  • Activity:単位がよくわからない。今の所1画面1アクティビティだけど説明見た感じそういう事でもなさそう
    • ユーザがなんかする1単位?  * 画面でいいらしい
  • AndroidManifest.xml
    • Chrome extensionのマニフェストみたいな
    • アイコンとかどういう画面あってどういう関係か、とかを定義
    • 呼べるAPIの制限とか
      • カメラ使えるかどうかとか
  • ViewGroupはViewを束ねたやつ
    • レイアウト、という感覚で良さそう
    • Viewはレイアウト内の要素
  • UIはXMLで定義する
  • テキストはstrings.xmlに定義してUIのXMLで設定する
  • リソースはR.xxx(package).xxx(id)で参照できる
    • なんでだ

ボタン押してどうこう

Activity内にメソッド定義(引数がViewで、戻り値なし)して、これをView側のonClick属性に設定すると押したタイミングでメソッドがコールされる。

IntentはコンポーネントをバインドしてXXXする、みたいなのを表現する何かっぽいが感覚がわからん。Activity内のメソッドから別のActivityをセットしたIntentを用意してstartAcitivity()するとActivityから別のActivityを起動できる感じ。 Intent経由でActivity間のメッセージ送信もできる。起動した後のActivityでもIntentを参照できるっぽい。同じインスタンスなのかよくわからん。

Android StudioでActivity作るときはNew > Activity > Empty Activityで作るとレイアウトファイル作ってマニフェストにActivityをセットして、までをまとめてやってくれる。

コンポーネント

https://developer.android.com/guide/components/fundamentals?hl=ja

  • Activity
    • 画面
  • Service
    • バックグラウンドで動くやつ
    • 再生中の曲とか
  • ContentProvider
    • なんか永続化するやつとか
    • あんまわからん
    • ActivityからSQLite呼ぶ的なあれとは違うのか
    • ガイドにSQLiteがどうこうって書いてあるけどSQLiteデファクトスタンダート的なあれなのだろうか
  • BroadcastReceiver
    • なんかイベントハンドラ的なやつ?
    • 電池きれそうになったらXXXX!とかなんかダウンロード終わったら通知みたいな
    • 状況に関わらずなんか起きたらなんかする、みたいな感じ?

別のアプリのアクティビティも起動できるらしい。自分で開発したアプリからデフォルトのカメラアプリを起動するとか。プロセスは別になる。 なので、Androidアプリのエントリポイントは複数あって、main()ではない。いわゆるアプリ起動時のエントリポイントはマニフェストで定義する。

なんとなく雰囲気的には

アクティビティからインテントを定義して別のコンポーネントをコール→コンポーネントが起動する。インテントでゴニョゴニョする→元のアクティビティに戻したければ戻す。インテントを介してデータを戻したりもできる

みたいな感じが基本的な流れなんだろうか

コンテンツプロバイダ

https://developer.android.com/guide/topics/providers/content-provider-basics?hl=JA

そもそもなんなのかがわからん 永続化のための抽象的なレイヤーなのかなと思ってるが

なのでチュートリアルを見ている https://developer.android.com/guide/topics/providers/content-provider-creating

と思ったけど単純にローカルのSQLite使いたいだけならRoomな感じがするな

Room

https://developer.android.com/training/data-storage/room

we highly recommend using Room instead of SQLite はい

DatabaseクラスからDaoを取ってきてDao経由でEntityを取得したり永続化したりする感じだ

適当なボタンのonClickからデータを登録したりなんだりしたらこうなった

Caused by: java.lang.RuntimeException: cannot find implementation for com.example.myfirstapp.model.AppDatabase. AppDatabase_Impl does not exist

https://stackoverflow.com/questions/46665621/android-room-persistent-appdatabase-impl-does-not-existの回答に従ってbuild.gradleをいじると

Caused by: java.lang.IllegalStateException: Cannot access database on the main thread since it may potentially lock the UI for a long period of time.

になった。

https://qiita.com/toastkidjp/items/49ad3035a6df525ce040 ほーーん???

ほーーん?????

ボタン押すとデータ取ってきて画面に表示、みたいのはどう実装するのが良いのか

安直にAsyncTaskで全部やるようにしたら元のスレッドからしかビューをいじれんぞと怒られる

android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.

DB触るだけならこれで良さそうだけど画面に表示して云々はこれだとダメそう

DB触るの重い処理だからバックグラウンドでやろうぜ、はわかるようなわからないような感じなんだけど(SPAでAPI叩くのと同じノリだと思っている)、紙芝居形式のアプリでそこ頑張るメリットがよくわからなかったのでとりあえずallowMainThreadQueriesでいいやとなってしまった 初期化はどのタイミングでするのが良いのだろうか あとはマイグレーションどうするとかかなーその辺解決したらとりあえず作り始めて良さそうだ

qiita.com

なんかこのチュートリアルが良さそう

Android Room with a View - Kotlin

リポジトリがDao持ってて、ViewModelインスタンスの初期化時にリポジトリ初期化してあとはViewModelがリポジトリ持ってる感じだった これActivityでも同じ事していいんだろうか というかViewModelがなんなのかよくわかってない

qiita.com

なんかいい感じのサイズのサンプルアプリケーションとかないかな

サンプルを眺める

github.com

良さげだ

2019年4月にやったこと

なんかKotlinのリファレンスとか見てた

Release It! 本番用ソフトウェア製品の設計とデプロイのために

17章くらいまでみた。読み終わったらどうしようかな的なことを考えている。サーキットブレーカーで遊ぶ会みたいなのやったら良いだろうか。

英語

English Bellを42レッスン受講した。ゴールデンウィークはサボっていた。ステージ7の途中まで行った。

中国語

https://www.amazon.co.jp/dp/4863922191をひたすら読んでた。

若干掴めてきた感じはある。6/23に中国語検定の準4級と4級を受けてみる。

速習 Kotlin: Javaより簡単!新Android開発言語を今すぐマスター 速習シリーズ

ざらざらっと読んだ。公式のリファレンスだけでも良さそうではあったけどサクッと読めたのでよかった。

Kotlinのリファレンス読む

読んでる

http://inabajunmr.hatenablog.com/

どこまで読むか悩んでるんだけどOtherが結構重要そうなんだよな Core Librariesとかも読みたい

OAuth徹底入門 セキュアな認可システムを適用するための原則と実践

Kindleでセールやってたので勢いで買ってしまった。電車とかで読んでる。多分release it読み終わってから真面目に読む

これからやること

  • 読書会プラットフォーム作る
  • プログラミングコンテスト攻略のためのアルゴリズムとデータ構造
    • 読む
  • ElectronかWebアプリ(サーバなし)でNature RemoのPC用クライアントを作る
    • なぜか俺は音声やスマホよりもPCで操作したい時がたまにある
      • あとはSPAとJSの学習用に
        • 読書会プラットフォームの後
  • Goならわかるシステムプログラミング
  • Kotlinがらみなんか
    • Kotlinインアクションとか
  • 英語
  • 中国語
  • Release It!
  • ここ最近ほとんど業務でプログラミングをしなくなって、調整とかレビューとかばっかしてるがかなり雰囲気でやってるので、マネジメント系の本を読もうとしている
    • なにがいいのかよくわからん
  • Effective Go - The Go Programming Language
  • パタヘネ